特征工程——为什么要对数值类型的特征做归一化?

百面机器学习涉及到的问题,在我不理解和认为不对的地方做了补充和修改,若有错误欢迎指教!
为了消除数据特征之间的量纲影响,我们需要对特征进行归一化处理,使得不同指标之间具有可比性。例如,分析一个人的身高和体重对健康的影响, 如果使用米( m )和千克( kg ) 作为单位, 那么身高特征会在1.6 1.8m,体重特征会在50 - 100kg 的范围内,分析出来的结果显然会倾向于数值差别比较大的体重特征。想要得到更为准确的结果, 就需要进行特征归一(Normalization ) 处理,使各指标处于同一数值量级,以便进行分析。

为什么需要对数值类型的特征做归一化?
对数值类型的特征做归一化可以将所以的特征都统一到一个大致相等的数值区间内。
比如x1的范围是[0,10],x2的范围是[0,100]。 两者的量纲是不等的,可想而知相比于x1,x2需要更多的迭代步数(梯度下降法)才能收敛到最佳值,从而使最后的结果更倾向于于x2特征。而当归一化后,x1,x2的量纲相等,不仅能减少迭代步数,还能使原本数值范围很大的特征不至于过度影响最后的结果。

我们不妨借助随机梯度下降的实例来说明归一化的重要性:
假设有两种数值型特征,的取值范围为[0,10] , 心的取值范围为[0, 3] , 于是可以构造_个目标函数符合图1.1 (a)中的等值图。
在这里插入图片描述

在学习速率相同的情况下,x1的更新速度会大于需要较多的迭代才能找到最优解。如果将x1和x2 归一化到相同的数值区间后,优化目标的等值图会变成图1.1 ( b ) 中的圆形,x1 和x2的更新速度变得更为一致,容易更快地通过梯度下降找到最优解。

当然,数据归一化并不是万能的。在实际应用中,通过梯度下降法求解的模型通常是需要归一化的, 包括线性回归逻辑回归支持向量机、神经网络等模型。但对于决策树模型则并不适用,以C4.5 为例,决策树在进行节点分裂时主要依据数据集D关于特征x 的信息增益比,而信息增益比跟特征是否经过归一化是无关的,因为归一化并不会改变样本在特征x上的信息增益。

常用的归一化:
线性函数归一化( Min-Max Scaling ) 。它对原始数据进行线性变换,使结果映射到[0, 1]的范围,实现对原始数据的等比缩放。
x’ = (x - X_min) / (X_max - X_min)

零均值归一化(Z-Score Normalization)。可以将原始数据映射到均值为0,标准差为1的分布上。
x’ = (x - μ)/σ

参考:https://www.jianshu.com/p/95a8f035c86c
非线性归一化
(1)对数函数转换:y = log10(x)
(2)反余切函数转换:y = atan(x) * 2 / π
(3)经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括 log、指数,正切等。需要根据数据分布的情况,决定非线性函数的曲线,比如log(V, 2)还是log(V, 10)等。

中心化
  x’ = x - μ
某知乎答主的回答提到了他个人经验:一般来说,我个人建议优先使用标准哈。对于输出有要求时再尝试别的方法,如归一化或者更加复杂的方法。很多方法都可以将输出范围调整到[0, 1],如果我们对于数据的分布有假设的话,更加有效的方法是使用相对应的概率密度函数来转换。让我们以高斯分布为例,我们可以首先计算高斯误差函数(Gaussian Error Function),此处定为er fc(·),那么可以用下式进行转化:还没理解???
在这里插入图片描述

这篇博客提到他的经验:1) 在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。2) 在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。
这篇博客提到他的经验:1) 在分类、聚类算法中,需要使用距离来度量相似性的时候、或者使用PCA技术进行降维的时候,第二种方法(Z-score standardization)表现更好。2) 在不涉及距离度量、协方差计算、数据不符合正太分布的时候,可以使用第一种方法或其他归一化方法。比如图像处理中,将RGB图像转换为灰度图像后将其值限定在[0 255]的范围。

5 哪些模型必须归一化/标准化?
(1)SVM
  不同的模型对特征的分布假设是不一样的。比如SVM 用高斯核的时候,所有维度共用一个方差,这不就假设特征分布是圆的么,输入椭圆的就坑了人家,所以简单的归一化都还不够好,来杯白化才有劲。比如用树的时候就是各个维度各算各的切分点,没所谓。

(2)KNN
  需要度量距离的模型,一般在特征值差距较大时,都会进行归一化/标准化。不然会出现“大数吃小数”。

(3)神经网络
  1)数值问题
  归一化/标准化可以避免一些不必要的数值问题。输入变量的数量级会引起数值问题,但其实要引起也并不是那么困难。因为tansig(tanh)的非线性区间大约在[-1.7,1.7]。意味着要使神经元有效,tansig( w1x1 + w2x2 +b) 里的 w1x1 +w2x2 +b 数量级应该在 1 (1.7所在的数量级)左右。这时输入较大,就意味着权值必须较小,一个较大,一个较小,两者相乘,就引起数值问题了。
  假如你的输入是421,你也许认为,这并不是一个太大的数,但因为有效权值大概会在1/421左右,例如0.00243,那么,在matlab里输入 421·0.00243 == 0.421·2.43,会发现不相等,这就是一个数值问题。

2)求解需要
  a. 初始化:在初始化时我们希望每个神经元初始化成有效的状态,tansig函数在[-1.7, 1.7]范围内有较好的非线性,所以我们希望函数的输入和神经元的初始化都能在合理的范围内使得每个神经元在初始时是有效的。(如果权值初始化在[-1,1]且输入没有归一化且过大,会使得神经元饱和)
  b. 梯度:以输入-隐层-输出这样的三层BP为例,我们知道对于输入-隐层权值的梯度有2ew(1-a^2)*x的形式(e是誤差,w是隐层到输出层的权重,a是隐层神经元的值,x是输入),若果输出层的数量级很大,会引起e的数量级很大,同理,w为了将隐层(数量级为1)映身到输出层,w也会很大,再加上x也很大的话,从梯度公式可以看出,三者相乘,梯度就非常大了。这时会给梯度的更新带来数值问题。公式上还没理解,含以上明白???
  c. 学习率:由(2)中,知道梯度非常大,学习率就必须非常小,因此,学习率(学习率初始值)的选择需要参考输入的范围,不如直接将数据归一化,这样学习率就不必再根据数据范围作调整。 隐层到输出层的权值梯度可以写成 2ea,而输入层到隐层的权值梯度为 2ew(1-a^2)x ,受 x 和 w 的影响,各个梯度的数量级不相同,因此,它们需要的学习率数量级也就不相同。对w1适合的学习率,可能相对于w2来说会太小,若果使用适合w1的学习率,会导致在w2方向上步进非常慢,会消耗非常多的时间,而使用适合w2的学习率,对w1来说又太大,搜索不到适合w1的解。如果使用固定学习率,而数据没归一化,则后果可想而知。
  d.搜索轨迹:已解释
  
(4)PCA

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值