python大戰機器學習——數據預處理


  數據預處理的常用流程:

    1)去除唯一屬性

    2)處理缺失值

    3)屬性編碼

    4)數據標准化、正則化

    5)特征選擇

    6)主成分分析

1、去除唯一屬性

  如id屬性,是唯一屬性,直接去除就好

2、處理缺失值

(1)直接使用含有缺失值的特征

  如決策樹算法就可以直接使用含有缺失值的特征

(2)刪除含有缺失值的特征

(3)缺失值補全

1)均值插補

  若樣本屬性的距離是可度量的,則該屬性的缺失值就以該屬性有效值的平均值來插補缺失的值。如果樣本的屬性的距離是不可度量的,則該屬性的缺失值就以該屬性有效值的眾數來插補缺失的值。

2)用同類均值插補

  首先將樣本進行分類,然后以該類樣本中的均值來插補缺失值。

3)建模預測

  將缺失的屬性作為預測目標來預測。這種方法效果較好,但是該方法有個根本的缺陷:如果其他屬性和缺失屬性無關,則預測的結果毫無意義。但是如果預測結果相當准確,則說明這個缺失屬性是沒必要考慮納入數據集中的。一般的情況介於兩者之間。

4)高維映射

  將屬性高映射到高維空間。這種做法是最精確的做法,它完全保留了所有的信息,也未增加任何額外的信息。這樣做的好處是完整保留了原始數據的全部信息、不用考慮缺失值。但它的缺點也很明顯,就是計算量大大提升。而且只有在樣本量非常大的時候效果才好,否則會因為過於稀疏,效果很差。

5)多重插補

  多重插補認為待插補的值是隨機的,它的值來自於已觀測到的值。具體實踐上通常是估計出待插補的值,然后再加上不同的噪聲,形成多組可選插補值。根據某種選擇依據,選取最合適的插補值。

6)極大似然估計

7)壓縮感知及矩陣補全

  壓縮感知通過利用信號本身所具有的稀疏性,從部分觀測樣本中回復原信號。壓縮感知分為感知測量和重構恢復兩個階段。

    感知測量:此階段對原始信號進行處理以獲得稀疏樣本表示。常用的手段是傅里葉變換、小波變換、字典學習、稀疏編碼等

    重構恢復:此階段基於稀疏性從少量觀測中恢復原信號。這是壓縮感知的核心

  矩陣補全

3、特征編碼

(1)特征二元化:將數值型的屬性轉換成布爾型的屬性

(2)獨熱編碼:構建一個映射,將這些非數值屬性映射到整數。其采用N位狀態寄存器來對N個可能的取值進行編碼,每個狀態都由獨立的寄存器位表示,並且在任意時刻只有其中的一位有效。

4、數據標准化、正則化

(1)數據標准化:將樣本的屬性縮放到某個指定范圍

  進行數據標准化的原因:一是因為某些算法要求樣本數據具有零均值和單位方差。二是樣本不同屬性具有不同量級時,消除數量級的影響。

  min-max標准化:標准化之后,樣本x的所有屬性值都在[0,1]之間

  z-score標准化:標准化之后,樣本集的所有屬性的均值都是0,標准差均為1

(2)數據正則化:將樣本的某個范數(如L1范數)縮放到單位1。正則化的過程是針對單個樣本的,對於每個樣本將樣本縮放到單位范數。通常如果使用二次型(如點積)或者其他核方法計算兩個樣本之間的相似性,該方法會很有用。

5、特征選擇

(1)過濾式選擇:先對數據集進行特征選擇,然后再訓練學習器。特征選擇過程與后續學習器無關。常用方法有Relief(二分類)、Relief-F(多分類)

(2)包裹式選擇:直接把最終將要使用的學習器的性能作為特征子集的評價准則。常用方法LVW

(3)嵌入式選擇和L1正則化

  嵌入式特征選擇是在學習器訓練過程中自動進行了特征選擇

6、稀疏表示和字典學習

代碼實現:

  1 from sklearn.preprocessing import Binarizer,OneHotEncoder,MinMaxScaler,MaxAbsScaler,StandardScaler,Normalizer
  2 from sklearn.feature_selection import VarianceThreshold,SelectKBest,f_classif,RFE,RFECV,SelectFromModel
  3 from sklearn.svm import LinearSVC
  4 from sklearn.datasets import load_iris
  5 import numpy as np
  6 from sklearn.decomposition import DictionaryLearning
  7 
  8 #Binary
  9 X=[   [1,2,3,4,5],
 10       [5,4,3,2,1],
 11       [3,3,3,3,3],
 12       [1,1,1,1,1]]
 13 
 14 print("before transform:",X)
 15 binarizer=Binarizer(threshold=2.5)
 16 print("after transform:",binarizer.transform(X))
 17 
 18 #OneHotEncoder
 19 X=[   [1,2,3,4,5],
 20       [5,4,3,2,1],
 21       [3,3,3,3,3],
 22       [1,1,1,1,1]]
 23 print("before transform:",X)
 24 encoder=OneHotEncoder(sparse=False)
 25 encoder.fit(X)
 26 print("active_feature_:",encoder.active_features_)
 27 print("feature_indices_:",encoder.feature_indices_)
 28 print("n_values:",encoder.n_values_)
 29 print("after transform:",encoder.transform([[1,2,3,4,5]]))
 30 
 31 #standardization
 32 
 33 #MinMaxScaler
 34 X=[ [1,5,1,2,10],
 35     [2,6,3,2,7],
 36     [3,7,5,6,4],
 37     [4,8,7,8,1]
 38 ]
 39 
 40 print("before transform:",X)
 41 scaler=MinMaxScaler(feature_range=(0,2))
 42 scaler.fit(X)
 43 print("min_is:",scaler.min_)
 44 print("scale_is:",scaler.scale_)
 45 print("data_max_ is:",scaler.data_max_)
 46 print("data_min_ is:",scaler.data_min_)
 47 print("data_range_ is:",scaler.data_range_)
 48 print("after transform:",scaler.transform(X))
 49 
 50 #MaxAbsScaler
 51 X=[
 52       [1,5,1,2,10],
 53       [2,6,3,2,7],
 54       [3,7,5,6,4],
 55       [4,8,7,8,1]
 56 ]
 57 
 58 print("before transform:",X)
 59 scaler=MaxAbsScaler()
 60 scaler.fit(X)
 61 print("scale_is:",scaler.scale_)
 62 print("max_abs_ is:",scaler.max_abs_)
 63 print("after transform:",scaler.transform(X))
 64 
 65 #StandardScaler:z-score
 66 X=[
 67       [1,5,1,2,10],
 68       [2,6,3,2,7],
 69       [3,7,5,6,4],
 70       [4,8,7,8,1]
 71 ]
 72 print("before transfrom:",X)
 73 scaler=StandardScaler()
 74 scaler.fit(X)
 75 print("scale_ is:",scaler.scale_)
 76 print("mean_ is:",scaler.mean_)
 77 print("var_ is:",scaler.var_)
 78 print("after transfrom:",scaler.transform(X))
 79 
 80 #Normalizer
 81 X=[
 82       [1,2,3,4,5],
 83       [5,4,3,2,1],
 84       [1,3,5,2,4],
 85       [2,4,1,3,5]
 86 ]
 87 print("before transform:",X)
 88 normalizer=Normalizer(norm='l2')
 89 print("after transform:",normalizer.transform(X))
 90 
 91 #VarianceThreshold
 92 X=[
 93       [100,1,2,3],
 94       [100,4,5,6],
 95       [100,7,8,9],
 96       [101,11,12,13]
 97 ]
 98 selector=VarianceThreshold(1)
 99 selector.fit(X)
100 print("Variances is %s"%selector.variances_)
101 print("After transform is %s"%selector.transform(X))
102 print("The surport is %s"%selector.get_support(True))
103 print("After reverse transform is %s"%selector.inverse_transform(selector.transform(X)))
104 
105 #SelectKBest
106 X=[   [1,2,3,4,5],
107       [5,4,3,2,1],
108       [3,3,3,3,3],
109       [1,1,1,1,1]]
110 Y=[0,1,0,1]
111 print("before transform:",X)
112 selector=SelectKBest(score_func=f_classif,k=3)
113 selector.fit(X,Y)
114 print("scores_:",selector.scores_)
115 print("pvalues_:",selector.pvalues_)
116 print("selected index:",selector.get_support(True))
117 print("after transform:",selector.transform(X))
118 
119 #RFE
120 iris=load_iris()
121 X=iris.data
122 Y=iris.target
123 estimator=LinearSVC()
124 selector=RFE(estimator=estimator,n_features_to_select=2)
125 print("Before transform,X=",X)
126 selector.fit(X,Y)
127 selector.transform(X)
128 print("After transform,X=",X)
129 print("Ranking %s"%selector.ranking_)
130 
131 #RFECV
132 iris=load_iris()
133 X=iris.data
134 Y=iris.target
135 estimator=LinearSVC()
136 selector=RFECV(estimator=estimator,cv=3)
137 selector.fit(X,Y)
138 print("Grid Scores %s"%selector.grid_scores_)
139 
140 #SelectFromModel
141 iris=load_iris()
142 X=iris.data
143 Y=iris.target
144 estimator=LinearSVC(penalty='l1',dual=False)
145 selector=SelectFromModel(estimator=estimator,threshold='mean')
146 selector.fit(X,Y)
147 selector.transform(X)
148 print("Threshold %s"%selector.threshold_)
149 print("Support is %s"%selector.get_support(indices=True))
150 
151 #DictionaryLearning
152 X=[
153       [1,2,3,4,5],
154       [6,7,8,9,10],
155       [10,9,8,7,6],
156       [5,4,3,2,1]
157 ]
158 print("before transform:",X)
159 dct=DictionaryLearning(n_components=3)
160 dct.fit(X)
161 print("components is :",dct.components_)
162 print("after transform:",dct.transform(X))
View Code

 


免責聲明!

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



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