机器学习:logistic回归

逻辑回归是一个形式是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之间连续),它被用来判断一个学习算法是否正确。spa

除了正确和不正确的结果以外,使用逻辑回归的好处在于,它还能告诉你,你离正确的结果还差多少,从而引导你向正确的方向前进。所以它经常和梯度上升的算法结合起来。下面的代码体现了这样的例子:ci

输入参数1是100行,2列的矩阵; table

输入参数2是100行,1列的矩阵,取值都是0或1; class

def gradAscent(dataMatIn, classLabels):
   # ❶(如下两行)转换为NumPy矩阵数据类型
    dataMatrix = mat(dataMatIn)
    labelMat = mat(classLabels).transpose()
    m,n = shape(dataMatrix)
    alpha = 0.001
    maxCycles = 500
    weights = ones((n,1)) 初始化成(1,1)
    for k in range(maxCycles):
        #❷(如下三行)矩阵相乘
        h = sigmoid(dataMatrix*weights)矩阵相乘,获得100行,1列的矩阵,利用逻辑回归把它变成100行1列的矩阵,每一个值介于0到1之间,h是对label的一个估计
        error = (labelMat - h)估计与实际值之间差距为error,error也是一个100行1列的矩阵;
        weights = weights + alpha * dataMatrix.transpose()* error后面3项乘的结果是1行2列的矩阵,表明了估算的结果与实际结果是超了仍是低了,从而修改weights。
    return weights循环

因为每次迭代都会致使weights朝labelMat的方向靠近,所以通过500次的循环,最终能获得较好的结果,能很好的肯定weights的两个参数。数据类型

固然上述代码存在一个问题,它每次循环都要扫描dataMatrix中全部的行,这对大型的数据是不可容忍的,所以,有了另一种随机梯度上升的算法。它每次只看一行数据,看它的估算与结果的距离,根据距离调整weights。

这个算法仍然存在问题,由于它受每一个训练数据影响是同样的,因此能够经过设置,让后面的实例对数据的影响逐渐变小,从而确保学习的快速收连。

如何处理缺失数据是机器学习中的重要课题,它也严重影响逻辑回归的准确性。

----

总之,若是只是要判断一个学习算法是否准确,有无数种方法,为何必定要选择逻辑回归这个奇怪的函数。个人理解是,逻辑回归函数它能反映出一种方向,可以把“是否正确”转变成“有多么正确或者多么错误”,正由于这个转变,可让机器不断的向正确的方向前进,最终实现准确的预测。

相关文章
相关标签/搜索