概述
逻辑回归也叫对数几率回归
“逻辑回归”虽然叫回归,但是却是一种分类方法,跟线性回归(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=1−log(1−fω(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))−(1−y)log(1−fω(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=1∑m[yilog(fω(xi))+(1−yi)log(1−fω(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=⎣⎢⎢⎢⎡x1Tx2T⋮xmT11⋮1⎦⎥⎥⎥⎤
ω
=
(
ω
;
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=⎣⎢⎢⎢⎡y1y2⋮ym⎦⎥⎥⎥⎤g(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)−(1−y)Tlog(1−h)]
则其梯度为:
∂
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
∂ωj∂J(ω)=m1i=1∑m(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)
∂ωj∂J(ω)=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:=ωj−mα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的函数图像:
将其倒转并取x值为(0,1]可得:
这样的函数就很好的契合了我们的目标,即越接近0值越大,越接近1值越小。
当样本分类为0(
y
=
0
y=0
y=0)时也是一样的道理将x换成1-x即可。