一、归一化的好处
1、提升模型的收敛速度
如下图,x1的取值为0-2000,而x2的取值为1-5,假如只有这两个特征,对其进行优化时,会得到一个窄长的椭圆形,导致在梯度下降时,梯度的方向为垂直等高线的方向而走之字形路线,这样会使迭代很慢,相比之下,右图的迭代就会很快(理解:也就是步长走多走少方向总是对的,不会走偏)
2、提升模型的精度
归一化的另一好处是提高精度,这在涉及到一些距离计算的算法时效果显著,比如算法要计算欧氏距离,上图中x2的取值范围比较小,涉及到距离计算时其对结果的影响远比x1带来的小,所以这就会造成精度的损失。所以归一化很有必要,他可以让各个特征对结果做出的贡献相同。
从经验上说,归一化是让不同维度之间的特征在数值上有一定比较性,可以大大提高分类器的准确性。
3、深度学习中数据归一化可以防止模型梯度爆炸。
二、逻辑回归、决策树、xgboost需要进行归一化吗?每个情况是怎么样的?
1、逻辑回归是需要归一化的处理的
从反向过程来看:
逻辑回归模型的参数优化一般采用了梯度下降法,如果不对特征进行归一化,可能会使得损失函数值得等高线呈椭球形,这样花费更多的迭代步数才能到达最优解。
从损失函数来看:
逻辑回归模型的损失函数可以加入正则项,那么参数的大小便决定了损失函数值,特征就有必要先进行归一化。
2、决策树是不需要归一化的处理的
概率模型不需要归一化,因为它们不关心变量的值,而是关心变量的分布和变量之间的条件概率,如决策树、随机森林。因为数值缩放不影响分裂点位置,对树模型的结构不造成影响。
补充:树模型特征归一化可能会降低模型的准确率,但是能够使模型更加平稳
3、xgboost是不需要归一化的处理的
决策树模型是不需要对输入数量指标做归一化处理,但是,xgboost算法迭代计算中应用了梯度下降的计算,从这点来说,又应该需要做归一化,至少可以加快迭代计算速度。请教大家,这xgboost输入的数量指标到底是否需要做归一化?
xgboost虽然应用的是梯度下降,但是迭代的时候输入的数据指标不会影响迭代速度,xgboost内部是二叉树,做的是一种分割。
常见问题:
1、归一化也就是标准化的一种,比如做一般线性回归的时候,XY轴中只有一个是变量,那请问是否需要对变量数据进行标准归一化呢?
- 答:一维数据一般没有太大必要归一化,它的归一化相当于通过学习率调节了,但是反过来归一化后,学习率可能就没有太大必要了,这样就可以减少一个学习率的设置。(即学习率初始值的选择需要参考输入的范围,直接将数据归一化,学习率就不必再根据数据范围作调整。)
2、问:为什么线性归一化对用距离来度量相似度的方法在精度上会有影响?
- 答:线性变换其协方差产生倍数值的缩放,无法消除量纲对方差、协方差的影响,**由于量纲的存在,使用不同的量纲、距离的计算结果会不同,在精度上当然会有影响。**使用0均值对方差进行了归一化,这时候每个维度的量纲其实已经等价了。而且用于最大值和最小值未知的时候,或者说最大值和最小值并不准确时尤其重要,当最大值和最小值未知或者不准备时当然在精度上有更大影响,0均值方法这种问题就少很多,对异常点也更鲁棒。
3、应用场景说明
- 1)概率模型不需要归一化,因为这种模型不关心变量的取值,而是关心变量的分布和变量之间的条件概率;
2)SVM、线性回归之类的最优化问题需要归一化,是否归一化主要在于是否关心变量取值;
3)神经网络需要标准化处理,一般变量的取值在-1到1之间,这样做是为了弱化某些变量的值较大而对模型产生影响。一般神经网络中的隐藏层采用tanh激活函数比sigmod激活函数要好些,因为tanh双曲正切函数的取值[-1,1]之间,均值为0.
4)在K近邻算法中,如果不对解释变量进行标准化,那么具有小数量级的解释变量的影响就会微乎其微。