天天看点

数据预处理-标准化

标准化

通常确定目标变量的特征会有多个,原始数据中不同特征的数值大小往往差异很大,数值大的特征对目标变量的影响程度将会比数值小的特征对目标变量的影响大,数值小的特征容易被忽略。而通过标准化处理,可以使得不同的特征变量具有相同的尺度(不同特征的值都在某个范围内),消除了特征之间数值量纲的差异性。

数据分析及建模过程中,许多机器学习算法也需要其输入特征为标准化形式。

例如,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]) #执行标准化。