天天看點

資料預處理-标準化

标準化

通常确定目标變量的特征會有多個,原始資料中不同特征的數值大小往往差異很大,數值大的特征對目标變量的影響程度将會比數值小的特征對目标變量的影響大,數值小的特征容易被忽略。而通過标準化處理,可以使得不同的特征變量具有相同的尺度(不同特征的值都在某個範圍内),消除了特征之間數值量綱的差異性。

資料分析及模組化過程中,許多機器學習算法也需要其輸入特征為标準化形式。

例如,SVM算法中的RBF核函數,線性模型中的𝑙1、𝑙2正則項,目标函數往往假設其特征均值在0附近且方差齊次;若樣本的特征之間的量綱差異太大,樣本之間相似度評估結果将存在偏差。

常見資料标準化方法:

Z-Score标準化

Min-Max标準化

RobustScaler标準化

1、Z-Score标準化

對特征取值中的每一個資料點作減去均值并除以标準差的操作,使得處理後的資料具有固定均值和标準差,處理函數為:

𝑓_𝑖′=(𝑓_𝑖−𝜇)/𝜎

其中,𝑓_𝑖′為标準化後各資料點的取值, 𝑓_𝑖為原始各資料點取值,𝜇為該特征取值的平均值,𝜎為該特征取值的标準差。

适用于特征的最大值或最小值未知、樣本分布非常離散的情況。

實作:

sklearn.preprocessing.StandardScaler

preprocessing.StandardScaler(

copy=True, #如果為False,嘗試避免複制并改為直接替換

with_mean=False, #如果為True,則在縮放之前将資料居中

with_std=False #如果為True,則将資料縮放為機關方差(或機關标準差)

)

2、Min-Max标準化

Min-Max标準化(離差标準化或最大-最小值标準化)通過對特征作線性變換,使得轉換後特征的取值分布在 [0,1] 區間内。

𝑓_𝑖*=(𝑓_𝑖−𝑓_𝑚𝑖𝑛)/(𝑓_𝑚𝑎𝑥−𝑓_𝑚𝑖𝑛 )

将特征𝑓映射到 [a,b] 區間内:

𝑓_𝑖*=(b−a)/(𝑓_𝑚𝑎𝑥−𝑓_𝑚𝑖𝑛 ) (𝑓_𝑖−𝑓_𝑚𝑖𝑛 )+a

𝑓_𝑚𝑖𝑛為特征的最小值,𝑓_𝑚𝑎𝑥為特征的最大值

若資料存在離群值,标準化後的效果較差。

實作:

sklearn.preprocessing.MinMaxScaler

preprocessing.MinMaxScaler(

feature_range=(0, 1), #期望的轉換資料範圍

copy=True #設定為False以執行就地标準化并避免複制

)

3、考慮離群值的标準化

sklearn.preprocessing.RobustScaler

preprocessing.RobustScaler(

with_centering=False, #如果為True,則在标準化之前将資料居中

with_scaling=False, #如果為True,則将資料縮放到分位數範圍

quantile_range=(25.0, 75.0), #用于計算scale_的分位數範圍

copy=True #如果為False,請嘗試避免複制并改為直接替換

)

标準化公式:

資料預處理-标準化

其中:

median為中位數,分母部分由quantile_range确定。預設為IQR:3/4分位數-1/4分位數。

4、其他資料變換方法

atan反正切函數轉換

當資料都大于零時可以,可以使用反正切函數标準化,atan函數會原始資料映射到[-1,0]區間上。

log函數轉換

5、sklearn中标準化對象方法

fit(X[, y]) #計算。

fit_transform(X[, y]) #計算并執行标準化。

inverse_transform(X[, copy]) #将已标準化的資料轉換為原始表示。

partial_fit(X[, y]) #inline計算X上的mean和std。

transform(X[, y, copy]) #執行标準化。