算法介绍
Logistic回归是一种广义线性回归(generalizedlinear 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是多项式函数就是多项式回归。本系统的L函数采用的是梯度上升法,梯度上升法的模型图如下:
它的公式如下:
算法的关键点就聚焦在 这个参数的设置上。
通过优化,本系统采用的是随机梯度上升算法:
流程图如下:
基本步骤说明:
1、 每次迭代都需要调整,
修改的目的是环节模型的高频波动,本系统的
计算方法是:
,使得每次迭代的 值会变小,但是不会缩小为0;
2、 通过随机选取样本来更新回归参数,这种方式避免了顺序数据的周期性波动。
3、 Sigmod函数就是一个类阶跃函数 ,作用是把数据进行归一化
Python代码实现如下:
def stocGradAscent1(dataMatrix, classLabels, numIter=150):
m,n = shape(dataMatrix)
weights = ones(n) #初始化权重值
index = 1;
for j in range(numIter):
dataIndex = range(m)
for i in range(m):
#aplha值每次随机调整大小通过i和j
alpha = 4/(1.0+j+i)+0.0001
#随机选择数据
randIndex = int(random.uniform(0,len(dataIndex)))
#依据数据向量和权重内乘预测标签值
h = sigmoid(sum(dataMatrix[randIndex]*weights))
#依据预测标签值和现有标签值计算delta值
delta = classLabels[randIndex] – h
#更新权重
weights = weights + alpha * delta * dataMatrix[randIndex]
del(dataIndex[randIndex])
return weights
优点
1、计算代价不高,易于理解和实现
缺点
1、容易产生欠和过拟合。
2、分类精度不高。