《机器学习实战》第五章《Logistic回归》中讲到了梯度上升法,随机梯度上升法和改进的随机梯度上升法,下面把这几个算法思想总结一下。
首先,梯度上升法比较简单,根据梯度上升的迭代公式计算出了回归系数。
书中并没有采取最小二乘法之类的规则来作为迭代终止的条件,而是直接指定maxCycles最大循环次数来作为迭代终止条件。
假设回归系数初始值为全1,与数据矩阵做乘法并带入sigmoid函数得到介于0~1之间的估计值,这个估计值并不是一个数值,而是一个列向量
估计值与实际值相减求误差
将误差带入回归系数迭代公式更新回归系数
用新的回归系数重复第1步的操作直至达到预设迭代次数
这个算法存在两个待改进的地方:一是前面提到的终止条件;二是每次回归系数与数据矩阵做乘法计算量比较大,不适用于大数据量场景
针对第二个不足,书中又给出了随机梯度上升算法,与梯度上升法思想类似,只是每次不再做回归系数与数据矩阵的乘法,而是顺序提取数据矩阵中的一行与回归系数做向量乘法得到一个数值,而不是矩阵来更新回归系数,从而减小了计算量。
那么问题来了,这样做在整个数据集上迭代次数少了,拟合效果不好。自然想到要增加迭代次数,通过观察效果发现存在两个问题,一是回归系数需要更多的次数才能趋于稳定值,二是遇到非线性可分的数据集会存在迭代系数来回波动的现象。
针对这些问题,书中又提出了改进的随机梯度上升算法,从仿真结果来看收敛速度确实得到了改善,但缺乏严格的数学证明。改进主要在2个地方,一是改变了每次迭代的步长;二是随机而非顺序抽取数据矩阵的一行来迭代回归系统,这样就保障了小计算量,又避免了非线性数据样本点引起的振荡。
本文出自 “师兄的学习园地” 博客,请务必保留此出处http://4292565.blog.51cto.com/4282565/1676811
原文地址:http://4292565.blog.51cto.com/4282565/1676811