數據預處理(Python scikit-learn)


在機器學習任務中,經常會對數據進行預處理.如尺度變換,標准化,二值化,正規化.至於采用哪種方法更有效,則與數據分布和采用算法有關.不同算法對數據的假設不同,可能需要不同的變換,而且有時無需進行變換,也可能得到相對更好的效果.因此推薦使用多種數據變換方式,用多個不同算法學習和測試,選擇相對較好的變換方式和算法.

下面對在 Python scikit-learn 庫(也稱 sklearn 庫)中的預處理過程進行介紹:

1. 加載數據集;

2. 將數據集分為用於機器學習的輸入變量和輸出變量;

3. 對輸入變量進行變換(或預處理);

4. 顯示變換結果(可選).

 

本文采用 scikit-learn 庫自帶的鳶尾花數據集(Iris Plants Database)作為示例.

首先,加載數據集,獲取輸入變量 X 和輸出變量 y ,示例代碼如下:

from sklearn import datasets import numpy as np data = datasets.load_iris() X, y = data.data, data.target np.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 MinMaxScaler scaler = MinMaxScaler(feature_range=(0,1)) rescaledX = scaler.fit_transform(X) # Print transformed data
print ("\nRescaled Data: ") print(rescaledX[0:5,:])

標准化

通常適用於高斯分布的輸入變量.具體來說,將輸入變量中的每個屬性值減去其平均值,然后除以標准差,得到標准正態分布的屬性值.在 sklearn庫中,使用 StandardScaler 類實現.常用於假定輸入變量高斯分布的線性回歸,Logistic回歸和線性判決分析.

from sklearn.preprocessing import StandardScaler scaler = 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 Normalizer scaler = Normalizer().fit(X) normalizedX = scaler.transform(X) print ("\nNormalized Data: ") print (normalizedX[0:5,:])

二值化

使用門限值,將輸入數據二值化.當輸入變量值大於門限值時,變換為 1;當輸入變量值小於或等於門限值時,變換為 0.在 sklearn 庫中,使用 Binarizer 類實現.常用於獲取清晰的值的概率,產生新的有意義的屬性的特征工程.

from sklearn.preprocessing import Binarizer binarizer = 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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM