首页 > 学院 > 开发设计 > 正文

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

2019-11-10 20:00:27
字体:
来源:转载
供稿:网友
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回归算法表现的还不错,至少有五岁小朋友的一笔画智商了^_^...


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表