原文链接
这里主要介绍Logistic回归模型及正则化。
分类问题
在分类问题中,预测的值是离散的。例如要实现一个垃圾邮件分类器,那么该分类器最后输出的结果应该只有两种–是垃圾邮件或者不是,而不像前面学习过的回归问题那样,输出的结果是与输入一一对应的连续值。
分类问题中,最简单的是二分类(binary classification)问题,其分类结果只有两种,一般选其中一类作为正类(positive class),并使其标记 y = 1 y = 1 y=1,另一类则作为反类(negative class),使其标记 y = 0 y = 0 y=0,因而 y ∈ { 0 , 1 } y \in \lbrace0, 1\rbrace y∈{0,1}。除此之外还有**多分类(multi-classfication)**问题,可以将它转化成多个二分类问题后用二分类问题的解决方法进行解决。
对分类问题,可建立对应的Logistic回归模型来解决。由于历史原因,Logistic回归虽然称为“回归”,却是一种分类问题的学习算法,要注意将其区分。
Logistic回归
假设函数
分类与前面讲过的回归只是在输出的值上有所区别,考虑继续用线性回归算法来解决分类问题。
如上图中的肿瘤分类器,由训练样本拟合相应的线性回归模型后,可以在中间设定一个阈值,使预测结果高于该阈值的输出为正类,低于则输出为反类,以此起到分类的效果。然而该模型很容易受到一些特殊情况的影响,而产生图中的蓝线所示的偏差较大的结果,此外线性回归模型的输出值不一定都在 0 0 0到 1 1 1之间,与分类问题的要求不符。
延用线性回归中的假设函数 h θ ( x ) = θ T x h_\theta(x) = \theta^Tx hθ(x)=θTx,且采用sigmoid函数将其值约束在 0 0 0到 1 1 1的范围之内。Sigmoid函数又称Logistic函数,其表达式及图像如下: g ( z ) = 1 1 + e − z g(z) = \frac{1}{1 + e^{-z}} g(z)=1+e−z1
由sigmoid函数的图像可值,其值一直保持在
0
0
0到
1
1
1之间,由此有了Logistic回归的假设函数:
h
θ
(
x
)
=
g
(
θ
T
x
)
=
1
1
+
e
−
θ
T
x
h_\theta(x) = g(\theta^Tx) = \frac{1}{1 + e^{-\theta^Tx}}
hθ(x)=g(θTx)=1+e−θTx1
h θ ( x ) h_\theta(x) hθ(x)的值在此被赋予了新的含义,它表示的是给定参数为 θ \theta θ、输入为 x x x的条件下标签 y = 1 y=1 y=1的概率,用数学表达式表示即为: h θ ( x ) = P ( y = 1 ∣ x ; θ ) h_\theta(x) = P(y=1|x;\theta) hθ(x)=P(y=1∣x;θ)
例如对训练好的肿瘤分类器输入肿瘤的大小 x x x后,输出的 h θ ( x ) = 0.7 h_\theta(x) = 0.7 hθ(x)=0.7,就表示分类器预测这种大小的肿瘤有 70 % 70\% 70%的概率是恶性的(即 y = 1 y = 1 y=1)。
决策边界
有了适用于分类的成本函数 h θ ( x ) h_\theta(x) hθ(x),还需要设定一个阈值作为分类的标准。注意到,sigmoid函数有以下性质:
- z ≥ 0 z \ge 0 z≥0时, 0.5 ≤ g ( z ) < 1 0.5 \le g(z) \lt 1 0.5≤g(z)<1
- z < 0 z \lt 0 z<0时, 0 < g ( z ) < 0.5 0 \lt g(z) \lt 0.5 0<g(z)<0.5
进而有:
- θ T x ≥ 0 \theta^Tx \ge 0 θTx≥0时, 0.5 ≤ h θ ( x ) < 1 0.5 \le h_\theta(x) \lt 1 0.5≤hθ(x)<1
- θ T x < 0 \theta^Tx \lt 0 θTx<0时, 0 < h θ ( x ) < 0.5 0 \lt h_\theta(x) \lt 0.5 0<hθ(x)<0.5
因此可将 0.5 0.5 0.5作为阈值,即使得: y = { 1 , h θ ( x ) ≥ 0.5 0 , h θ ( x ) < 0.5 y = \begin{cases} 1, & h_\theta(x) \ge 0.5 \\\ 0, & h_\theta(x) \lt 0.5 \end{cases} y={1, 0,hθ(x)≥0.5hθ(x)<0.5
例如,由上图左边的训练样本,得到了右边成本函数中的各参数值,那么当
0.5
≤
h
θ
(
x
)
0.5 \le h_\theta(x)
0.5≤hθ(x)时,有:
θ
T
x
=
−
3
+
x
1
+
x
2
≥
0
\theta^Tx = -3 + x_1 + x_2 \ge 0
θTx=−3+x1+x2≥0
即:
x
1
+
x
2
≥
3
x_1 + x_2 \ge 3
x1+x2≥3
该不等式取的是分界线以上的部分,也就是正类所在的区域。同理 h θ ( x ) < 0.5 h_\theta(x) \lt 0.5 hθ(x)<0.5时,将取图中的反类。而图中的那条分界线,称为两类的决策边界(decision boundary),其位置由参数 θ \theta θ决定。
此外,sigmoid函数还可以用于非线性函数而得到复杂的分类问题的决策边界:
成本函数
Logistic回归中假设函数
h
θ
(
x
)
h_\theta(x)
hθ(x)为非线性函数,如继续使用均方误差作为成本函数,得到的将是非凸(non-convex)函数,难以找到最优解。因此在Logistic回归中,我们另设成本函数如下:
J
(
θ
)
=
1
m
∑
i
=
1
m
C
o
s
t
(
h
θ
(
x
(
i
)
)
,
y
)
J(\theta) = \frac{1}{m} \sum_{i=1}^m Cost(h_\theta(x^{(i)}), y)
J(θ)=m1i=1∑mCost(hθ(x(i)),y)
其中:
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
{
−
log
(
h
θ
(
x
)
)
,
y
=
1
−
log
(
1
−
h
θ
(
x
)
)
,
y
=
0
Cost(h_\theta(x), y) = \begin{cases} - \log(h_\theta(x)),& y = 1 \\\ - \log(1-h_\theta(x)), & y = 0 \end{cases}
Cost(hθ(x),y)={−log(hθ(x)), −log(1−hθ(x)),y=1y=0
当
y
=
1
y = 1
y=1时,该函数的图像为:
此时 h θ ( x ) = 1 h_\theta(x)=1 hθ(x)=1时成本为 0 0 0,且 h θ ( x ) → 0 h_\theta(x) \to 0 hθ(x)→0时,成本趋近 ∞ \infty ∞。
反之,当
y
=
0
y = 0
y=0时函数的图像为:
此时 h θ ( x ) = 0 h_\theta(x)=0 hθ(x)=0时成本为 0 0 0,且 h θ ( x ) → 1 h_\theta(x) \to 1 hθ(x)→1时,成本趋近 ∞ \infty ∞。
以上成本函数,可以用一个式子更为简洁地表示:
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
−
y
log
h
θ
(
x
(
i
)
)
−
(
1
−
y
)
log
(
1
−
h
θ
(
x
(
i
)
)
)
Cost(h_\theta(x), y)=-y\log h_\theta(x^{(i)}) - (1-y)\log(1 - h_\theta(x^{(i)}))
Cost(hθ(x),y)=−yloghθ(x(i))−(1−y)log(1−hθ(x(i)))
该式与原式完全相等,它又被称为**交叉熵(cross entropy)**损失函数。
由此,分类问题中常用的成本函数 J ( θ ) J(\theta) J(θ)的表达式为: J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] J(\theta) = -\frac{1}{m} \sum_{i=1}^m [y^{(i)} \log h_\theta(x^{(i)}) + (1 - y^{(i)})\log(1 - h_\theta(x^{(i)}))] J(θ)=−m1i=1∑m[y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]
该函数也可以通过概率统计中常用的最大似然估计法推导出来,具体过程见深度学习(1):Logistic回归。
梯度下降
有了成本函数后,依然采用梯度下降法来将其最小化,以学习Logistic回归模型中的参数值。
下面对该成本函数的导数进行推导:
为方便计算,成本函数中的 log \log log默认以 exp \exp exp为底。展开其中的几项,有: log h θ ( x ( i ) ) = log 1 1 + e − θ T x ( i ) = − log ( 1 + e − θ T x ( i ) ) \log h_\theta(x^{(i)}) = \log \frac{1}{1 + e^{-\theta^Tx^{(i)}}} = -\log(1 + e^{-\theta^Tx^{(i)}}) loghθ(x(i))=log1+e−θTx(i)1=−log(1+e−θTx(i)) log ( 1 − h θ ( x ( i ) ) ) = log e − θ T x ( i ) 1 + e − θ T x ( i ) = log e − θ T x ( i ) − log ( 1 + e − θ T x ( i ) ) \log(1 - h_\theta(x^{(i)})) = \log \frac{e^{-\theta^Tx^{(i)}}}{1 + e^{-\theta^Tx^{(i)}}} = \log e^{-\theta^Tx^{(i)}} - \log (1 + e^{-\theta^Tx^{(i)}}) log(1−hθ(x(i)))=log1+e−θTx(i)e−θTx(i)=loge−θTx(i)−log(1+e−θTx(i)) = − θ T x ( i ) − log ( 1 + e − θ T x ( i ) ) = -\theta^Tx^{(i)} - \log (1 + e^{-\theta^Tx^{(i)}}) =−θTx(i)−log(1+e−θTx(i))
由此: J ( θ ) = − 1 m ∑ i = 1 m [ − y ( i ) log ( 1 + e − θ T x ( i ) ) − ( 1 − y ( i ) ) ( θ T x ( i ) + log ( 1 + e − θ T x ( i ) ) ) ] J(\theta) = -\frac{1}{m} \sum_{i=1}^m [-y^{(i)} \log(1 + e^{-\theta^Tx^{(i)}}) - (1 - y^{(i)})(\theta^Tx^{(i)} + \log (1 + e^{-\theta^Tx^{(i)}}))] J(θ)=−m1i=1∑m[−y(i)log(1+e−θTx(i))−(1−y(i))(θTx(i)+log(1+e−θTx(i)))] = − 1 m ∑ i = 1 m [ y ( i ) θ T x ( i ) − θ T x ( i ) − log ( 1 + e − θ T x ( i ) ) ] = -\frac{1}{m}\sum_{i=1}^m [y^{(i)}\theta^Tx^{(i)} - \theta^Tx^{(i)} - \log (1 + e^{-\theta^Tx^{(i)}})] =−m1i=1∑m[y(i)θTx(i)−θTx(i)−log(1+e−θTx(i))] = − 1 m ∑ i = 1 m [ y ( i ) θ T x ( i ) − ( log e θ T x ( i ) + log ( 1 + e − θ T x ( i ) ) ) ] = -\frac{1}{m}\sum_{i=1}^m [y^{(i)}\theta^Tx^{(i)} - (\log e^{\theta^Tx^{(i)}} + \log (1 + e^{-\theta^Tx^{(i)}}))] =−m1i=1∑m[y(i)θTx(i)−(logeθTx(i)+log(1+e−θTx(i)))] = 1 m ∑ i = 1 m [ log ( 1 + e θ T x ( i ) ) − y ( i ) θ T x ( i ) ] = \frac{1}{m}\sum_{i=1}^m [\log (1 + e^{\theta^Tx^{(i)}}) - y^{(i)}\theta^Tx^{(i)}] =m1i=1∑m[log(1+eθTx(i))−y(i)θTx(i)]
对其求导,有: ∂ ∂ θ j J ( θ ) = 1 m ∑ i = 1 m [ ∂ ∂ θ j log ( 1 + e θ T x ( i ) ) − ∂ ∂ θ j ( y ( i ) θ T x ( i ) ) ] \frac{\partial}{\partial \theta_j} J(\theta) = \frac{1}{m}\sum_{i=1}^m [\frac{\partial}{\partial \theta_j} \log (1 + e^{\theta^Tx^{(i)}}) - \frac{\partial}{\partial \theta_j} (y^{(i)}\theta^Tx^{(i)})] ∂θj∂J(θ)=m1i=1∑m[∂θj∂log(1+eθTx(i))−∂θj∂(y(i)θTx(i))] = 1 m ∑ i = 1 m x j ( i ) e θ T x ( i ) 1 + e θ T x ( i ) − y ( i ) x ( i ) _ j = \frac{1}{m}\sum_{i=1}^m \frac{x^{(i)}_je^{\theta^Tx^{(i)}}}{1 + e^{\theta^Tx^{(i)}}} - y^{(i)}x^{(i)}\_j =m1i=1∑m1+eθTx(i)xj(i)eθTx(i)−y(i)x(i)_j = 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) = \frac{1}{m}\sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x^{(i)}_j =m1i=1∑m(hθ(x(i))−y(i))xj(i)
从而梯度下降更新参数值的过程为: Repeat { θ j : = θ j − α m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) } \begin{aligned} & \text{Repeat} \ \lbrace \\\ & \ \ \ \ \theta_j := \theta_j - \frac{\alpha}{m} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)}) x_j^{(i)} \\\ & \rbrace \end{aligned} Repeat { θj:=θj−mαi=1∑m(hθ(x(i))−y(i))xj(i)}
除了梯度下降以外,还存在一些常用的较复杂的优化算法,如共轭梯度法(onjugate gradient)、BFGS、L-BFGS等,它们都可以用来代替梯度下降法进行参数学习。
预防过拟合
模型评估
在机器学习中,训练出来的模型经常存在下面几种情况:
对上面的回归问题,最为理想的情况是中间所示的模型,另外两种情况则分别称为:
- 欠拟合(underfitting):模型与样本间存在较大的偏差(bias),如上面的左图
- 过拟合(overfitting):模型与样本间存在较大的方差(variance),如上面的右图
用Logistic回归解决分类问题时,这些情况也是存在的:
其中,过拟合将导致模型的**泛化(generalization)**能力不够强,而它很容易在训练样本包含的特征种类过多而训练样本的数量却相对较少时发生,因此常用来预防过拟合的方法有:
- 通过人工筛选或模型选择算法丢弃部分训练样本的特征
- **正则化(regularization)**成本函数
下面重点讲解其中的第二种方法。
正则化
上面的右图所示的回归模型明显存在过拟合,要解决该问题,最简单的做法就是想办法使模型中的参数 θ 3 \theta_3 θ3、 θ 4 \theta_4 θ4尽可能地接近于 0 0 0,而使其近似地等于左图中最为理想的模型。
进一步地,我们知道,参数 θ \theta θ的值都是通过最小化成本函数而求得的。那么要达到上述目的,可以考虑将这几个参数“捆绑”在成本函数上: J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + 1000 θ 3 2 + 1000 θ 4 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 + 1000\theta_3^2 + 1000\theta_4^2 J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2+1000θ32+1000θ42
这样,在最小化成本函数时,参数 θ 3 \theta_3 θ3、 θ 4 \theta_4 θ4将受到“惩罚”而一同被最小化,以此达到防止过拟合的目的。所谓的正则化过程也与此类似。
建立机器学习模型时,学习到的参数值较小,就意味着假设函数会是一个相对“简单”的函数,过拟合也更不容易发生。正则化的思想即在于此,其具体做法是在成本函数后加入正则化项,对线性回归模型为: J ( θ ) = 1 2 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) 2 + λ 2 m ∑ i = 1 n θ j 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})^2 + \frac{\lambda}{2m} \sum_{i=1}^n \theta_j^2 J(θ)=2m1i=1∑m(hθ(x(i))−y(i))2+2mλi=1∑nθj2
对Logistic回归模型则为: J ( θ ) = − 1 m ∑ i = 1 m [ y ( i ) log h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ i = 1 n θ j 2 J(\theta) = -\frac{1}{m} \sum_{i=1}^m [y^{(i)} \log h_\theta(x^{(i)}) + (1 - y^{(i)})\log(1 - h_\theta(x^{(i)}))] + \frac{\lambda}{2m} \sum_{i=1}^n \theta_j^2 J(θ)=−m1i=1∑m[y(i)loghθ(x(i))+(1−y(i))log(1−hθ(x(i)))]+2mλi=1∑nθj2
其中 λ \lambda λ为正则化参数,需选取适当的值,其值过大容易导致欠拟合; ∑ i = 1 n θ j 2 \sum_{i=1}^n \theta_j^2 ∑i=1nθj2是最常用的正则化项,它被称为L2范数,另有L0、L1范数。正则化保留了所有的特征,而通过使所有参数值最小化来防止过拟合。
对线性回归或Logistic回归模型,用梯度下降法最小化正则化后的成本函数的过程均为: Repeat { θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x 0 ( i ) θ j : = θ j − α [ ( 1 m ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j ( i ) ) + λ m θ j ] j ∈ { 1 , 2... n } } \begin{aligned} & \text{Repeat}\ \lbrace \\\ & \ \ \ \ \theta_0 := \theta_0 - \alpha\ \frac{1}{m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x_0^{(i)} \\\ & \ \ \ \ \theta_j := \theta_j - \alpha\ \left[ \left( \frac{1}{m}\ \sum_{i=1}^m (h_\theta(x^{(i)}) - y^{(i)})x_j^{(i)} \right) + \frac{\lambda}{m}\theta_j \right] &\ \ \ \ \ \ \ \ \ \ j \in \lbrace 1,2...n\rbrace \\\ & \rbrace \end{aligned} Repeat { θ0:=θ0−α m1 i=1∑m(hθ(x(i))−y(i))x0(i) θj:=θj−α [(m1 i=1∑m(hθ(x(i))−y(i))xj(i))+mλθj]} j∈{1,2...n}
由于 θ 0 \theta_0 θ0的值恒为 1 1 1,不需要将它正则化,所以迭代过程种分成了两步。
另外,采用正规方程直接求解线性回归模型中的参数
θ
\theta
θ时,进行正规化的表达式为:
θ
=
(
X
T
X
+
λ
⋅
L
)
−
1
X
T
y
\theta = \left( X^TX + \lambda \cdot L \right)^{-1} X^Ty
θ=(XTX+λ⋅L)−1XTy
其中
L
L
L是个大小为
(
n
+
1
)
×
(
n
+
1
)
(n+1)\times(n+1)
(n+1)×(n+1)的矩阵:
L
=
[
0
1
1
⋱
1
]
L = \begin{bmatrix} 0 & & & & \\\ & 1 & & & \\\ & & 1 & & \\\ & & & \ddots & \\\ & & & & 1 \\\ \end{bmatrix}
L=⎣⎢⎢⎢⎢⎢⎢⎡0 11⋱1⎦⎥⎥⎥⎥⎥⎥⎤
前面提到过正规方程种 X T X X^TX XTX为奇异矩阵或非方阵时,它将不存在逆矩阵。对正规方程进行正规化后,就不会出现这种情况, X T X + λ ⋅ L X^TX + \lambda \cdot L XTX+λ⋅L将一定是可逆的。
编程作业
见如下github链接,程序仅供参考:
参考资料
- Andrew Ng-Machine Learning-Coursera
- 吴恩达-机器学习-网易云课堂
- 交叉熵代价函数(损失函数)及其求导推导-优快云
- 牛顿法 拟牛顿法DFP BFGS L-BFGS的理解-优快云
- 机器学习中常常提到的正则化到底是什么意思?-知乎
- 机器学习中的范数规则化-优快云
注:本文涉及的图片及资料均整理翻译自Andrew Ng的Machine Learning课程及上述书籍、博客资料,版权归各作者所有。翻译整理水平有限,如有不妥的地方欢迎指出。
更新历史:
- 2019.03.24 完成初稿