数据预处理(Python scikit-learn)
在機(jī)器學(xué)習(xí)任務(wù)中,經(jīng)常會(huì)對(duì)數(shù)據(jù)進(jìn)行預(yù)處理.如尺度變換,標(biāo)準(zhǔn)化,二值化,正規(guī)化.至于采用哪種方法更有效,則與數(shù)據(jù)分布和采用算法有關(guān).不同算法對(duì)數(shù)據(jù)的假設(shè)不同,可能需要不同的變換,而且有時(shí)無需進(jìn)行變換,也可能得到相對(duì)更好的效果.因此推薦使用多種數(shù)據(jù)變換方式,用多個(gè)不同算法學(xué)習(xí)和測(cè)試,選擇相對(duì)較好的變換方式和算法.
下面對(duì)在 Python scikit-learn 庫(kù)(也稱 sklearn 庫(kù))中的預(yù)處理過程進(jìn)行介紹:
1. 加載數(shù)據(jù)集;2. 將數(shù)據(jù)集分為用于機(jī)器學(xué)習(xí)的輸入變量和輸出變量;3. 對(duì)輸入變量進(jìn)行變換(或預(yù)處理);4. 顯示變換結(jié)果(可選).?
本文采用 scikit-learn 庫(kù)自帶的鳶尾花數(shù)據(jù)集(Iris Plants Database)作為示例.
首先,加載數(shù)據(jù)集,獲取輸入變量 X 和輸出變量 y ,示例代碼如下:
from sklearn import datasets import 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 區(qū)間.在 sklearn 庫(kù)中,使用 MinMaxScaler 類實(shí)現(xiàn).常用于類似梯度下降的優(yōu)化算法,回歸和神經(jīng)網(wǎng)絡(luò)中的加權(quán)輸入,以及類似 K 近鄰的距離度量.示例代碼如下:
from sklearn.preprocessing import MinMaxScalerscaler = MinMaxScaler(feature_range=(0,1)) rescaledX = scaler.fit_transform(X)# Print transformed data print ("\nRescaled Data: ") print(rescaledX[0:5,:])標(biāo)準(zhǔn)化
通常適用于高斯分布的輸入變量.具體來說,將輸入變量中的每個(gè)屬性值減去其平均值,然后除以標(biāo)準(zhǔn)差,得到標(biāo)準(zhǔn)正態(tài)分布的屬性值.在 sklearn庫(kù)中,使用 StandardScaler 類實(shí)現(xiàn).常用于假定輸入變量高斯分布的線性回歸,Logistic回歸和線性判決分析.
from sklearn.preprocessing import StandardScalerscaler = StandardScaler().fit(X) standardizedX = scaler.transform(X)print ("\nStandardized Data: ") print (standardizedX[0:5,:])
正規(guī)化
將輸入變量變換為具有單位范數(shù)長(zhǎng)度的數(shù)據(jù).常用的范數(shù)有L1,L2,詳見我之前的博文 "數(shù)據(jù)正規(guī)化 (data normalization) 的原理及實(shí)現(xiàn) (Python sklearn)". 在 sklearn 庫(kù)中,使用 Normalizer 類實(shí)現(xiàn).常用于含有許多 0 的稀疏數(shù)據(jù)集,像神經(jīng)網(wǎng)絡(luò)的采用加權(quán)輸入的算法和像 K 近鄰采用距離度量的算法.
from sklearn.preprocessing import Normalizerscaler = Normalizer().fit(X) normalizedX = scaler.transform(X)print ("\nNormalized Data: ") print (normalizedX[0:5,:])二值化
使用門限值,將輸入數(shù)據(jù)二值化.當(dāng)輸入變量值大于門限值時(shí),變換為 1;當(dāng)輸入變量值小于或等于門限值時(shí),變換為 0.在 sklearn 庫(kù)中,使用 Binarizer 類實(shí)現(xiàn).常用于獲取清晰的值的概率,產(chǎn)生新的有意義的屬性的特征工程.
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/
轉(zhuǎn)載于:https://www.cnblogs.com/klchang/p/9061399.html
總結(jié)
以上是生活随笔為你收集整理的数据预处理(Python scikit-learn)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20172313 2017-2018-2
- 下一篇: 无线覆盖项目地勘——无线地勘记录