使用sklearn进行数据预处理 —— 归一化/标准化/正则化
本文主要是對(duì)照scikit-learn的preprocessing章節(jié)結(jié)合代碼簡(jiǎn)單的回顧下預(yù)處理技術(shù)的幾種方法,主要包括標(biāo)準(zhǔn)化、數(shù)據(jù)最大最小縮放處理、正則化、特征二值化和數(shù)據(jù)缺失值處理。內(nèi)容比較簡(jiǎn)單,僅供參考!
首先來回顧一下下面要用到的基本知識(shí)。
均值公式:
\[\bar{x}=\frac{1}{n}\sum_{i=1}^{n}x_{i}\]
方差公式:
\[s^{2}=\frac{1}{n}\sum_{i=1}^{n}(x_{i}-\bar{x})^{2}\]
0-范數(shù),向量中非零元素的個(gè)數(shù)。
1-范數(shù):
\[||X||=\sum_{i=1}^{n}|x_{i}|\]
2-范數(shù):
\[||X||_{2}=(\sum_{i=1}^{n}x_{i}^{2})^{\frac{1}{2}}\]
p-范數(shù)的計(jì)算公式:
\[||X||_{p}=(\sum_{i=1}^{n}x_{i}^{p})^{\frac{1}{p}}\]
數(shù)據(jù)標(biāo)準(zhǔn)化:當(dāng)單個(gè)特征的樣本取值相差甚大或明顯不遵從高斯正態(tài)分布時(shí),標(biāo)準(zhǔn)化表現(xiàn)的效果較差。實(shí)際操作中,經(jīng)常忽略特征數(shù)據(jù)的分布形狀,移除每個(gè)特征均值,劃分離散特征的標(biāo)準(zhǔn)差,從而等級(jí)化,進(jìn)而實(shí)現(xiàn)數(shù)據(jù)中心化。
二、標(biāo)準(zhǔn)化(Standardization),或者去除均值和方差進(jìn)行縮放
公式為:(X-X_mean)/X_std 計(jì)算時(shí)對(duì)每個(gè)屬性/每列分別進(jìn)行.
將數(shù)據(jù)按其屬性(按列進(jìn)行)減去其均值,然后除以其方差。最后得到的結(jié)果是,對(duì)每個(gè)屬性/每列來說所有數(shù)據(jù)都聚集在0附近,方差值為1。
首先說明下sklearn中preprocessing庫里面的scale函數(shù)使用方法:
[python] view plain copy參數(shù)解釋:
- X:數(shù)組或者矩陣
- axis:int類型,初始值為0,axis用來計(jì)算均值 means 和標(biāo)準(zhǔn)方差 standard deviations. 如果是0,則單獨(dú)的標(biāo)準(zhǔn)化每個(gè)特征(列),如果是1,則標(biāo)準(zhǔn)化每個(gè)觀測(cè)樣本(行)。
- with_mean: boolean類型,默認(rèn)為True,表示將數(shù)據(jù)均值規(guī)范到0
- with_std: boolean類型,默認(rèn)為True,表示將數(shù)據(jù)方差規(guī)范到1
一個(gè)簡(jiǎn)單的例子
假設(shè)現(xiàn)在我構(gòu)造一個(gè)數(shù)據(jù)集X,然后想要將其標(biāo)準(zhǔn)化。下面使用不同的方法來標(biāo)準(zhǔn)化X:
方法一:使用sklearn.preprocessing.scale()函數(shù)
方法說明:
- X.mean(axis=0)用來計(jì)算數(shù)據(jù)X每個(gè)特征的均值;
- X.std(axis=0)用來計(jì)算數(shù)據(jù)X每個(gè)特征的方差;
- preprocessing.scale(X)直接標(biāo)準(zhǔn)化數(shù)據(jù)X。
將代碼整理到一個(gè)文件中:
[python] view plain copy最后X_scale的值和X1的值是一樣的,前面是單獨(dú)的使用數(shù)學(xué)公式來計(jì)算,主要是為了形成一個(gè)對(duì)比,能夠更好的理解scale()方法。
方法2:sklearn.preprocessing.StandardScaler類
該方法也可以對(duì)數(shù)據(jù)X進(jìn)行標(biāo)準(zhǔn)化處理,實(shí)例如下:
[python] view plain copy這兩個(gè)方法得到最后的結(jié)果都是一樣的。
三、將特征的取值縮小到一個(gè)范圍(如0到1)
除了上述介紹的方法之外,另一種常用的方法是將屬性縮放到一個(gè)指定的最大值和最小值(通常是1-0)之間,這可以通過preprocessing.MinMaxScaler類來實(shí)現(xiàn)。
使用這種方法的目的包括:
- 1、對(duì)于方差非常小的屬性可以增強(qiáng)其穩(wěn)定性;
- 2、維持稀疏矩陣中為0的條目。
下面將數(shù)據(jù)縮至0-1之間,采用MinMaxScaler函數(shù)
[python] view plain copy最后輸出:
[python] view plain copy
[python] view plain copy
注意:這些變換都是對(duì)列進(jìn)行處理。
當(dāng)然,在構(gòu)造類對(duì)象的時(shí)候也可以直接指定最大最小值的范圍:feature_range=(min, max),此時(shí)應(yīng)用的公式變?yōu)?#xff1a;
[python] view plain copy四、正則化(Normalization)
正則化的過程是將每個(gè)樣本縮放到單位范數(shù)(每個(gè)樣本的范數(shù)為1),如果要使用如二次型(點(diǎn)積)或者其它核方法計(jì)算兩個(gè)樣本之間的相似性這個(gè)方法會(huì)很有用。
該方法是文本分類和聚類分析中經(jīng)常使用的向量空間模型(Vector Space Model)的基礎(chǔ).
Normalization主要思想是對(duì)每個(gè)樣本計(jì)算其p-范數(shù),然后對(duì)該樣本中每個(gè)元素除以該范數(shù),這樣處理的結(jié)果是使得每個(gè)處理后樣本的p-范數(shù)(l1-norm,l2-norm)等于1。
方法1:使用sklearn.preprocessing.normalize()函數(shù)
[python] view plain copy方法2:sklearn.preprocessing.StandardScaler類
[python] view plain copy
[python] view plain copy
五、二值化(Binarization)
特征的二值化主要是為了將數(shù)據(jù)特征轉(zhuǎn)變成boolean變量。在sklearn中,sklearn.preprocessing.Binarizer函數(shù)可以實(shí)現(xiàn)這一功能。實(shí)例如下:
[python] view plain copyBinarizer函數(shù)也可以設(shè)定一個(gè)閾值,結(jié)果數(shù)據(jù)值大于閾值的為1,小于閾值的為0,實(shí)例代碼如下:
[python] view plain copy
六、缺失值處理
由于不同的原因,許多現(xiàn)實(shí)中的數(shù)據(jù)集都包含有缺失值,要么是空白的,要么使用NaNs或者其它的符號(hào)替代。這些數(shù)據(jù)無法直接使用scikit-learn分類器直接訓(xùn)練,所以需要進(jìn)行處理。幸運(yùn)地是,sklearn中的Imputer類提供了一些基本的方法來處理缺失值,如使用均值、中位值或者缺失值所在列中頻繁出現(xiàn)的值來替換。
下面是使用均值來處理的實(shí)例:
[python] view plain copyImputer類同樣支持稀疏矩陣:
[python] view plain copy
本文講解的比較接單,如果對(duì)這些不是很理解的話,請(qǐng)到scikit-learn的官網(wǎng)中查看英文版本:preprocessing.
本人轉(zhuǎn)自:http://blog.csdn.net/dream_angel_z/article/details/49406573
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的使用sklearn进行数据预处理 —— 归一化/标准化/正则化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pandas使用笔记大全
- 下一篇: np.random.randint产生一