逻辑回归 logistic regression 算法原理及优化

概述

逻辑回归也叫对数几率回归

“逻辑回归”虽然叫回归,但是却是一种分类方法,跟线性回归(linear regression)有着显著的不同。

  • 优点:无需事先假设数据分布,可以避免假设分布不准确带来的问题;不是预测出类别,而是给出近似概率;对率函数是任意阶可导的凸函数,有很好的数学性质。
  • 缺点:

算法推导

  • 给定训练数据集 D = { ( x i , y i ) } i = 1 m D=\{(x_i,y_i)\}_{i=1}^m D={(xi,yi)}i=1m,样本 x i x_i xi d d d个属性描述,线性模型为:
    h ω ( x ) = ω T x + b h_\omega(x)=\omega^Tx+b hω(x)=ωTx+b
    引入Sigmod函数
    f ( z ) = 1 1 + e z 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 ) = 1 1 + e h ω ( x ) f_\omega(x)=\frac{1}{1+e^{h_\omega(x)}} fω(x)=1+ehω(x)1
    代价函数为
    J ( ω ) = { − l o g ( f ω ( x ) )    , i f    y = 1 − l o g ( 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=1log(1fω(x)),y=0
    这个代价函数还可以进一步简化为:
    J ( ω ) = − y l o g ( f ω ( x ) ) − ( 1 − y ) l o g ( 1 − f ω ( x ) ) J(\omega)=-ylog(f_\omega(x))-(1-y)log(1-f_\omega(x)) J(ω)=ylog(fω(x))(1y)log(1fω(x))
    我们的目标就是确定 ω \omega ω,使得 J ( ω ) J(\omega) J(ω)最小

使用梯度下降的方法:
对于训练集中的每个样本 { x i , y i } \{x^i,y^i\} {xi,yi},为了方便计算,将代价函数改写为:
J ( ω ) = − 1 m ∑ i = 1 m [ y i l o g ( f ω ( x i ) ) + ( 1 − y i ) l o g ( 1 − f ω ( x i ) ) ] 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=1m[yilog(fω(xi))+(1yi)log(1fω(xi))]
如果作以下denote,可以将其写成矢量化

X = [ x 1 T 1 x 2 T 1 ⋮ ⋮ x m T 1 ] X=\begin{bmatrix} x_1^T&1 \\ x_2^T&1 \\ \vdots&\vdots \\ x_m^T&1 \end{bmatrix} X=x1Tx2TxmT111
ω = ( ω ; b ) = [ ω 1 ω 2 . . . ω d b ] \omega=(\omega ;b)= \begin{bmatrix} \omega_1 \\ \omega_2\\ ... \\ \omega_d \\ b \end{bmatrix} ω=(ω;b)=ω1ω2...ωdb
y = [ y 1 y 2 ⋮ y m ] g ( x ) = 1 1 + e x y=\begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_m \end{bmatrix} g(x)=\frac{1}{1+e^x} y=y1y2ymg(x)=1+ex1

矢量化的写法为:(矢量化可以大大减少计算复杂度,在Python或者MATLAB等上可以实现)

h = g ( X ω ) J ( ω ) = 1 m ⋅ [ − y T l o g ( h ) − ( 1 − y ) T l o g ( 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)(1y)Tlog(1h)]
则其梯度为:
∂ J ( ω ) ∂ ω j = 1 m ∑ i = 1 m ( f ω ( x i ) − y i ) ⋅ x j i \frac{\partial J(\omega)}{\partial \omega_j}=\frac{1}{m} \sum_{i=1}^{m}(f_\omega(x^i)-y^i)\cdot x_j^i ωjJ(ω)=m1i=1m(fω(xi)yi)xji
梯度的矢量化写法为:
∂ J ( ω ) ∂ ω j = 1 m X T ( g ( X ω ) − y ) \frac{\partial J(\omega)}{\partial \omega_j}=\frac{1}{m}X^T(g(X\omega)-y) ωjJ(ω)=m1XT(g(Xω)y)
所以,逻辑回归的梯度下降算法为:

重复此过程直至收敛:{
ω j : = ω j − α m X T ( g ( X ω ) − y ) \omega_j:=\omega_j - \frac{\alpha}{m}X^T(g(X\omega)-y) ωj:=ωjmαXT(g(Xω)y)
}

其中, α \alpha α为学习率,这是矢量化的写法,如果用普通写法,就逐个参数同时更新,这里就不写了。

关于代价函数采用-log()的解释

出发点:假设样本的分类为1( y = 1 y=1 y=1),我们希望当预测的结果越接近1,损失越小,预测结果越接近0,损失越大。考虑到函数 y = l o g ( x ) y=log(x) y=log(x)当log的底数大于1的函数图像:

逻辑回归 logistic regression 算法原理及优化_第1张图片

将其倒转并取x值为(0,1]可得:

逻辑回归 logistic regression 算法原理及优化_第2张图片

这样的函数就很好的契合了我们的目标,即越接近0值越大,越接近1值越小。
当样本分类为0( y = 0 y=0 y=0)时也是一样的道理将x换成1-x即可。

你可能感兴趣的:(机器学习)