特征归一化/标准化

what

特征归一化/标准化(feature scaling/standardization/normalization)是一种把特征变量映射到某个区间的数据前处理方法

  • 因为不同特征的取值范围,单位、量纲各不相同(如,身高可用m或cm),对某些模型来说,可能对结果有影响
  • 这些词是一类操作,可能稍有不同,这里先不做区分

how

基本方法

常见的就两种方法(本质上都是压缩平移):

Min-Max

通常是将特征映射到 [ 0 , 1 ] [0, 1] [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)xmin(x)
[ − 1 , 1 ] [-1, 1] [1,1]
x ′ = 2 ⋅ x − m i n ( x ) m a x ( x ) − m i n ( x ) − 1 = x − m i d ( x ) ( m a x ( x ) − m i n ( x ) ) / 2 x' = 2 \cdot \frac {x- min(x)} {max(x)- min(x)} - 1 = \frac {x- mid(x)} {(max(x)- min(x))/2} x=2max(x)min(x)xmin(x)1=(max(x)min(x))/2xmid(x)

  • 需要注意的是:对测试集做标准化时, m a x ( x ) , m i n ( x ) max(x), min(x) max(x),min(x)仍然用的是训练集中的值,所以结果可能超出范围
(均值/方差)标准化

把样本的均值和标准差变为0, 1
x ′ = x − x ˉ s t d ( x ) x' = \frac{x-\bar{x}}{std(x)} x=std(x)xxˉ

  • 标准化后的数据的均值,标准差正好是(0,1),但是范围不固定
  • 如果特征原本服从正态分布的话,那么标准化之后是标准正分布 N ( 0 , 1 ) N(0,1) N(0,1)
注意点
  • 这里讨论的是对于单变量的处理,区别于whitening(多变量版本,但是还要考虑协方差,消除变量相关性)
  • 在数据的分布比较合理的情况下,这么做是ok的, 但是如果数据包含outlier,如:分布是厚尾的,或数据本身有问题,则均值和方差都会受很大的影响
    • 例: x = [ 0 , 0 , 1 , 1 , 1 , 100 ] → x ˉ = 17.17 , σ ^ = 37.05 x=[0,0,1,1,1,100] \rightarrow \bar{x} = 17.17, \hat{\sigma} = 37.05 x=[0,0,1,1,1,100]xˉ=17.17,σ^=37.05
      min-max: [ 0 , 0 , 0.01 , 0.01 , 0.01 , 1 ] [0 , 0 , 0.01, 0.01, 0.01, 1] [0,0,0.01,0.01,0.01,1]
      (均值/方差)标准化: [ − 0.46 , − 0.46 , − 0.44 , − 0.44 , − 0.44 , 2.24 ] [-0.46 , -0.46 , -0.44, -0.44, -0.44, 2.24] [0.46,0.46,0.44,0.44,0.44,2.24]
      可以看到,0,1因为受到outlier 100的影响,在标准化后变得更难区分了
    • 解决这类的第一种方法是挖掘数据中的outlier,手动处理
    • 一种鲁棒性更好的方法是用中位数代替均值,用四分位距(IQR)代替标准差,即: x ′ = x − m e d i a n ( x ) I Q R ( x ) x' =\frac{x-median(x)}{IQR(x)} x=IQR(x)xmedian(x)
      • 注意,这是在通过数据难以准确估计其分布参数的情况下采用的办法,所以如果数据分布不是对称的,样本中位数不是均值的无偏估计;四分位距也不同于标准差(实际上,对于正态分布, [ − σ , σ ] [-\sigma, \sigma] [σ,σ]内的面积是0.68,非0.5, I Q R ≈ 1.35 σ IQR\approx1.35\sigma IQR1.35σ,而厚尾的情况下, I Q R &lt; σ IQR &lt; \sigma IQR<σ);因此,标准化后的数据均值和方差并非(0,1)
  • 当需要计算cosine距离时,通常还有另一种标准化(其实是单位化),即: x ′ = x ∣ ∣ x ∣ ∣ 2 = x ∑ i = 1 d x i 2 x&#x27; = \frac{x}{||x||_2} = \frac{x}{\sqrt{\sum_{i=1}^d{x_i^2}}} x=x2x=i=1dxi2 x

when

什么时候需要做标准化?
  • 模型是否是基于距离或距离敏感的?
    • 举个例子,两个特征,分别是身高(单位: 米)和体重(单位: 克),显然后者比前者大好几个数量级,如果直接基于欧式距离聚类,那么后者的作用会远大于前者
    • 所以像KNN,聚类,核方法(如svm中用到的),这些直接基于距离的方法都需要做标准化
    • 说到底,是因为无法权衡特征的重要性,所以就统统打平到一个范围处理(尤其对无监督的来说)
    • PS: 一种自带标准化的距离:马氏距离
  • 模型优化考虑
    • 模型有正则化项(regularization/weight decay)时,显然取值范围大的特征权重容易小一些,这样正则化的约束力就会弱一些,反之也是,导致不平衡
    • 梯度下降对是否标准化也较敏感,尤其是二阶导(Hessian matrix)比较ill-conditioned时(简单理解就是矩阵的最大和最小的特征值绝对值之比很大,导致用一阶导作为当前优化的方向是不合理的),可能出现步子太小走得慢,或步子大"在峡谷震荡"等导致收敛慢的情况
    • 影响参数初始化的效果
      • 如:采用均值为0的正态分布初始化参数时,如果不用中心为0的标准化(如 [ − 1 , 1 ] [-1,1] [1,1]),甚至二值化采用 { 0 , 1 } \{0,1\} {0,1}而不是 { − 1 , 1 } \{-1,1\} {1,1}),都会导致初始化时分类平面偏离数据点(如: w = [ 0.1 , 0.2 ] , x = [ 100 , 80 ] , y = 0 w=[0.1, 0.2], x=[100, 80], y=0 w=[0.1,0.2],x=[100,80],y=0
      • 同时还会有saturation的问题,如sigmoid,tanh激活
反过来说,什么时候不需要?
  • 不需要加正则化时的回归(linear,logistic等),除了可能影响优化时收敛的速度外,做不做标准化没影响
  • tree-based model(如random forest,GBDT(penalty是加在输出上的,与输入无关)),在选特征和切分的时候,因为不考虑值的大小,所以也可以不用标准化

References

  1. scikit-learn doc
  2. SAS faq
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值