sklearn逻辑回归为什么要归一化

原创文章,转载请说明本文来自:《老饼讲解-机器学习》 ml.bbbdata.com


目录

一、归一化对梯度下降的影响

01、下降路径的影响

02、对步长设置的影响

二、逻辑回归何时需要归一化


为什么有的人说,逻辑回归需要归一化,而有的人说逻辑回归不需要归一化呢?

他们说的都是对的,看完本文,你就知道为什么会有两种说法。

一、归一化对梯度下降的影响

我们先讲述不归一化对梯度下降法的影响,实际也就是逻辑回归需要归一化的主要原因

因为逻辑回归往往在求解过程中,使用的是梯度下降之类的算法。

以下讨论以下面的梯度下降问题为基础

求一组 w_1,w_2  令 y = w_1*x_1+w_2*x_2最小,其中x_1的范围为[-10000,10000],而 x_2 的范围为[-1,1]。


01、下降路径的影响

不做归一化的情况下,w_1调整1单位时,对  y 的影响范围为10000,而w_2 调整1单位只会影响1,即y对w1的调整非常敏感,因此,会极偏向调整w1,而忽略w2。

因此在调整同等步长的情况下,w1对w2的影响会更明显。

整个过程会成为:先调整w1,直到w1几乎不可调,再调整w2。只要迭代足够多次,这倒也没有问题。但明显的,w1,w2逐个调整比起w1,w2一起调整需要更多步数。

sklearn逻辑回归为什么要归一化_第1张图片




02、对步长设置的影响

(1) 解决不同变量需要不同步长

在梯度下降算法中,我们需要设置每次调整的步长,而不同变量需要不同步长。

对于w1,由于它的取值范围很多,微小的影响也对y影响很大,因此,我们可能设为0.00001,小步小步地调。

对于w2,我们只需设0.001可能就够了,

对于不同变量,我们需要调不同的步长,如果我们设为0.000001,则在调w2时明显过小,而设为0.001对调整w1又过大。这就麻烦了。

将所有变量的数据范围归一化到[0,1],对所有变量步长就统一

(2) 不同问题需要不同步长

另一方面,假设所有变量范围都一致,都是[-10000,10000],那么我们设为0.000001,但对另一个问题,所有变量为[-1,1],那我们设为0.001,则不同问题,我们还需要设置不同步长。

而不管原始数据范围是多少,我们统一将数据归一化为[0,1]后,我们都设为0.001就可以了,不需要针对不同问题设置不同步长。

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


二、逻辑回归何时需要归一化

为什么有的人说逻辑回归需要归一化,而有的人说不需要?

这个老饼认为,这种分歧主要来源于大家用的软件包不一样!


如果你用python的sklearn,不归一化试试?吃过亏后自然就乖乖做归一化啦!

而如果你用的是matlab,那你很疑惑,为什么逻辑回归也有人去做繁琐的归一化。

为什么会有这种差异呢?

主要原因在求解算法上。

sklearn默认用梯度下降,不归一化会需要更多的迭代步数。

而matlab则用牛顿法,牛顿法利用了二阶导的信息,所以在迭代速度上更加快,即使不归一化,一样可以在较少的步数内找到最优解。

总的来说,逻辑回归要不要归一化,并不是一概而定的,在不同的算法下,要求不同。

 一般我们用sklearn的话,都是需要归一化的。


相关文章

逻辑回归过拟合分析与解决方案

sklearn:一个简单的逻辑回归例子

sklearn提取逻辑回归模型系数

逻辑回归建模完整流程

你可能感兴趣的:(#,逻辑回归,逻辑回归,机器学习,sklearn)