逻辑回归 Logistic Regression

逻辑回归也被称为对数几率回归,是一种分类算法,用条件概率分布的形式表示P(Y|X),这里随机变量X取值为n维实数向量。

例如x=(x1,x2,,xn)Y取值为01

逻辑回归模型
逻辑回归的模型定义如下:

P(Y=1|x)=exp(w·x+b)1+exp(w·x+b)
P(y=0|x)=11+exp(w·x+b)
假设有一个二分类问题,输出为y={0,1},而线性回归模型产生的预测值为z=wx+b是实数值,我们希望有一个理想的阶跃函数来帮我们实现z值到0/1值的转化.

我们可以很自然的想到如下函数:

ϕ(z)={0if z<00.5if z=01if z>0
但是由于该函数在定义域内不连续,而我们需要一个单调可微的函数来供我们使用,于是便找到了Sigmoid函数:
ϕ(z)=11+ez

逻辑回归 Logistic Regression

由于Sigmoid函数的取值范围为[0,1],我们就可以将其视为类1的后验概率估计P(y=1|x)。说白了,就是如果有了一个测试点x,那么就可以用Sigmoid 函数算出来的结果来当做该点x属于类别1的概率大小。

于是,非常自然地,我们把Sigmoid函数计算得到的值大于等于0.5的归为类别1,小于0.5的归为类别0:

y^={1if ϕ(z) 00otherwise

逻辑回归的损失函数
逻辑回归模型的损失函数(误差平方和)定义如下:

J(w)=i12(ϕ(z(i))y(i))2
其中:
z(i)=wTx(i)+bi,表示第i个样本点;
y(i)表示第i个样本的真实值;
ϕ(z(i))表示第i个样本的预测值。

这时,如果我们将ϕ(z)=11+ez带入的话,会发现这是一个非凸函数,这就意味着代价函数(代价即预测值和实际值之间的差距)有着许多的局部最小值,这非常不利于我们求解。

左:非凸函数;右:凸函数
逻辑回归 Logistic Regression

因此我们需要换一个思路去解决问题,我们注意到,在逻辑回归的分类任务中,分类结果非0即1,所以我们有:

P(y=1|x;w)=ϕ(z)
P(y=0|x;w)=1ϕ(z)
其中:
ϕ(z)=ϕ(wTx+b)
P(y=1|x;w)表示给定w,那么xy=1的概率大小。

于是上式可以整合为:

P(y|x;w)=ϕ(z)y(1ϕ(z))1y

逻辑回归模型参数估计
求解P(y|x;w)=ϕ(z)y(1ϕ(z))1y中的参数w可以用极大似然估计(最大可能性估计)的方法:
L(w)=i=1nP(y(i)|x(i);w)=i=1n(ϕ(z(i)))y(i)(1ϕ(z(i)))1y(i)
等式两边做对数变换可得
l(w)=lnL(w)=i=1ny(i)ln(ϕ(z(i)))+(1y(i))ln(1ϕ(z(i)))
我们现在就得到了代价函数l(w),为了方便使用梯度下降法求解代价函数,我们取代价函数的相反数,然后将代价函数定义为原代价函数的相反数:
J(w)=l(w)=i=1n[y(i)ln(ϕ(z(i)))+(1y(i))ln(1ϕ(z(i)))]

逻辑回归的模型求解
由于Sigmoid函数的自身性质,其对参数求偏导后:

ϕ(z)=11+ez
ϕ(z)=dϕ(z)dz=ϕ(z)(1ϕ(z))

偏导数推导过程:
逻辑回归 Logistic Regression

接下来使用梯度下降法求解回归模型:

w:=w+w
其中
w=ηJ(w)=ηJ(w)wj=η[i=1n(y(i)ϕ(z(i)))xj(i)]
wj表示第j个特征的权重;
η为学习率,用来控制步长。

梯度推导过程:
逻辑回归 Logistic Regression

所以使用梯度下降法更新权重时,根据下列式子即可:

wj:=wj+ηi=1ny(i)ϕ(z(i)))xj(i)

当样本量极大时,更新权重会非常耗时,我们可以采用随机梯度下降的方法,把每次迭代时需要的样本打乱:
wj:=wj+η(y(i)ϕ(z(i)))xj(i),for i in range(n)
也就是去掉了求和,而是对每个样本点都进行更新。

多项逻辑回归模型
将逻辑回归应用推广为多项式逻辑回归,用于解决多分类问题,这时公式定义为:

P(Y=k|x)=exp(wk·x)1+k=0K1exp(wk·x),k=1,2,...,K1
P(Y=K|x)=11+k=0K1exp(wk·x)