佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Python機器學習入門(三)之Python數據準備

Python機器學習入門(三)之Python數據準備

熱門標簽:呼叫中心市場需求 美圖手機 檢查注冊表項 鐵路電話系統(tǒng) 智能手機 服務器配置 銀行業(yè)務 網站文章發(fā)布

特征選擇時困難耗時的,也需要對需求的理解和專業(yè)知識的掌握。在機器學習的應用開發(fā)中,最基礎的是特征工程。

——吳恩達

1.數據預處理

數據預處理需要根據數據本身的特性進行,有缺失的要填補,有無效的要剔除,有冗余維的要刪除,這些步驟都和數據本身的特性緊密相關。

1.1調整數據尺度

如果數據的各個屬性按照不同的方式度量數據,那么通過調整數據的尺度讓所有屬性按照相同的尺度來度量,就會給機器學習的算法模型訓練帶來極大的方便。

在scikit-learn中,可以通過Min Max Scalar類來調整數據尺度。將不同計量單位的數據統(tǒng)一成相同的尺度,利于對事物的分類或分組。Min Max Scalar其實是將屬性縮放到一個指定范圍,或者對數據進行標準化并將數據都聚集到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)
 
#將數據分為輸入數據和輸出結果
array = data.values
X = array[:,0:8]
#X相當于所有數據
Y = array[:,8]
#Y為最后的class,即結果
transformer = MinMaxScaler(feature_range=(0,1)).fit(X)
#數據轉化
newX = transformer.fit_transform(X)
#設定數據的打印格式
set_printoptions(precision=3)
#設置精度
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)化數據

正態(tài)化數據是有效的處理符合高斯分布數據的手段,輸出結果以0為中位數,方差為1。使用scikit-learn提供的Standard Scalar類來進行正態(tài)化處理。

transformer = StandardScaler().fit(X)
#數據轉換
_newX = transformer.transform(X)
#設定數據打印格式
set_printoptions(precision=3)
#設置精度
#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標準化數據

標準化數據是將每一行數據距離處理成1(在線性代數中矢量距離為1),又叫“歸一元”處理,適合處理稀疏數據(具有很多為0的數據),歸一元處理的數據對使用權重輸入的神經網絡和使用距離的K近鄰算法的準確度的提升有顯著作用。

使用scikit-learn中的Normalizer類實現。

transformer = Normalizer().fit(X)
#數據轉換
__newX = transformer.transform(X)
#設置數據打印格式
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二值數據

二值數據是使用值將數據轉化為二值,大于閾值設置為1,小于閾值設置為0。

使用scikit-learn中的Binarizer類實現。

transformer = Binarizer(threshold=0.0).fit(X)
#數據轉換
newX_ = transformer.transform(X)
#設置數據打印格式
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.數據特征選定

在開始建立模型之前,執(zhí)行特征選定有助于:降低數據的擬合度,提高算法精度,減少訓練時間。

2.1單變量特征選定

統(tǒng)計分析可以用來分析選擇對結果影響最大的數據特征。在scikit-learn中通過SelectKBest類來實現,使用一系列統(tǒng)計方法來選定數據特征,也是對卡方檢驗的實現。

卡方值越大,實際觀測值與理論推斷值之間越不符合;卡方值越小,實際觀測值與理論推斷值之間越符合;若兩個值完全相等,卡方值為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]
 
#通過卡方檢驗選定數據特征
#特征選定
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í)行后得到了卡方檢驗對每一個數據特征的評分,以及得分最高的四個數據特征。[ 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)使用一個及模型來進行多輪訓練,每輪訓練后消除若干權值系數的特征,再基于新的特征集進行下一輪訓練。通過每一個基模型的精度,找到對最終預測結果影響最大的數據特征。

#遞歸特征消除
#特征選定
model = LogisticRegression(max_iter=3000)#需要手動設置最大迭代次數
rfe = RFE(model,3)
fit = rfe.fit(X,Y)
print("特征個數:")
print(fit.n_features_)
print("被選定的特征:")
print(fit.support_)
print("特征排名:")
print(fit.ranking_)

特征個數:
3
被選定的特征:
[ True False False False False True True False]
特征排名:
[1 2 4 6 5 1 1 3]

2.3數據降維

常見降維方法有PCA(主要成分分析)和LDA(線性判別分析。在聚類算法中,通常會用PCA對數據進行降維處理,以利于對數據的簡化分析和可視化。

#主要成分分析(數據降維)
#通過主要成分分析選定數據特征
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特征重要性

使用袋裝決策樹算法、隨機森林算法和極端隨機樹算法可以計算數據特征的重要性。

#特征重要性
#特征選定
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]

總結

本文主要講了機器學習中的數據準備工作,包括數據預處理和數據特征選定,這些都是為了后序優(yōu)化算法所做的準備工作。

到此這篇關于Python機器學習(三)數據準備的文章就介紹到這了,更多相關Python機器學習內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python實現H2O中的隨機森林算法介紹及其項目實戰(zhàn)
  • pyspark 隨機森林的實現
  • python機器學習之隨機森林(七)
  • Python機器學習利用隨機森林對特征重要性計算評估

標簽:紅河 沈陽 河南 長治 上海 新疆 滄州 樂山

巨人網絡通訊聲明:本文標題《Python機器學習入門(三)之Python數據準備》,本文關鍵詞  ;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統(tǒng)采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    齐齐哈尔市| 永丰县| 道孚县| 宿州市| 赤水市| 新源县| 荃湾区| 边坝县| 获嘉县| 永川市| 新安县| 兰溪市| 收藏| 和平县| 甘肃省| 泗洪县| 江油市| 禄丰县| 乌兰察布市| 江西省| 蓝山县| 顺义区| 姚安县| 富顺县| 宜州市| 寻甸| 区。| 喜德县| 炉霍县| 云安县| 汨罗市| 铁岭市| 朔州市| 白沙| 崇阳县| 星子县| 满城县| 什邡市| 军事| 得荣县| 平山县|