05_数据的特征处理,归一化,标准化、缺失值处理,以及案例,使用场景,处理办法等
1.數據的特征處理
1.1.特征處理是什么
通過特定的統計方法(數學方法)將數據轉換成算法要求的數據
1.1.1.特征處理的方法
1.1.1.1特征處理方法
特征處理主要有以下幾種方法:
數值型數據:標準縮放
1、歸一化
2、標準化
3、缺失值
類別型數據:one-hot編碼
時間類型:時間的切分
1.1.1.2 數值型數據—歸一化
1.1.1.2.1 歸一化特點、公式等
數據歸一化問題是數據挖掘中特征向量表達時的重要問題,當不同的特征成列在一起的時候,由于特征本身表達方式的原因而導致在絕對數值上的小數據被大數據“吃掉”的情況,這個時候我們需要做的就是對抽取出來的features vector進行歸一化處理,以保證每個特征被分類器平等對待。
特點: 通過對原始數據進行變換把數據映射到某個區間之間(默認為[0,1])
注: 作用于每一列,max為一列的最大值,min為一列的最小值,那么X’’為最終結果,mx,mi分別為指定區間值默認mx為1,mi為0
例如:
1.1.1.2.2 歸一化的目標
1、把數變為(0,1)之間的小數
主要是為了數據處理方便提出來的,把數據映射到0~1范圍之內處理,更加便捷快速,應該歸到數字信號處理范疇之內。
2、把有量綱表達式變為無量綱表達式
歸一化是一種簡化計算的方式,即將有量綱的表達式,經過變換,化為無量綱的表達式,成為純量。 比如,復數阻抗可以歸一化書寫:Z = R + jωL = R(1 + jωL/R) ,復數部分變成了純數量了,沒有量綱。
另外,微波之中也就是電路分析、信號系統、電磁波傳輸等,有很多運算都可以如此處理,既保證了運算的便捷,又能凸現出物理量的本質含義。
1.1.1.2.3 歸一化后有兩個好處
1、提升模型的手斂速度
如下圖,x1的取值為0-2000,而x2的取值為1-5,假如只有這兩個特征,對其進行優化時,會得到一個窄長的橢圓形,導致在梯度下降時,梯度的方向為垂直等高線的方向而走之字形路線,這樣會使迭代很慢,相比之下,右圖的迭代就會很快(理解:也就是步長走多走少方向總是對的,不會走偏)
2.提升模型的精度
歸一化的另一好處是提高精度,這在涉及到一些距離計算的算法時效果顯著,比如算法要計算歐氏距離,上圖中x2的取值范圍比較小,涉及到距離計算時其對結果的影響遠比x1帶來的小,所以這就會造成精度的損失。所以歸一化很有必要,他可以讓各個特征對結果做出的貢獻相同。
在多指標評價體系中,由于各評價指標的性質不同,通常具有不同的量綱和數量級。當各指標間的水平相差很大時,如果直接用原始指標值進行分析,就會突出數值較高的指標在綜合分析中的作用,相對削弱數值水平較低指標的作用。因此,為了保證結果的可靠性,需要對原始指標數據進行標準化處理。
在數據分析之前,我們通常需要先將數據標準化(normalization),利用標準化后的數據進行數據分析。數據標準化也就是統計數據的指數化。數據標準化處理主要包括數據同趨化處理和無量綱化處理兩個方面。數據同趨化處理主要解決不同性質數據問題,對不同性質指標直接加總不能正確反映不同作用力的綜合結果,須先考慮改變逆指標數據性質,使所有指標對測評方案的作用力同趨化,再加總才能得出正確結果。數據無量綱化處理主要解決數據的可比性。經過上述標準化處理,原始數據均轉換為無量綱化指標測評值,即各指標值都處于同一個數量級別上,可以進行綜合測評分析。
從經驗上說,歸一化是讓不同維度之間的特征在數值上有一定比較性,可以大大提高分類器的準確性。
3.深度學習中數據歸一化可以防止模型梯度爆炸
1.1.1.2.4 數據需要歸一化的機器學習算法
需要歸一化的模型:
有些模型在各個維度進行不均勻伸縮后,最優解與原來不等價,例如SVM(距離分界面遠的也拉近了,支持向量變多?)。對于這樣的模型,除非本來各維數據的分布范圍就比較接近,否則必須進行標準化,以免模型參數被分布范圍較大或較小的數據dominate。
有些模型在各個維度進行不均勻伸縮后,最優解與原來等價,例如logistic regression(因為θ的大小本來就自學習出不同的feature的重要性吧?)。對于這樣的模型,是否標準化理論上不會改變最優解。但是,由于實際求解往往使用迭代算法,如果目標函數的形狀太“扁”,迭代算法可能收斂得很慢甚至不收斂(模型結果不精確)。所以對于具有伸縮不變性的模型,最好也進行數據標準化。
有些模型/優化方法的效果會強烈地依賴于特征是否歸一化,如LogisticReg,SVM,NeuralNetwork,SGD,PCA降維[PCA將原來高維的數據投影到某個低維的空間上并使得其方差盡量大。如果數據其中某一特征數值特別大,那么它在整個誤差計算的比重上就很大,那么可以想象在投影到低維空間之后,為了使低秩分解逼近原數據,整個投影會去努力逼近最大的那一個特征,而忽略數值比較小的特征,這很可能導致了大量的信息缺失。此外,從計算的角度講,因為PCA通常是數值近似分解,而非求特征值、奇異值得到解析解,所以當我們使用梯度下降等算法進行PCA的時候,歸一化有利于梯度下降收斂]等。
不需要歸一化的模型:
(0/1取值的特征通常不需要歸一化,歸一化會破壞它的稀疏性。)
有些模型則不受歸一化影響,如DecisionTree。
ICA好像不需要歸一化(因為獨立成分如果歸一化了就不獨立了?)。
基于平方損失的最小二乘法OLS不需要歸一化。
1.1.1.2.2 sklearn歸一化API
sklearn歸一化API:sklearn.preprocessing.MinMaxScaler
MinMaxScalar(feature_range=(0,1)...)- 每個特征縮放到給定范圍(默認[0,1])MinMaxScalar.fit_transform(X)X:numpy array格式的數據[n_samples,n_features]返回值:轉換后的形狀相同的array1.1.1.2.3 歸一化步驟:
1、實例化MinMaxScalar
2、通過fit_transform轉換
比如,將:
[[90,2,10,40], [60,4,15,45], [75,3,13,46]]所有列的中的值都轉換到(2,3)之間1.1.1.2.4 實現案例
from sklearn.preprocessing import MinMaxScalerdef mm():"""歸一化處理,將最終每列的值都限定在(2,3)之間:return:"""mm = MinMaxScaler(feature_range=(2,3))data = mm.fit_transform([[90,2,10,40],[60,4,15,45],[75,3,13,46]])print(data)return Noneif __name__ == "__main__":mm()輸出結果為:
[[3. 2. 2. 2. ][2. 3. 3. 2.83333333][2.5 2.5 2.6 3. ]]1.1.1.2.5 歸一化案例:約會對象數據
相親約會對象數據,這個樣本時男士的數據,三個特征,玩游戲所消耗時間的百分比、每年獲得的飛行常客里程數、每周消費的冰淇淋公升數。然后有一個 所屬類別,被女士評價的三個類別,不喜歡didnt、魅力一般small、極具魅力large也許也就是說飛行里程數對于結算結果或者說相親結果影響較大,**但是統計的人覺得這三個特征同等重要。
1.1.1.2.6 歸一化總結
注意在特定場景下最大值最小值是變化的,另外,最大值與最小值非常容易受異常點影響,所以這種方法魯棒性較差,只適合傳統精確小數據場景。
1.1.1.3 數值型數據—標準化
1.1.1.3.1 特點和公式
這種方法給予原始數據的均值(mean)和標準差(standard deviation)進行數據的標準化。經過處理的數據符合標準正態分布,即均值為0,標準差為1
1、特點:通過對原始數據進行變換把數據變換到均值為0,方差為1范圍內
2、公式:
1.1.1.3.2 結合歸一化來談標準化
對于歸一化來說: 如果出現異常點,影響了最大值和最小值,那么結果顯然會發生改變。
對于標準化來說: 如果出現異常點,由于有一定數據量,少量的異常點對于平均值的影響并不大,從而方差改變較小。
1.1.1.3.3 sklearn特征化API
sklearn特征化API: scikit-learn.preprocessing.StandardScaler
StandardScaler(…)
處理之后每列來說所有數據都聚集在均值0附近方差為1
1.1.1.3.4 標準化步驟
1、實例化StandardScaler
2、通過fit_transform轉換
例如,要轉化以下的矩陣:
案例:
from sklearn.preprocessing import StandardScalerdef stand():"""標準化縮放:return:"""std = StandardScaler()data = std.fit_transform([[ 1., -1., 3.],[ 2., 4., 2.],[ 4., 6., -1.]])print(data)return Noneif __name__ == "__main__":stand()輸出結果為:
[[-1.06904497 -1.35873244 0.98058068][-0.26726124 0.33968311 0.39223227][ 1.33630621 1.01904933 -1.37281295]]1.1.1.4 缺失值
1.1.1.4.1 機器學習缺失值處理方法匯總
原文鏈接:https://blog.csdn.net/w352986331qq/article/details/78639233
缺失值是指粗糙數據中由于缺少信息而造成的數據的聚類、分組、刪失或截斷。它指的是現有數據集中某個或某些屬性的值是不完全的。缺失值的產生的原因多種多樣,主要分為機械原因和人為原因。
機械原因是由于機械原因導致的數據收集或保存的失敗造成的數據缺失,比如數據存儲的失敗,存儲器損壞,機械故障導致某段時間數據未能收集(對于定時數據采集而言)。
人為原因是由于人的主觀失誤、歷史局限或有意隱瞞造成的數據缺失,比如,在市場調查中被訪人拒絕透露相關問題的答案,或者回答的問題是無效的,數據錄入人員失誤漏錄了數據。
以下來討論缺失值的一般處理方法:
1、刪除
主要有簡單刪除法和權重法。簡單刪除法是對缺失值進行處理的最原始方法。
(1)簡單刪除法
此方法將存在缺失值的數據條目(對象,元組,記錄)進行刪除。這種方法簡單易行,在對象有多個屬性缺失值、被刪除的含缺失值的對象與信息表中的數據量相比非常小的情況下是非常有效的。然而,這種方法卻有很大的局限性。它是以減少歷史數據來換取信息的完備,會造成資源的大量浪費,丟棄了大量隱藏在這些對象中的信息。在信息表中本來包含的對象很少的情況下,刪除少量對象就足以嚴重影響到信息表信息的客觀性和結果的正確性;當每個屬性空值的百分比變化很大時,它的性能非常差。
(2)權重法
當缺失值的類型為非完全隨機缺失的時候,可以通過對完整的數據加權來減小偏差。把數據不完全的個案標記后,將完整的數據個案賦予不同的權重,個案的權重可以通過logistic或probit回歸求得。如果解釋變量中存在對權重估計起決定行因素的變量,那么這種方法可以有效減小偏差。如果解釋變量和權重并不相關,它并不能減小偏差。對于存在多個屬性缺失的情況,就需要對不同屬性的缺失組合賦不同的權重,這將大大增加計算的難度,降低預測的準確性,這時權重法并不理想。
2、填補
這類方法是用一定的值去填充空值,從而使信息表完備化。通常基于統計學原理,根據決策表中其余對象取值的分布情況來對一個空值進行填充,譬如用其余屬性的平均值來進行補充等。數據挖掘中常用的有以下幾種補齊方法:
(1)人工填寫(filling manually)
由于最了解數據的還是用戶自己,因此這個方法產生數據偏離最小,可能是填充效果最好的一種。然而一般來說,該方法很費時,當數據規模很大、空值很多的時候,該方法是不可行的。
(2) 特殊值填充(Treating Missing Attribute values as Special values)
將空值作為一種特殊的屬性值來處理,它不同于其他的任何屬性值。如所有的空值都用“unknown”填充。這樣將形成另一個有趣的概念,可能導致嚴重的數據偏離,一般不推薦使用。
(3)均值填充(Mean/Mode Completer)
將信息表中的屬性分為數值屬性和非數值屬性來分別進行處理。如果空值是數值型的,就根據該屬性在其他所有對象的取值的平均值來填充該缺失的屬性值;如果空值是非數值型的,就根據統計學中的眾數原理,用該屬性在其他所有對象的取值次數最多的值(即出現頻率最高的值)來補齊該缺失的屬性值。另外有一種與其相似的方法叫條件平均值填充法(Conditional Mean Completer)。在該方法中,缺失屬性值的補齊同樣是靠該屬性在其他對象中的取值求平均得到,但不同的是用于求平均的值并不是從信息表所有對象中取,而是從與該對象具有相同決策屬性值的對象中取得。這兩種數據的補齊方法,其基本的出發點都是一樣的,以最大概率可能的取值來補充缺失的屬性值,只是在具體方法上有一點不同。與其他方法相比,它是用現存數據的多數信息來推測缺失值。
(4) 熱卡填充(Hot deck imputation,或就近補齊)
對于一個包含空值的對象,熱卡填充法在完整數據中找到一個與它最相似的對象,然后用這個相似對象的值來進行填充。不同的問題可能會選用不同的標準來對相似進行判定。該方法概念上很簡單,且利用了數據間的關系來進行空值估計。這個方法的缺點在于難以定義相似標準,主觀因素較多。
(5) 聚類填充(clustering imputation)
最為典型的代表是K最近距離鄰法(K-means clustering),先根據歐式距離或相關分析來確定距離具有缺失數據樣本最近的K個樣本,將這K個值加權平均來估計該樣本的缺失數據。同均值插補的方法都屬于單值插補,不同的是,它用層次聚類模型預測缺失變量的類型,再以該類型的均值插補。假設X=(X1,X2…Xp)為信息完全的變量,Y為存在缺失值的變量,那么首先對X或其子集行聚類,然后按缺失個案所屬類來插補不同類的均值。如果在以后統計分析中還需以引入的解釋變量和Y做分析,那么這種插補方法將在模型中引入自相關,給分析造成障礙。
(6) 使用所有可能的值填充(Assigning All Possible values of the Attribute)
這種方法是用空缺屬性值的所有可能的屬性取值來填充,能夠得到較好的補齊效果。但是,當數據量很大或者遺漏的屬性值較多時,其計算的代價很大,可能的測試方案很多。另有一種方法,填補遺漏屬性值的原則是一樣的,不同的只是從決策相同的對象中嘗試所有的屬性值的可能情況,而不是根據信息表中所有對象進行嘗試,這樣能夠在一定程度上減小原方法的代價。
(7) 組合完整化方法(Combinatorial Completer)
這種方法是用空缺屬性值的所有可能的屬性取值來試,并從最終屬性的約簡結果中選擇最好的一個作為填補的屬性值。這是以約簡為目的的數據補齊方法,能夠得到好的約簡結果;但是,當數據量很大或者遺漏的屬性值較多時,其計算的代價很大。另一種稱為條件組合完整化方法(Conditional Combinatorial Complete),填補遺漏屬性值的原則是一樣的,不同的只是從決策相同的對象中嘗試所有的屬性值的可能情況,而不是根據信息表中所有對象進行嘗試。條件組合完整化方法能夠在一定程度上減小組合完整化方法的代價。在信息表包含不完整數據較多的情況下,可能的測試方案將巨增。
(8) 回歸(Regression)
基于完整的數據集,建立回歸方程(模型)。對于包含空值的對象,將已知屬性值代入方程來估計未知屬性值,以此估計值來進行填充。當變量不是線性相關或預測變量高度相關時會導致有偏差的估計。
(9) 極大似然估計(Max Likelihood ,ML)
在缺失類型為隨機缺失的條件下,假設模型對于完整的樣本是正確的,那么通過觀測數據的邊際分布可以對未知參數進行極大似然估計(Little and Rubin)。這種方法也被稱為忽略缺失值的極大似然估計,對于極大似然的參數估計實際中常采用的計算方法是期望值最大化(Expectation Maximization,EM)。該方法比刪除個案和單值插補更有吸引力,它一個重要前提:適用于大樣本。有效樣本的數量足夠以保證ML估計值是漸近無偏的并服從正態分布。但是這種方法可能會陷入局部極值,收斂速度也不是很快,并且計算很復雜。
(10) 多重插補(Multiple Imputation,MI)
多值插補的思想來源于貝葉斯估計,認為待插補的值是隨機的,它的值來自于已觀測到的值。具體實踐上通常是估計出待插補的值,然后再加上不同的噪聲,形成多組可選插補值。根據某種選擇依據,選取最合適的插補值。多重插補方法分為三個步驟:①為每個空值產生一套可能的插補值,這些值反映了無響應模型的不確定性;每個值都可以被用來插補數據集中的缺失值,產生若干個完整數據集合。②每個插補數據集合都用針對完整數據集的統計方法進行統計分析。③對來自各個插補數據集的結果,根據評分函數進行選擇,產生最終的插補值。
多重插補和貝葉斯估計的思想是一致的,但是多重插補彌補了貝葉斯估計的幾個不足。第一,貝葉斯估計以極大似然的方法估計,極大似然的方法要求模型的形式必須準確,如果參數形式不正確,將得到錯誤得結論,即先驗分布將影響后驗分布的準確性。而多重插補所依據的是大樣本漸近完整的數據的理論,在數據挖掘中的數據量都很大,先驗分布將極小的影響結果,所以先驗分布的對結果的影響不大。第二,貝葉斯估計僅要求知道未知參數的先驗分布,沒有利用與參數的關系。而多重插補對參數的聯合分布作出了估計,利用了參數間的相互關系。
同時,多重插補保持了單一插補的兩個基本優點,即應用完全數據分析方法和融合數據收集者知識的能力。相對于單一插補,多重插補有三個極其重要的優點:第一,為表現數據分布,隨機抽取進行插補,增加了估計的有效性。第二,當多重插補是在某個模型下的隨機抽樣時,按一種直接方式簡單融合完全數據推斷得出有效推斷,即它反映了在該模型下由缺失值導致的附加變異。第三,在多個模型下通過隨機抽取進行插補,簡單地應用完全數據方法,可以對無回答的不同模型下推斷的敏感性進行直接研究。
多重插補也有以下缺點:①生成多重插補比單一插補需要更多工作;②貯存多重插補數據集需要更多存儲空間;③分析多重插補數據集比單一插補需要花費更多精力。
不處理
直接在包含空值的數據上進行數據挖掘。這類方法包括貝葉斯網絡和人工神經網絡等。
貝葉斯網絡是用來表示變量間連接概率的圖形模式,它提供了一種自然的表示因果信息的方法,用來發現數據間的潛在關系。在這個網絡中,用節點表示變量,有向邊表示變量間的依賴關系。貝葉斯網絡僅適合于對領域知識具有一定了解的情況,至少對變量間的依賴關系較清楚的情況。否則直接從數據中學習貝葉斯網的結構不但復雜性較高(隨著變量的增加,指數級增加),網絡維護代價昂貴,而且它的估計參數較多,為系統帶來了高方差,影響了它的預測精度。當在任何一個對象中的缺失值數量很大時,存在指數爆炸的危險。
人工神經網絡可以有效的對付空值,但人工神經網絡在這方面的研究還有待進一步深入展開。人工神經網絡方法在數據挖掘應用中的局限性
總結
部分方法的優缺點及適用環境如下:
以上插補方法,對于缺失值的類型為隨機缺失的插補有很好的效果。兩種均值插補方法是最容易實現的,也是以前人們經常使用的,但是它對樣本存在極大的干擾,尤其是當插補后的值作為解釋變量進行回歸時,參數的估計值與真實值的偏差很大。相比較而言,極大似然估計和多重插補是兩種比較好的插補方法,與多重插補對比,極大似然缺少不確定成分,所以越來越多的人傾向于使用多值插補方法。
1.1.1.4.2 sklearn特征處理API
sklearn缺失值API: sklearn.preprocessing.Imputer
Imputer語法
1.1.1.4.3 Imputer流程
1、初始化Imputer,指定**“缺失值”,指定填補策略**,指定行或列
注:缺失值也可以是別的指定要替換的值
2、調用fit_transform
例如要處理下面的缺失值:
[[1, 2], [np.nan, 3], [7, 6]]案例:
from sklearn.preprocessing import Imputer import numpy as npdef im():"""缺失值處理"""# NaN,Nanim = Imputer(missing_values='NaN',strategy='mean',axis=0)data = im.fit_transform([[1,2],[np.nan,3],[7,6]])print(data)return Noneif __name__ == "__main__":im()輸出結果:
[[1. 2.][4. 3.][7. 6.]]1.1.1.4.4 關于np.nan(np.NaN)
1、numpy的數組中可以使用np.nan/np.NaN來代替缺失值,屬于float類型
2、如果是文件中的一些缺失值,可以替換成nan,通過np.array轉化成float型的數組即可
總結
以上是生活随笔為你收集整理的05_数据的特征处理,归一化,标准化、缺失值处理,以及案例,使用场景,处理办法等的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 04_机器学习概述,什么是机器学习,应用
- 下一篇: 今天有回滕州市的私家客车吗?