逻辑回归主要用来解决分类问题
一、线性回归
基本形式
f ( x − ) = w T x + b f(\bm x-)=\boldsymbol{w}^T\boldsymbol{x}+b f(x−)=wTx+b
输入属性只有一个的情况下,试图学得 f ( x i ) = w x i + b f(x_i)=wx_i+b f(xi)=wxi+b ,使得 f ( x i ) ≃ y i f(x_i)\simeq y_i f(xi)≃yi .
学习策略
均方误差最小化:
( w ∗ , b ∗ ) = arg min ( w , b ) ∑ i = 1 m ( f ( x i ) − y i ) 2 = arg min ( w , b ) ∑ i = 1 m ( y i − w x i − b ) 2 \begin{aligned} (w^*,b^*) &=\mathop{\arg\min}_{(w,b)} \sum_{i=1}^{m} {(f(x_i)-y_i)^2}\\ &=\mathop{\arg\min}_{(w,b)} \sum_{i=1}^{m} {(y_i-wx_i-b)^2} \end{aligned} (w∗,b∗)=argmin(w,b)i=1∑m(f(xi)−yi)2=argmin(w,b)i=1∑m(yi−wxi−b)2
求解
w
w
w 和
b
b
b 使
E
(
w
,
b
)
=
∑
i
=
1
m
(
y
i
−
w
x
i
−
b
)
2
E_{(w,b)}=\sum_{i=1}^{m}{(y_i-wx_i-b)^2}
E(w,b)=∑i=1m(yi−wxi−b)2 最小化的过程称为线性回归模型的最小二乘“参数估计”.
将
E
(
w
,
b
)
E_{(w,b)}
E(w,b) 分别对
w
w
w 和
b
b
b 求导,得
∂ E ( w , b ) ∂ w = 2 ( w ∑ i = 1 m x i 2 − ∑ i = 1 m ( y i − b ) x i ) \frac{ \partial{ E_{(w,b)} } }{ \partial w}=2\left( w\sum_{i=1}^m x_i^2 - \sum_{i=1}^{m}{(y_i-b)x_i}\right) ∂w∂E(w,b)=2(wi=1∑mxi2−i=1∑m(yi−b)xi)
∂ E ( w , b ) ∂ b = 2 ( m b − ∑ i = 1 m ( y i − w x i ) ) \frac{ \partial{ E_{(w,b)} } }{ \partial b}=2\left( mb-\sum_{i=1}^m {(y_i-wx_i)} \right) ∂b∂E(w,b)=2(mb−i=1∑m(yi−wxi))
由于
E
(
w
,
b
)
E_{(w,b)}
E(w,b) 是关于
w
w
w 和
b
b
b 的凸函数,当以上两个导数为0时,可以得到
w
w
w 和
b
b
b 的最优解(《机器学习》page.54)
多个属性的情形涉及矩阵运算,以后补充.
广义线性模型
考虑单调可谓函数 g ( ⋅ ) g(\cdot) g(⋅) ,则 y = g − 1 ( w T x + b ) y=g^{-1}(\boldsymbol w^T \boldsymbol x +b) y=g−1(wTx+b) 称为“广义线性模型”,
例如 g ( ⋅ ) = ln ( ⋅ ) g(\cdot) = \ln (\cdot) g(⋅)=ln(⋅) 时为对数线性回归 ln y = w T x + b \ln y=\boldsymbol w ^T \boldsymbol x + b lny=wTx+b
二、逻辑回归
若要用线性模型做分类任务,则需在上述广义线性模型中找到一个单调可微函数将分类任务的真实标记 y 与线性回归模型的预测值联系起来.
考虑二分类任务, y ∈ { 0 , 1 } y\in \left\{ 0,1 \right\} y∈{0,1} ,线性回归模型产生的预测值 z = w T x + b z=\boldsymbol w ^T \boldsymbol x + b z=wTx+b 是实值,我们需要将 z z z 转化为 0 / 1 0/1 0/1,最理想的是“单位阶跃函数” f ( n ) = { 0 , z < 0 0.5 , z = 0 1 , z > 0 f(n) = \begin{cases} 0, & z<0 \\ 0.5, & z=0 \\ 1, & z>0 \end{cases} f(n)=⎩⎪⎨⎪⎧0,0.5,1,z<0z=0z>0 .
引入(对数几率函数)
由于单位阶跃函数不连续,因此采用一个单调可微的一种
S
i
g
m
o
i
d
Sigmoid
Sigmoid 函数替代:
y
=
1
1
+
e
−
z
y= \frac{1}{1+e^{-z}}
y=1+e−z1
将对数几率函数作为 g − 1 ( ⋅ ) g^{-1} (\cdot) g−1(⋅) 带入广义线性模型 y = g − 1 ( w T x + b ) y=g^{-1}(\boldsymbol w^T \boldsymbol x +b) y=g−1(wTx+b) 得
y = 1 1 + e − ( w T x + b ) y= \frac{1}{1+ e^{ - (\boldsymbol w^T \boldsymbol x +b)}} y=1+e−(wTx+b)1
(可以理解为把线性回归模型的输出作为sigmoid函数的输入)
⇒ ln y 1 − y = w T x + b \Rightarrow \ln \frac{y}{1-y} = \boldsymbol w^T \boldsymbol x +b ⇒ln1−yy=wTx+b
(其中 y 1 − y \frac{y}{1-y} 1−yy 称为“几率”(odds),反映了 x \boldsymbol x x 作为正例的相对可能性)
为便于讨论,令
w
=
(
w
;
b
)
,
x
=
(
x
;
1
)
\bm w=(\bm w;b), \bm x=(\bm x;1)
w=(w;b),x=(x;1) 则
w
T
x
+
b
\bm{w}^T \bm x + b
wTx+b 可简写为
w
T
x
\bm{w}^T \bm x
wTx。
若将上述
y
y
y 视为类后验概率估计
p
(
y
=
1
∣
x
)
p(y=1|x)
p(y=1∣x) ,上式可以重写为
ln p ( y = 1 ∣ x ) p ( y = 0 ∣ x ) = w T x \ln \frac{p(y=1|x)}{p(y=0|x)} = \boldsymbol w^T \boldsymbol x lnp(y=0∣x)p(y=1∣x)=wTx
1. 公式推导
属性取值为 x x x 的时候 y = 1 y=1 y=1 和 y = 0 y=0 y=0 的条件概率分别为(可由以上引入得出)
p ( y = 1 ∣ x ) = e w T x 1 + e w T x p(y=1|x)= \frac{e^{\bm{w}^T \bm x }} {1+ e^{\bm{w}^T \bm x }} p(y=1∣x)=1+ewTxewTx
p ( y = 0 ∣ x ) = 1 1 + e w T x p(y=0|x)= \frac{1} {1+ e^{\bm{w}^T \bm x}} p(y=0∣x)=1+ewTx1
那么将两个式子合在一起,可以表示一个样本 ( x i , y i ) (x_i,y_i) (xi,yi) 出现的概率
p ( y i , x i ) = p ( y = 1 ∣ x ) y i ( 1 − p ( y = 1 ∣ x ) ) 1 − y i p(y_i,x_i) =p(y=1|x)^{y_i}(1-p(y=1|x))^{1-y_i} p(yi,xi)=p(y=1∣x)yi(1−p(y=1∣x))1−yi
那我们的整个样本集出现的概率,也就是n个独立的样本出现的似然函数为(因为每个样本都是独立的,所以n个样本出现的概率就是他们各自出现的概率相乘)
L ( w ) = ∏ i = 1 N p ( y i = 1 ∣ x i ) y i ( 1 − p ( y i = 1 ∣ x i ) ) 1 − y i L(\bm w) = \prod _{i=1}^ N p(y_i=1|x_i)^{y_i}(1-p(y_i=1|x_i))^{1-y_i} L(w)=i=1∏Np(yi=1∣xi)yi(1−p(yi=1∣xi))1−yi
最大似然法就是求模型中使得似然函数最大的系数取值 w ∗ w^* w∗ (即令每个样本属于其真实标签的概率越大越好)。
对数似然函数为
ln L ( w ) = ln ∏ i = 1 N p ( y i = 1 ∣ x i ) y i ( 1 − p ( y i = 1 ∣ x i ) ) 1 − y i = ∑ i = 1 N [ y i ln p ( y i = 1 ∣ x i ) + ( 1 − y i ) ln ( 1 − p ( y i = 1 ∣ x i ) ) ] = ∑ i = 1 N [ y i ln p ( y i = 1 ∣ x i ) 1 − p ( y i = 1 ∣ x i ) + ln ( 1 − p ( y i = 1 ∣ x i ) ) ] = ∑ i = 1 N [ y i ( w T x i ) + ln ( 1 − e w T x i 1 + e w T x i ) ] = ∑ i = 1 N [ y i ( w T x i ) − ln ( 1 + e w T x i ) ] \begin{aligned} \ln L(\bm w) & = \ln\prod _{i=1}^ N p(y_i=1|x_i)^{y_i}(1-p(y_i=1|x_i))^{1-y_i}\\ &= \sum _{i=1} ^ N [y_i \ln p(y_i=1|x_i) + (1-y_i)\ln(1- p(y_i=1|x_i))]\\ &= \sum _{i=1} ^ N [y_i \ln \frac { p(y_i=1|x_i)}{1- p(y_i=1|x_i)} +\ln (1- p(y_i=1|x_i))]\\ &= \sum _{i=1} ^ N [y_i (\bm{w}^T \bm x_i) + \ln(1-\frac{e^{\bm{w}^T \bm x_i}} {1+ e^{\bm{w}^T \bm x_i}})]\\ &= \sum _{i=1} ^ N [y_i (\bm{w}^T \bm x_i) - \ln( {1+ e^{\bm{w}^T \bm x_i}})] \end{aligned} lnL(w)=lni=1∏Np(yi=1∣xi)yi(1−p(yi=1∣xi))1−yi=i=1∑N[yilnp(yi=1∣xi)+(1−yi)ln(1−p(yi=1∣xi))]=i=1∑N[yiln1−p(yi=1∣xi)p(yi=1∣xi)+ln(1−p(yi=1∣xi))]=i=1∑N[yi(wTxi)+ln(1−1+ewTxiewTxi)]=i=1∑N[yi(wTxi)−ln(1+ewTxi)]
对数似然函数与损失函数的关系: 实际上,对数似然损失在单个数据点上的定义为:
− y i ln p ( y i ∣ x i ) − ( 1 − y i ) ln [ 1 − p ( y i ∣ x i ) ] −y_i\ln p(y_i| \bm x_i)−(1−y_i)\ln [1−p(y_i|\bm x_i)] −yilnp(yi∣xi)−(1−yi)ln[1−p(yi∣xi)]
如果取整个数据集上的平均对数似然损失,可以得到:
J ( w ) = − 1 N ln L ( w ) J(\bm w)=−\frac {1} {N} \ln L(\bm w) J(w)=−N1lnL(w)
即在逻辑回归模型中,我们最大化似然函数和最小化对数似然损失函数实际上是等价的。
代价函数有了,下一步要做的就是优化求解了。先尝试对上面的代价函数求导,发现导数为 0 0 0 的时候无法解析求解。因此只能借助迭代来求解 ln L ( w ) \ln L(\bm w) lnL(w) 求极大值(也可认为是求 J ( w ) J(\bm w) J(w) 的最小值),得到 w \bm w w 的估计值。逻辑回归学习中通常采用的方法是梯度下降法 和 牛顿法。
ln L ( w ) \ln L(\bm w) lnL(w) 对 w \bm w w 求导得
∂ ln L ( w ) ∂ w = ∑ i = 1 N ( y i x i − e w T x i 1 + e w T x i x i ) = ∑ i = 1 N ( y i − p ( y = 1 ∣ x ) ) x i \frac{ \partial{ \ln L(\bm w) } }{ \partial \bm w} = \sum _{i=1} ^ N \left (y_i \bm x_i - \frac{e^{\bm{w}^T \bm x_i}} {1+ e^{\bm{w}^T \bm x_i}} \bm x_i \right ) = \sum _{i=1} ^ N \left (y_i - p(y=1|x) \right ) \bm x_i ∂w∂lnL(w)=i=1∑N(yixi−1+ewTxiewTxixi)=i=1∑N(yi−p(y=1∣x))xi
无法求解析解
2. 梯度下降法(Gradient Descent)求解
算法(梯度下降法求解逻辑回归)
输入: 目标函数:
J
(
w
)
J(w)
J(w) (对数似然损失函数),梯度函数:
g
(
w
)
=
∇
J
(
w
)
g(w)=∇J(w)
g(w)=∇J(w), 计算精度
ϵ
\epsilon
ϵ
输出:
J
(
w
)
J(w)
J(w) 的极小值点
w
∗
w∗
w∗
过程:
- (1) 取初始值 w 0 ∈ R n w_0 \in \bm R^\bm n w0∈Rn, 令 k = 0 k=0 k=0
- (2) 计算 J ( w k ) J(w_k) J(wk)
J ( w k ) = − 1 N ln L ( w k ) J(\bm w_k)=−\frac {1} {N} \ln L(\bm w_k) J(wk)=−N1lnL(wk)
⇒ − ln L ( w k ) = ∑ i = 1 N [ y i ( w k T x i ) − ln ( 1 + e w k T x i ) ] ⇒−\ln L(\bm w_k)= \sum _{i=1} ^ N [y_i (\bm {w}_k^T \bm x_i) - \ln( {1+ e^{\bm{w}_k^T \bm x_i}})] ⇒−lnL(wk)=i=1∑N[yi(wkTxi)−ln(1+ewkTxi)]
- (3) 计算梯度 g k = g ( w k ) = ∇ J ( w ) g_k=g(w_k)=∇J(w) gk=g(wk)=∇J(w)
g ( w k ) = ∑ i = 1 N ( y i x i − e w k T x i 1 + e w k T x i x i ) g(w_k)= \sum _{i=1} ^ N \left (y_i \bm x_i - \frac{e^{\bm{w}_k^T \bm x_i}} {1+ e^{\bm{w}_k^T \bm x_i}} \bm x_i \right ) g(wk)=i=1∑N(yixi−1+ewkTxiewkTxixi)
= ∑ i = 1 N ( y i − p ( y = 1 ∣ x ) ) x i =\sum _{i=1} ^ N \left (y_i - p(y=1|x) \right )\bm x_i =i=1∑N(yi−p(y=1∣x))xi
若 ∣ ∣ g k ∣ ∣ < ϵ ∣ ∣ g k ∣ ∣ < ϵ ||gk||<ϵ||gk||<ϵ ∣∣gk∣∣<ϵ∣∣gk∣∣<ϵ ,停止迭代,令
w ∗ = w k w^∗=w_k w∗=wk
否则,令 p k = − g ( w k ) p_k=−g(w_k) pk=−g(wk),求 λ k λ_k λkλ,使得
J ( w k + λ k p k ) = min ( J ( w k + λ p k ) ) J(w_k+λ_kp_k)=\min(J(w_k+λp_k)) J(wk+λkpk)=min(J(wk+λpk))
- (4) 令
w
k
+
1
=
w
k
+
λ
k
p
k
w_{k+1}=w_k+λ_kp_k
wk+1=wk+λkpk,计算
J
(
w
k
+
1
)
J(wk+1)
J(wk+1)
当 ∣ ∣ J ( w k + 1 ) − J ( w k ) ∣ ∣ < ϵ ||J(w_{k+1})−J(w_k)||<ϵ ∣∣J(wk+1)−J(wk)∣∣<ϵ 或 ∣ ∣ w k + 1 − w k ∣ ∣ < ϵ ||w_{k+1}−w_k||<ϵ ∣∣wk+1−wk∣∣<ϵ,停止迭代,令
w ∗ = w k + 1 w^∗=w_{k+1} w∗=wk+1
- (5) 否则,令 k = k + 1 k=k+1 k=k+1,转(3).
3. 正则化
当模型的参数过多时,很容易遇到过拟合的问题。而正则化是结构风险最小化的一种实现方式,通过在经验风险上加一个正则化项,来惩罚过大的参数来防止过拟合。
正则化是符合奥卡姆剃刀(Occam’s razor)原理的:在所有可能选择的模型中,能够很好地解释已知数据并且十分简单的才是最好的模型。
详见参考文献[2]中“逻辑回归的正则化”
参考文献
[1]. 李航,《统计学习方法》
[2]. Logistic Regression 的前世今生(理论篇)
[3]. 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)
[4]. 对数损失函数是如何度量损失的?