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回归算法表现的还不错,至少有五岁小朋友的一笔画智商了^_^...