標籤:rom bsp 長度 str 使用 意義 載入 原理 href
在機器學習任務中,經常會對資料進行預先處理.如尺度變換,標準化,二值化,正規化.至於採用哪種方法更有效,則與資料分布和採用演算法有關.不同演算法對資料的假設不同,可能需要不同的變換,而且有時無需進行變換,也可能得到相對更好的效果.因此推薦使用多種資料變換方式,用多個不同演算法學習和測試,選擇相對較好的變換方式和演算法.
下面對在 Python scikit-learn 庫(也稱 sklearn 庫)中的預先處理過程進行介紹:
1. 載入資料集;2. 將資料集分為用於機器學習的輸入變數和輸出變數;3. 對輸入變數進行變換(或預先處理);4. 顯示變換結果(可選).
本文採用 scikit-learn 庫內建的鳶尾花資料集(Iris Plants Database)作為樣本.
首先,載入資料集,擷取輸入變數 X 和輸出變數 y ,範例程式碼如下:
from sklearn import datasetsimport numpy as npdata = datasets.load_iris()X, y = data.data, data.targetnp.set_printoptions(precision=3)print ("\n" "Preprocess input variables: " "\n")print ("Raw Data: ")print (X[:5, :])
然後,變換輸入變數 X (類型為 <type ‘numpy.ndarray‘>),具體變換如下:
尺度變換
將輸入變數變換到某一範圍,如 0 ~ 1 區間.在 sklearn 庫中,使用 MinMaxScaler 類實現.常用於類似梯度下降的最佳化演算法,迴歸和神經網路中的加權輸入,以及類似 K 近鄰的距離度量.範例程式碼如下:
from sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler(feature_range=(0,1))rescaledX = scaler.fit_transform(X)# Print transformed dataprint ("\nRescaled Data: ")print(rescaledX[0:5,:])
標準化
通常適用於高斯分布的輸入變數.具體來說,將輸入變數中的每個屬性值減去其平均值,然後除以標準差,得到標準常態分佈的屬性值.在 sklearn庫中,使用 StandardScaler 類實現.常用於假定輸入變數高斯分布的線性迴歸,Logistic迴歸和線性判決分析.
from sklearn.preprocessing import StandardScalerscaler = StandardScaler().fit(X)standardizedX = scaler.transform(X)
print ("\nStandardized Data: ")print (standardizedX[0:5,:])
正規化
將輸入變數變換為具有單位範數長度的資料.常用的範數有L1,L2,詳見我之前的博文 "資料標準化 (data normalization) 的原理及實現 (Python sklearn)". 在 sklearn 庫中,使用 Normalizer 類實現.常用於含有許多 0 的稀疏資料集,像神經網路的採用加權輸入的演算法和像 K 近鄰採用距離度量的演算法.
from sklearn.preprocessing import Normalizerscaler = Normalizer().fit(X)normalizedX = scaler.transform(X)print ("\nNormalized Data: ")print (normalizedX[0:5,:])
二值化
使用門限值,將輸入資料二值化.當輸入變數值大於門限值時,變換為 1;當輸入變數值小於或等於門限值時,變換為 0.在 sklearn 庫中,使用 Binarizer 類實現.常用於擷取清晰的值的機率,產生新的有意義的屬性的特徵工程.
from sklearn.preprocessing import Binarizerbinarizer = Binarizer(threshold=0.0).fit(X)binaryX = binarizer.transform(X)print ("\nBinarized Data: ")print (binaryX[0:5,:])
參考資料
Jason Brownlee. How To Prepare Your Data For Machine Learning in Python with Scikit-Learn.
https://machinelearningmastery.com/prepare-data-machine-learning-python-scikit-learn/
資料預先處理(Python scikit-learn)