机器学习笔记之Logistic回归算法

Logistic回归算法:
优点:计算代价不高,易于理解和实现。
缺点:容易欠拟合,分类精度可能不高。
适用数据类型:数值型和标称型。

算法原理:logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w'x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w'x+b作为因变量,即y =w'x+b,而logistic回归则通过函数L将w'x+b对应一个隐状态p,p =L(w'x+b),然后根据p 与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。
ps:因为Logistic的几何形状很像一个“S”型,所以又叫 sigmoid曲线(S型曲线)

算法流程:
收集数据:采用任意方法收集数据。
准备数据:由于需要进行距离计算,因此要求数据类型为数值型。
分析数据:采用任意方法对数据进行分析。
训练算法:大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数。
测试算法:一旦训练完成,分类也计算的很快。
使用算法:对实际数据进行预测。

Logistic函数:
    
它的几何形状:

             


    由图我们可以看出,在处理二分类问题(0,1)时,x=0,f(x) = 0.5,但函数自变量趋近于正无穷时,函数逼近于1。反之,当函数自变量趋近于负无穷时,函数逼近于0。所以对于任意一个输入值,我们总能得出一个在(0,1)之间的输出结果,但输出结果大于0.5时,我们认为输出结果为1,反之为0。因此Logistic回归也可以被看成是一种概率估计。

    函数确定之后我们在看一下它的输入情况,我们可以将对条件输入记作: 

                       

   如果采用向量的写法可以记作:

                

   其中向量x是输入数据,w为输入数据的系数。

所以其实Logistic的训练过程,其实也就是求最优回归系数的过程。


这里我们就需要一个优化算法了,也变引出了——梯度下降(上升)算法

       梯度下降(上升)法是一个最优化算法,通常也称为最速下降(上升)法。最速下降(上升)法是求解无约束优化问题最简单和最古老的方法之一,虽然现在已经不具有实用性,但是许多有效算法都是以它为基础进行改进和修正而得到的。最速下降(上升)法是用负(正)梯度方向为搜索方向的,最速下降(上升)法越接近目标值,步长越小,前进越慢。


下面便是梯度下降(上升)算法的经典图示了:


                        


梯度下降(上升)算法的计算公式:


Logistic函数代码:


def sigmoid(inX):
    return 1.0/(1+exp(-inX))


梯度上升算法代码:(因为我们后面需要分类的问题是沿着梯度上升方向寻找的,所以这里使用梯度上升算法)


def gradAscent(dataMatIn, classLabels):
    dataMatrix = mat(dataMatIn)             
    labelMat = mat(classLabels).transpose() 
    m,n = shape(dataMatrix)
    alpha = 0.001
    maxCycles = 500
    weights = ones((n,1))
    for k in range(maxCycles):             
        h = sigmoid(dataMatrix*weights)   
        error = (labelMat - h)              
        weights = weights + alpha * dataMatrix.transpose()* error  #梯度上升算法部分
    return weights


下面我们需要一些测试数据:


图中红色方块代表一种类型的数据,绿色圆圈代表另一种类型的数据。

我们尝试使用Logistic回归算法,将这两组数据在这个二维面上划分出来(对于人来说这个工作相当简单。。。)


嗯,看来Logistic回归算法表现的还不错,至少有五岁小朋友的一笔画智商了^_^...







猜你喜欢

转载自blog.csdn.net/u012269327/article/details/54926501