原创文章,转载请说明本文来自:《老饼讲解-机器学习》 ml.bbbdata.com
目录
为什么有的人说,逻辑回归需要归一化,而有的人说逻辑回归不需要归一化呢?
他们说的都是对的,看完本文,你就知道为什么会有两种说法。
一、归一化对梯度下降的影响
我们先讲述不归一化对梯度下降法的影响,实际也就是逻辑回归需要归一化的主要原因。
因为逻辑回归往往在求解过程中,使用的是梯度下降之类的算法。
以下讨论以下面的梯度下降问题为基础:
求一组 , 令 最小,其中的范围为[-10000,10000],而 的范围为[-1,1]。
01、下降路径的影响
不做归一化的情况下,调整1单位时,对 的影响范围为10000,而 调整1单位只会影响1,即y对w1的调整非常敏感,因此,会极偏向调整w1,而忽略w2。
因此在调整同等步长的情况下,w1对w2的影响会更明显。
整个过程会成为:先调整w1,直到w1几乎不可调,再调整w2。只要迭代足够多次,这倒也没有问题。但明显的,w1,w2逐个调整比起w1,w2一起调整需要更多步数。
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的话,都是需要归一化的。
相关文章