1. 程式人生 > >數據預處理(Python scikit-learn)

數據預處理(Python scikit-learn)

距離度量 sklearn 神經網絡 效果 binary load roc maxscale 可能

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

下面對在 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/

數據預處理(Python scikit-learn)