目錄
- 1.數(shù)據(jù)預(yù)處理
- 1.1調(diào)整數(shù)據(jù)尺度
- 1.2正態(tài)化數(shù)據(jù)
- 1.3標(biāo)準(zhǔn)化數(shù)據(jù)
- 1.4二值數(shù)據(jù)
- 2.數(shù)據(jù)特征選定
- 2.1單變量特征選定
- 2.2遞歸特征消除
- 2.3數(shù)據(jù)降維
- 2.4特征重要性
- 總結(jié)
特征選擇時(shí)困難耗時(shí)的,也需要對需求的理解和專業(yè)知識的掌握。在機(jī)器學(xué)習(xí)的應(yīng)用開發(fā)中,最基礎(chǔ)的是特征工程。
——吳恩達(dá)
1.數(shù)據(jù)預(yù)處理
數(shù)據(jù)預(yù)處理需要根據(jù)數(shù)據(jù)本身的特性進(jìn)行,有缺失的要填補(bǔ),有無效的要剔除,有冗余維的要刪除,這些步驟都和數(shù)據(jù)本身的特性緊密相關(guān)。
1.1調(diào)整數(shù)據(jù)尺度
如果數(shù)據(jù)的各個(gè)屬性按照不同的方式度量數(shù)據(jù),那么通過調(diào)整數(shù)據(jù)的尺度讓所有屬性按照相同的尺度來度量,就會給機(jī)器學(xué)習(xí)的算法模型訓(xùn)練帶來極大的方便。
在scikit-learn中,可以通過Min Max Scalar類來調(diào)整數(shù)據(jù)尺度。將不同計(jì)量單位的數(shù)據(jù)統(tǒng)一成相同的尺度,利于對事物的分類或分組。Min Max Scalar其實(shí)是將屬性縮放到一個(gè)指定范圍,或者對數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化并將數(shù)據(jù)都聚集到0附近,方差為1。
from numpy import set_printoptions
from pandas import read_csv
from sklearn.preprocessing import MinMaxScaler
filename = 'pima_data.csv'
names = ['preg','plas','pres','skin','test','mass','pedi','age','class']
data = read_csv(filename,names = names)
#將數(shù)據(jù)分為輸入數(shù)據(jù)和輸出結(jié)果
array = data.values
X = array[:,0:8]
#X相當(dāng)于所有數(shù)據(jù)
Y = array[:,8]
#Y為最后的class,即結(jié)果
transformer = MinMaxScaler(feature_range=(0,1)).fit(X)
#數(shù)據(jù)轉(zhuǎn)化
newX = transformer.fit_transform(X)
#設(shè)定數(shù)據(jù)的打印格式
set_printoptions(precision=3)
#設(shè)置精度
print(newX)
[[0.353 0.744 0.59 ... 0.501 0.234 0.483]
[0.059 0.427 0.541 ... 0.396 0.117 0.167]
[0.471 0.92 0.525 ... 0.347 0.254 0.183]
...
[0.294 0.608 0.59 ... 0.39 0.071 0.15 ]
[0.059 0.633 0.492 ... 0.449 0.116 0.433]
[0.059 0.467 0.574 ... 0.453 0.101 0.033]]
1.2正態(tài)化數(shù)據(jù)
正態(tài)化數(shù)據(jù)是有效的處理符合高斯分布數(shù)據(jù)的手段,輸出結(jié)果以0為中位數(shù),方差為1。使用scikit-learn提供的Standard Scalar類來進(jìn)行正態(tài)化處理。
transformer = StandardScaler().fit(X)
#數(shù)據(jù)轉(zhuǎn)換
_newX = transformer.transform(X)
#設(shè)定數(shù)據(jù)打印格式
set_printoptions(precision=3)
#設(shè)置精度
#print(_newX)
[[ 0.64 0.848 0.15 ... 0.204 0.468 1.426]
[-0.845 -1.123 -0.161 ... -0.684 -0.365 -0.191]
[ 1.234 1.944 -0.264 ... -1.103 0.604 -0.106]
...
[ 0.343 0.003 0.15 ... -0.735 -0.685 -0.276]
[-0.845 0.16 -0.471 ... -0.24 -0.371 1.171]
[-0.845 -0.873 0.046 ... -0.202 -0.474 -0.871]]
1.3標(biāo)準(zhǔn)化數(shù)據(jù)
標(biāo)準(zhǔn)化數(shù)據(jù)是將每一行數(shù)據(jù)距離處理成1(在線性代數(shù)中矢量距離為1),又叫“歸一元”處理,適合處理稀疏數(shù)據(jù)(具有很多為0的數(shù)據(jù)),歸一元處理的數(shù)據(jù)對使用權(quán)重輸入的神經(jīng)網(wǎng)絡(luò)和使用距離的K近鄰算法的準(zhǔn)確度的提升有顯著作用。
使用scikit-learn中的Normalizer類實(shí)現(xiàn)。
transformer = Normalizer().fit(X)
#數(shù)據(jù)轉(zhuǎn)換
__newX = transformer.transform(X)
#設(shè)置數(shù)據(jù)打印格式
set_printoptions(precision=3)
print(__newX)
[[0.034 0.828 0.403 ... 0.188 0.004 0.28 ]
[0.008 0.716 0.556 ... 0.224 0.003 0.261]
[0.04 0.924 0.323 ... 0.118 0.003 0.162]
...
[0.027 0.651 0.388 ... 0.141 0.001 0.161]
[0.007 0.838 0.399 ... 0.2 0.002 0.313]
[0.008 0.736 0.554 ... 0.241 0.002 0.182]]
1.4二值數(shù)據(jù)
二值數(shù)據(jù)是使用值將數(shù)據(jù)轉(zhuǎn)化為二值,大于閾值設(shè)置為1,小于閾值設(shè)置為0。
使用scikit-learn中的Binarizer類實(shí)現(xiàn)。
transformer = Binarizer(threshold=0.0).fit(X)
#數(shù)據(jù)轉(zhuǎn)換
newX_ = transformer.transform(X)
#設(shè)置數(shù)據(jù)打印格式
set_printoptions(precision=3)
print(newX_)
[[1. 1. 1. ... 1. 1. 1.]
[1. 1. 1. ... 1. 1. 1.]
[1. 1. 1. ... 1. 1. 1.]
...
[1. 1. 1. ... 1. 1. 1.]
[1. 1. 1. ... 1. 1. 1.]
[1. 1. 1. ... 1. 1. 1.]]
2.數(shù)據(jù)特征選定
在開始建立模型之前,執(zhí)行特征選定有助于:降低數(shù)據(jù)的擬合度,提高算法精度,減少訓(xùn)練時(shí)間。
2.1單變量特征選定
統(tǒng)計(jì)分析可以用來分析選擇對結(jié)果影響最大的數(shù)據(jù)特征。在scikit-learn中通過SelectKBest類來實(shí)現(xiàn),使用一系列統(tǒng)計(jì)方法來選定數(shù)據(jù)特征,也是對卡方檢驗(yàn)的實(shí)現(xiàn)。
卡方值越大,實(shí)際觀測值與理論推斷值之間越不符合;卡方值越小,實(shí)際觀測值與理論推斷值之間越符合;若兩個(gè)值完全相等,卡方值為0。
from pandas import read_csv
from numpy import set_printoptions
from sklearn.feature_selection import chi2
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
from sklearn.decomposition import PCA
from sklearn.ensemble import ExtraTreesClassifier
filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(filename, names=names)
array = data.values
X = array[:,0:8]
Y = array[:,8]
#通過卡方檢驗(yàn)選定數(shù)據(jù)特征
#特征選定
test = SelectKBest(score_func=chi2,k=4)
fit = test.fit(X,Y)
set_printoptions(precision=3)
print(fit.scores_)
features = fit.transform(X)
print(features)
執(zhí)行后得到了卡方檢驗(yàn)對每一個(gè)數(shù)據(jù)特征的評分,以及得分最高的四個(gè)數(shù)據(jù)特征。[ 111.52 1411.887 17.605 53.108 2175.565 127.669 5.393 181.304]
[[148. 0. 33.6 50. ]
[ 85. 0. 26.6 31. ]
[183. 0. 23.3 32. ]
...
[121. 112. 26.2 30. ]
[126. 0. 30.1 47. ]
[ 93. 0. 30.4 23. ]]
2.2遞歸特征消除
遞歸特征消除(RFE)使用一個(gè)及模型來進(jìn)行多輪訓(xùn)練,每輪訓(xùn)練后消除若干權(quán)值系數(shù)的特征,再基于新的特征集進(jìn)行下一輪訓(xùn)練。通過每一個(gè)基模型的精度,找到對最終預(yù)測結(jié)果影響最大的數(shù)據(jù)特征。
#遞歸特征消除
#特征選定
model = LogisticRegression(max_iter=3000)#需要手動設(shè)置最大迭代次數(shù)
rfe = RFE(model,3)
fit = rfe.fit(X,Y)
print("特征個(gè)數(shù):")
print(fit.n_features_)
print("被選定的特征:")
print(fit.support_)
print("特征排名:")
print(fit.ranking_)
特征個(gè)數(shù):
3
被選定的特征:
[ True False False False False True True False]
特征排名:
[1 2 4 6 5 1 1 3]
2.3數(shù)據(jù)降維
常見降維方法有PCA(主要成分分析)和LDA(線性判別分析)。在聚類算法中,通常會用PCA對數(shù)據(jù)進(jìn)行降維處理,以利于對數(shù)據(jù)的簡化分析和可視化。
#主要成分分析(數(shù)據(jù)降維)
#通過主要成分分析選定數(shù)據(jù)特征
pca = PCA(n_components=3)
fit = pca.fit(X)
print("解釋方差:%s"% fit.explained_variance_ratio_)
print(fit.components_)
解釋方差:[0.889 0.062 0.026]
[[-2.022e-03 9.781e-02 1.609e-02 6.076e-02 9.931e-01 1.401e-02
5.372e-04 -3.565e-03]
[-2.265e-02 -9.722e-01 -1.419e-01 5.786e-02 9.463e-02 -4.697e-02
-8.168e-04 -1.402e-01]
[-2.246e-02 1.434e-01 -9.225e-01 -3.070e-01 2.098e-02 -1.324e-01
-6.400e-04 -1.255e-01]]
2.4特征重要性
使用袋裝決策樹算法、隨機(jī)森林算法和極端隨機(jī)樹算法可以計(jì)算數(shù)據(jù)特征的重要性。
#特征重要性
#特征選定
model = ExtraTreesClassifier()
fit = model.fit(X,Y)
print(fit.feature_importances_)
[0.109 0.234 0.101 0.077 0.076 0.14 0.121 0.142]
總結(jié)
本文主要講了機(jī)器學(xué)習(xí)中的數(shù)據(jù)準(zhǔn)備工作,包括數(shù)據(jù)預(yù)處理和數(shù)據(jù)特征選定,這些都是為了后序優(yōu)化算法所做的準(zhǔn)備工作。
到此這篇關(guān)于Python機(jī)器學(xué)習(xí)(三)數(shù)據(jù)準(zhǔn)備的文章就介紹到這了,更多相關(guān)Python機(jī)器學(xué)習(xí)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
您可能感興趣的文章:- python實(shí)現(xiàn)H2O中的隨機(jī)森林算法介紹及其項(xiàng)目實(shí)戰(zhàn)
- pyspark 隨機(jī)森林的實(shí)現(xiàn)
- python機(jī)器學(xué)習(xí)之隨機(jī)森林(七)
- Python機(jī)器學(xué)習(xí)利用隨機(jī)森林對特征重要性計(jì)算評估