本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com
在用逻辑回归模型时,我们往往都需要将数据将进行归一化,那为什么需要归一化呢?
本文分析逻辑回归为什么需要归一化的原因,包括归一化对训练的影响以及对正则化的影响
通过本文,可以了解为什么逻辑回归模型在训练前需要对数据进行归一化,以及什么时候不需要归一化
本节讲解归一化对逻辑回归训练的影响
逻辑回归需要归一化的主要原因
逻辑回归需要归一化有两个主要原因,如下:
1. 逻辑回归使用了梯度下降求解算法
对于梯度下降算法,归一化的数据更有利于训练
2. 逻辑回归往往需要添加正则项
归一化后能令正则化公平地惩罚各个系数
归一化对逻辑回归训练速度的影响
数据归一化对梯度下降算法有诸多好处,例如:
1. 归一化令梯度下降算法训练速度会更快
2. 归一化更方便设置梯度下降算法的学习率
为方便理解归一化对梯度下降算法的好处,使用下述例子:
求一组令 最小
其中的范围为[-10000,10000],而的范围为[-1,1]
归一化能令梯度下降算法的求解速度更快
归一化后的数据在梯度下降法的训练中收敛速度会更加快,具体原因如下:
1. 变量的数量级差异会影响系数的调整偏好
调整1单位时,对的影响范围为10000,而调整1单位只会影响1
即对的调整非常敏感,因此,会极偏向调整,而忽略
因为在调整同等步长的情况下,w1对w2的影响会更明显
2. 由于对系数的调整偏好不同,会导致调整路径的差异
如下:在x1与x2数量级相同时,w1,w2会同步调整,
但在x1数量级远大于x2时,则会先调整w1,直到w1几乎不可调,再调整w2
当然,即使数量级差异极大,但只要迭代足够多次,也是没有问题的
但明显的,w1,w2逐个调整比起w1,w2一起调整需要更多步数,因此数量级一致能使训练的速度更加快
归一化更方便设置梯度下降算法的学习率
归一化更方便设置梯度下降算法的学习率,例如:
一、解决不同变量需要不同学习率
如果没有归一化,则需要对每个变量独自设置学习率
对于w1,由于x1的取值范围很大,微小的影响也对y影响很大
因此,我们可能设为0.00001,小步小步地调
对于w2,它对y的影响不是那么的大,我们只需设0.001可能就够了
如此一来,对于不同变量,我们需要调不同的步长
而如果我们将所有变量的数据范围归一化到[0,1],所有变量的学习率就统一了
二、解决不同问题需要不同学习率
对于不同问题,变量的范围不一致,这就需要根据具体问题设定具体学习率
例如,问题A的变量范围统一在[-10000,10000],学习率需要设为0.000001
问题B的变量范围统一在[-1,1],学习率就需要设为0.001
对不同问题,需要设置不同步长,这样不免有些繁琐
所以引入归一化,不管原始数据范围是多少,统一将数据归一化为[0,1]
这样对所有问题都将学习率设为0.001就可以了,不需要不同问题设置不同学习率
正则化需要归一化
sklearn的逻辑回归默认是加了L2正则项的,也即损失函数中加入了正则项,
在数据没有归一化的情况下,输入变量的数量级如果差异很大,那么对应的、合理的权重w的数量级差异也会很大,
但正则项会惩罚过大的权重,因此,那些本就应该很大的权重,就会被惩罚,从而最后输出的模型得不到最合理的解。
这就需要数据归一化,正则化才能真正work
老饼语
本文只是根据“使用梯度下降法并启用L2正则化”场景下(也即sklearn的默认设置)所作的讨论
并且讨论也并不是完全充分的,只是列举了一些归一化对逻辑回归模型效果关键的、重要的影响
对于其它场景,例如使用牛顿法进行训练,或者不使用正则化,则又是不同的影响
但总而言之,将数据范围统一在[0,1],对我们讨论、研究、处理问题,都有好处,
在一般情况下,直接归一化就好了,归一化总是有益无害的
好了,以上就是逻辑回归为什么要归一化了~
End