逻辑回归是一个形式是Y=1/(1+E(-X))的函数,它的特点是:
1, 当X>0,随着X增大,Y很快的接近1;
2,当x<0,随着X的减小,Y很快的接近0;
3,当X=0时,Y=1/2。
由于逻辑回归的这种特性(在0-1之间连续),它被用来判断一个学习算法是否正确。
除了正确和不正确的结果之外,使用逻辑回归的好处在于,它还能告诉你,你离正确的结果还差多少,从而引导你向正确的方向前进。因此它常常和梯度上升的算法结合起来。下面的代码体现了这样的例子:
输入参数1是100行,2列的矩阵; 输入参数2是100行,1列的矩阵,取值都是0或1; def gradAscent(dataMatIn, classLabels): |
由于每次迭代都会导致weights朝labelMat的方向靠近,因此经过500次的循环,最终能得到较好的结果,能很好的确定weights的两个参数。
当然上述代码存在一个问题,它每次循环都要扫描dataMatrix中所有的行,这对大型的数据是不可容忍的,因此,有了另外一种随机梯度上升的算法。它每次只看一行数据,看它的估算与结果的距离,根据距离调整weights。
这个算法仍然存在问题,因为它受每个训练数据影响是一样的,所以可以通过设置,让后面的实例对数据的影响逐渐变小,从而确保学习的快速收连。
如何处理缺失数据是机器学习中的重要课题,它也严重影响逻辑回归的准确性。
----
总之,如果只是要判断一个学习算法是否准确,有无数种方法,为什么一定要选择逻辑回归这个奇怪的函数。我的理解是,逻辑回归函数它能反映出一种方向,能够把“是否正确”转变成“有多么正确或者多么错误”,正因为这个转变,可以让机器不断的向正确的方向前进,最终实现准确的预测。