特征预处理
问:为什么需要特征预处理?
答:特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其它的特征。
问:什么是特征预处理?
将不同规格的数据转换到同一规格。
两种处理方式
归一化
通过对原始数据进行变换把数据映射到[a,b] (默认为[0,1])之间
数学公式:
将 X X X数据映射到[0,1]
x = X − m i n ( x ) m a x ( x ) − m i n ( x ) x=\frac{X-min(x)}{max(x)-min(x)} x=max(x)−min(x)X−min(x)
将 X X X数据映射到[a,b]
x = X ∗ ( b − a ) + a x=X*(b-a)+a x=X∗(b−a)+a
api
from sklearn.preprocessing import MinMaxScaler
data_transform1 = MinMaxScaler()
标准化
通过对原始数据进行变换把数据变换到均值为0,标准差为1范围内
数学公式:
x = x − x ˉ 1 n ∑ i = 1 n ( x − x ˉ ) 2 x=\frac{x-\bar{x}}{\sqrt{ \frac{1}{n} \displaystyle\sum_{i=1}^n(x-\bar{x})^2}} x=n1i=1∑n(x−xˉ)2x−xˉ
x ˉ = 1 n ∑ i = 1 n x i \bar{x} = \frac{1}{n} \displaystyle\sum_{i=1}^n x_i xˉ=n1i=1∑nxi
api
from sklearn.preprocessing import StandardScaler
data_transform2 = StandardScaler()
总结
归一化:最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,所以这种方法鲁棒性较差,只适合传统精确小数据场景。
标准化:异常点所占比例较小的话,对于平均值的影响并不大,方差改变较小,所以这种方式适合在数据量较大,分布复杂的场景下使用。