概述
逻辑回归也叫对数几率回归
“逻辑回归”虽然叫回归,但是却是一种分类方法,跟线性回归(linear regression)有着显著的不同。
- 优点:无需事先假设数据分布,可以避免假设分布不准确带来的问题;不是预测出类别,而是给出近似概率;对率函数是任意阶可导的凸函数,有很好的数学性质。
- 缺点:
算法推导
- 给定训练数据集D={(xi,yi)}i=1mD=\{(x_i,y_i)\}_{i=1}^mD={(xi,yi)}i=1m,样本xix_ixi由ddd个属性描述,线性模型为:
hω(x)=ωTx+b h_\omega(x)=\omega^Tx+b hω(x)=ωTx+b
引入Sigmod函数
f(z)=11+ez f(z)=\frac{1}{1+e^z} f(z)=1+ez1
则f(z)∈{0,1}f(z) \in \{0,1\}f(z)∈{0,1} ,将$h(x)=z $即为逻辑回归的模型.
fω(x)=11+ehω(x) f_\omega(x)=\frac{1}{1+e^{h_\omega(x)}} fω(x)=1+ehω(x)1
代价函数为
J(ω)={−log(fω(x))  ,if  y=1−log(1−fω(x))  ,y=0 J(\omega)=\begin{cases} -log(f_\omega(x)) \; , if \; y=1 \\ -log(1-f_\omega(x))\;, y=0 \end{cases} J(ω)={−log(fω(x)),ify=1−log(1−fω(x)),y=0
这个代价函数还可以进一步简化为:
J(ω)=−ylog(fω(x))−(1−y)log(1−fω(x)) J(\omega)=-ylog(f_\omega(x))-(1-y)log(1-f_\omega(x)) J(ω)=−ylog(fω(x))−(1−y)log(1−fω(x))
我们的目标就是确定ω\omegaω,使得J(ω)J(\omega)J(ω)最小
使用梯度下降的方法:
对于训练集中的每个样本{xi,yi}\{x^i,y^i\}{xi,yi},为了方便计算,将代价函数改写为:
J(ω)=−1m∑i=1m[yilog(fω(xi))+(1−yi)log(1−fω(xi))]
J(\omega)=-\frac{1}{m} \sum_{i=1}^{m}[y^ilog(f_\omega(x^i))+(1-y^i)log(1-f_\omega(x^i))]
J(ω)=−m1i=1∑m[yilog(fω(xi))+(1−yi)log(1−fω(xi))]
如果作以下denote,可以将其写成矢量化
X=[x1T1x2T1⋮⋮xmT1]
X=\begin{bmatrix}
x_1^T&1 \\
x_2^T&1 \\
\vdots&\vdots \\
x_m^T&1
\end{bmatrix}
X=⎣⎢⎢⎢⎡x1Tx2T⋮xmT11⋮1⎦⎥⎥⎥⎤
ω=(ω;b)=[ω1ω2...ωdb]
\omega=(\omega ;b)=
\begin{bmatrix}
\omega_1 \\
\omega_2\\
... \\
\omega_d \\
b
\end{bmatrix}
ω=(ω;b)=⎣⎢⎢⎢⎢⎡ω1ω2...ωdb⎦⎥⎥⎥⎥⎤
y=[y1y2⋮ym]g(x)=11+ex
y=\begin{bmatrix}
y_1 \\
y_2 \\
\vdots \\
y_m
\end{bmatrix}
g(x)=\frac{1}{1+e^x}
y=⎣⎢⎢⎢⎡y1y2⋮ym⎦⎥⎥⎥⎤g(x)=1+ex1
矢量化的写法为:(矢量化可以大大减少计算复杂度,在Python或者MATLAB等上可以实现)
h=g(Xω)J(ω)=1m⋅[−yTlog(h)−(1−y)Tlog(1−h)]
h=g(X\omega) \\
J(\omega)=\frac{1}{m} \cdot [-y^Tlog(h)-(1-y)^Tlog(1-h)]
h=g(Xω)J(ω)=m1⋅[−yTlog(h)−(1−y)Tlog(1−h)]
则其梯度为:
∂J(ω)∂ωj=1m∑i=1m(fω(xi)−yi)⋅xji
\frac{\partial J(\omega)}{\partial \omega_j}=\frac{1}{m} \sum_{i=1}^{m}(f_\omega(x^i)-y^i)\cdot x_j^i
∂ωj∂J(ω)=m1i=1∑m(fω(xi)−yi)⋅xji
梯度的矢量化写法为:
∂J(ω)∂ωj=1mXT(g(Xω)−y)
\frac{\partial J(\omega)}{\partial \omega_j}=\frac{1}{m}X^T(g(X\omega)-y)
∂ωj∂J(ω)=m1XT(g(Xω)−y)
所以,逻辑回归的梯度下降算法为:
重复此过程直至收敛:{
ωj:=ωj−αmXT(g(Xω)−y)
\omega_j:=\omega_j - \frac{\alpha}{m}X^T(g(X\omega)-y)
ωj:=ωj−mαXT(g(Xω)−y)
}
其中,α\alphaα为学习率,这是矢量化的写法,如果用普通写法,就逐个参数同时更新,这里就不写了。
关于代价函数采用-log()的解释
出发点:假设样本的分类为1(y=1y=1y=1),我们希望当预测的结果越接近1,损失越小,预测结果越接近0,损失越大。考虑到函数y=log(x)y=log(x)y=log(x)当log的底数大于1的函数图像:
将其倒转并取x值为(0,1]可得:
这样的函数就很好的契合了我们的目标,即越接近0值越大,越接近1值越小。
当样本分类为0(y=0y=0y=0)时也是一样的道理将x换成1-x即可。