sklearn与逻辑回归-应用
进阶应用
sklearn逻辑回归为什么要归一化
作者 : 老饼 日期 : 2022-06-26 10:11:59 更新 : 2022-11-02 10:38:24
本站原创文章,转载请说明来自《老饼讲解-机器学习》ml.bbbdata.com


在用逻辑回归模型时,我们往往都需要将数据将进行归一化,

那为什么需要归一化呢?

本文分析逻辑回归为什么需要归一化的原因


  讨论基础  


   逻辑回归需要归一化的主要原因   


逻辑回归需要归一化的主要原因
是因为逻辑回归在求解过程中,使用的是梯度下降之类的算法。
所以,我们探讨逻辑回归为什么要归一化,
实际是探讨梯度下降法为什么要归一化



为方便理解,我们的分析围绕下面的具体例子问题展开


   例子问题   


求一组w1,w2令  最小,
其中x1的范围为[-10000,10000],
而x2的范围为[-1,1]                


   一、对下降路径的影响   

w1调整1单位时,对y1的影响范围为10000,
而w2调整1单位只会影响1,
即y对w1的调整非常敏感,
因此,会极偏向调整w1,而忽略w2。
因为在调整同等步长的情况下,w1对w2的影响会更明显。
整个过程会成为:
先调整w1,直到w1几乎不可调,再调整w2。
只要迭代足够多次,这倒也没有问题。
但明显的,w1,w2逐个调整比起w1,w2一起调整需要更多步数。

 



   二、对步长设置的影响  


   (一) 解决不同变量需要不同学习率   


我们需要设置每次调整的步长(学习率),
对于w1,由于它的取值范围很多,
微小的影响也对y影响很大,
因此,我们可能设为0.00001,小步小步地调。
对于w2,它对y的影响不是那么的大,
我们只需设0.001可能就够了,
如此一来,
对于不同变量,我们需要调不同的步长,
如果我们设为0.000001,则在调w2时明显过小,
而设为0.001对调整w1又明显过大。
这就麻烦了。
而如果我们将所有变量的数据范围归一化到[0,1],
所有变量的步长就统一了。


   (二) 不同问题需要不同学习率   


另一方面,
即使对同一个问题所有变量的范围都一致,
对于不同问题,变量的范围也是不一致的,
这会导致需要根据具体问题设定具体的学习率。

例如
问题A的变量范围统一在[-10000,10000],学习率需要设为0.000001,
问题B的变量范围统一在[-1,1],学习率就需要设为0.001,

对不同问题,需要设置不同步长,这样不免有些繁琐。
所以引入归一化,
不管原始数据范围是多少,
我们统一将数据归一化为[0,1],
这样对所有问题,
我们都将学率设为0.001就可以了,
不需要不同问题设置不同学习率。


   三、对正则化的影响  


    正则化需要归一化    


sklearn的逻辑回归默认是加了L2正则项的,
也即损失函数中加入了正则项
在数据没有归一化的情况下,输入变量的数量级如果差异很大,那么对应的、合理的权重w的数量级差异也会很大,
但正则项会惩罚过大的权重,因此,那些本就应该很大的权重,就会被惩罚,从而最后输出的模型得不到最合理的解。
这就需要数据归一化,正则化才能真正work,



总而言之,将数据范围统一在[0,1],对我们讨论、研究、处理问题,都有好处,不必不同问题作不同讨论。






 End 










联系老饼