回归与分类
在机器学习中,模型根据预测结果的不同分为回归与分类。如果我们希望模型预测一个或者多个连续值,这类问题被称为回归问题,像常见的未来股票价格的估计、未来温度估计等都是回归问题。还有一类呢是分类问题,模型的预测结果是一个离散值,也就是只有固定的种类的结果,常见的有垃圾邮件识别等。
让我们先回到线性回归,线性回归中 y = W X + b y = WX + b y=WX+b。我们可以通过 W W W 和 b b b 求出 X X X 对应的 y y y,这里的 y y y 是一个连续值,是一个回归模型。但如果我们希望用这个模型来做分类呢,应该怎么办呢?很容易想到,我们可以人为地设置阈值:若 y > 0 y > 0 y>0 分类是 1,若 y < 0 y < 0 y<0 分类是 0。从表面上来看,这当然是可以的,但实际上这样操作会出现很多问题。
- 如下图想(左),若是样本比较标准,使用线性回归完全可以起到分类的作用;但是实际场景中,总会有一些不按套路出牌的点,如下图(右),此时再设置阈值的话就没有效果了。
- 另外,如果我们简单地设计一个阈值来做判断,那么会导致最后的 y y y 是一个分段函数,而分段函数不连续,使得我们没有办法对它求梯度。
逻辑回归
当然,实际应用场景中,将会比上例更加复杂,线性回归 + 阈值 的方式已经不足以完成一个鲁棒性很好的分类器,于是,就有了 逻辑回归,函数表达式为
S
(
t
)
=
1
1
+
e
−
t
S(t) = \frac{1}{1 + e^{-t}}
S(t)=1+e−t1
图像为
如下所示,左图是一个线性的决策边界,右图是非线性的决策边界
函数推导
线性边界的函数形式为:
θ
0
+
θ
1
x
1
+
.
.
.
+
θ
n
x
n
=
∑
i
=
1
n
θ
i
x
i
=
θ
T
x
\theta_0 + \theta_1x_1 + ... + \theta_n x_n = \sum_{i=1}^{n}\theta_ix_i = \theta^Tx
θ0+θ1x1+...+θnxn=i=1∑nθixi=θTx
预测函数为
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)的值有特殊的含义,它表示结果取1的概率,对于输入x的分类结果为1或0的概率分别为
C
o
s
t
(
h
θ
(
x
)
,
y
)
=
{
−
l
o
g
(
h
θ
(
x
)
)
y
=
1
−
l
o
g
(
1
−
h
θ
(
x
)
)
y
=
0
Cost(h_\theta(x), y) = \begin{cases} -log(h_\theta(x)) \quad y = 1\\ -log(1 - h_\theta(x)) \quad y = 0 \end{cases}
Cost(hθ(x),y)={−log(hθ(x))y=1−log(1−hθ(x))y=0
综合上式
P
(
y
∣
x
;
θ
)
=
(
h
θ
(
x
)
)
y
(
1
−
h
θ
(
x
)
)
1
−
y
P(y | x; \theta) = (h_\theta(x))^y(1 - h_\theta(x))^{1 - y}
P(y∣x;θ)=(hθ(x))y(1−hθ(x))1−y
取似然函数
L
(
θ
)
=
∏
i
=
1
n
P
(
y
i
∣
x
i
,
θ
)
=
∏
i
=
1
n
(
h
θ
(
x
i
)
)
y
i
(
1
−
h
θ
(
x
i
)
)
1
−
y
i
L(\theta) = \prod_{i=1}^{n}P(y_i | x_i, \theta) = \prod_{i=1}^{n}(h_\theta(x_i))^{y_i} (1 - h_\theta(x_i))^{1 - y_i}
L(θ)=i=1∏nP(yi∣xi,θ)=i=1∏n(hθ(xi))yi(1−hθ(xi))1−yi
取对数似然
l
(
θ
)
=
l
o
g
L
(
θ
)
=
∑
i
=
1
n
y
i
⋅
l
o
g
h
θ
(
x
i
)
+
(
1
−
y
i
)
⋅
l
o
g
(
1
−
h
θ
(
x
i
)
)
l(\theta) = logL(\theta) = \sum_{i=1}^{n} y_i · logh_\theta(x_i) + (1 - y_i)· log(1 - h_\theta(x_i))
l(θ)=logL(θ)=i=1∑nyi⋅loghθ(xi)+(1−yi)⋅log(1−hθ(xi))
最大似然估计就是求函数取最大值时的 θ,但在函数最优化的时候我们更习惯让一个函数越小越好,所以在前边乘一个负的系数
−
1
m
-\frac{1}{m}
−m1。此时,函数取最小值时的 θ 即为最佳参数。
J
(
θ
)
=
1
m
∑
i
=
1
n
C
o
s
t
(
h
θ
(
x
i
)
,
y
i
)
=
−
1
m
[
∑
i
=
1
n
y
i
⋅
l
o
g
h
θ
(
x
i
)
+
(
1
−
y
i
)
⋅
l
o
g
(
1
−
h
θ
(
x
i
)
)
]
J(\theta) = \frac{1}{m} \sum_{i=1}^{n}Cost(h_\theta(x_i), y_i) = -\frac{1}{m} \left[ \sum_{i=1}^{n} y_i · logh_\theta(x_i) + (1 - y_i)· log(1 - h_\theta(x_i)) \right]
J(θ)=m1i=1∑nCost(hθ(xi),yi)=−m1[i=1∑nyi⋅loghθ(xi)+(1−yi)⋅log(1−hθ(xi))]
使用梯度下降法求最小值
δ
δ
θ
j
J
(
θ
)
=
−
1
m
∑
i
=
1
n
(
y
i
1
h
θ
(
x
i
)
δ
δ
θ
j
h
θ
(
x
i
)
−
(
1
−
y
i
)
1
1
−
h
θ
(
x
i
)
δ
δ
θ
j
h
θ
(
x
i
)
)
=
−
1
m
∑
i
=
1
n
(
y
i
1
g
(
θ
T
x
i
)
−
(
1
−
y
i
)
1
1
−
g
(
θ
T
x
i
)
)
δ
δ
θ
j
g
(
θ
T
x
i
)
=
−
1
m
∑
i
=
1
n
(
y
i
1
g
(
θ
T
x
i
)
−
(
1
−
y
i
)
1
1
−
g
(
θ
T
x
i
)
)
g
(
θ
T
x
i
)
(
1
−
g
(
θ
T
x
i
)
)
δ
δ
θ
j
θ
T
x
i
=
−
1
m
∑
i
=
1
n
(
y
i
(
1
−
g
(
θ
T
x
i
)
)
−
(
1
−
y
i
)
g
(
θ
T
x
i
)
)
x
i
j
=
−
1
m
∑
i
=
1
n
(
y
i
−
g
(
θ
T
x
i
)
)
x
i
j
=
1
m
∑
i
=
1
n
(
h
θ
(
x
i
)
−
y
i
)
x
i
j
\begin{aligned} \frac{\delta}{\delta_{\theta_j}}J(\theta) &= -\frac{1}{m} \sum_{i=1}^{n} \left (y_i \frac{1}{h_\theta(x_i)} \frac{\delta}{\delta_{\theta_j}} h_\theta(x_i) - (1 - y_i) \frac{1}{1 - h_\theta(x_i)} \frac{\delta}{\delta_{\theta_j}} h_\theta(x_i) \right) \\ &= -\frac{1}{m} \sum_{i=1}^{n} \left (y_i \frac{1}{g(\theta^Tx_i)} - (1 - y_i) \frac{1}{1 - g(\theta^Tx_i)} \right) \frac{\delta}{\delta_{\theta_j}} g(\theta^Tx_i) \\ &= -\frac{1}{m} \sum_{i=1}^{n} \left (y_i \frac{1}{g(\theta^Tx_i)} - (1 - y_i) \frac{1}{1 - g(\theta^Tx_i)} \right) g(\theta^Tx_i) (1 - g(\theta^Tx_i)) \frac{\delta}{\delta_{\theta_j}} \theta^Tx_i \\ &= -\frac{1}{m} \sum_{i=1}^{n} \left (y_i (1 - g(\theta^Tx_i)) - (1 - y_i) g(\theta^Tx_i) \right) x_i^j \\ &= -\frac{1}{m} \sum_{i=1}^{n} \left (y_i - g(\theta^Tx_i) \right) x_i^j \\ &= \frac{1}{m} \sum_{i=1}^{n} \left (h_\theta(x_i) - y_i \right) x_i^j \end{aligned}
δθjδJ(θ)=−m1i=1∑n(yihθ(xi)1δθjδhθ(xi)−(1−yi)1−hθ(xi)1δθjδhθ(xi))=−m1i=1∑n(yig(θTxi)1−(1−yi)1−g(θTxi)1)δθjδg(θTxi)=−m1i=1∑n(yig(θTxi)1−(1−yi)1−g(θTxi)1)g(θTxi)(1−g(θTxi))δθjδθTxi=−m1i=1∑n(yi(1−g(θTxi))−(1−yi)g(θTxi))xij=−m1i=1∑n(yi−g(θTxi))xij=m1i=1∑n(hθ(xi)−yi)xij
即:
θ
j
:
=
θ
j
−
α
m
∑
n
=
1
m
(
h
θ
(
x
i
)
−
y
i
)
x
i
j
\theta_j := \theta_j - \frac{\alpha}{m} \sum_{n=1}^{m}(h_\theta(x_i) - y_i) x_i^j
θj:=θj−mαn=1∑m(hθ(xi)−yi)xij
补充Sigmoid函数求导过程
g
′
(
z
)
=
g
′
(
θ
T
x
)
=
(
1
1
+
e
−
z
)
′
=
(
1
)
′
⋅
(
1
+
e
−
z
)
+
1
⋅
(
1
+
e
−
z
)
′
(
1
+
e
−
z
)
2
=
e
−
z
(
1
+
e
−
z
)
2
=
1
+
e
−
z
−
1
(
1
+
e
−
z
)
2
=
1
+
e
−
z
(
1
+
e
−
z
)
2
−
1
(
1
+
e
−
z
)
2
=
1
1
+
e
−
z
−
1
(
1
+
e
−
z
)
2
=
g
(
z
)
−
g
(
z
)
2
=
g
(
z
)
⋅
(
1
−
g
(
z
)
)
\begin{aligned} g'(z) = g'(\theta^Tx) &= \left (\frac{1}{1 + e^{-z}} \right)' \\ &= \frac{(1)' · (1 + e^{-z}) + 1 · (1 + e^{-z})'}{(1 + e^{-z})^2} \\ &= \frac{e^{-z}}{(1 + e^{-z})^2} \\ &= \frac{1 + e^{-z} - 1}{(1 + e^{-z})^2} \\ &= \frac{1 + e^{-z}}{(1 + e^{-z})^2} - \frac{1}{(1 + e^{-z})^2} \\ &= \frac{1}{1 + e^{-z}} - \frac{1}{(1 + e^{-z})^2} \\ &= g(z) - g(z)^2 \\ &= g(z) · (1 - g(z)) \end{aligned}
g′(z)=g′(θTx)=(1+e−z1)′=(1+e−z)2(1)′⋅(1+e−z)+1⋅(1+e−z)′=(1+e−z)2e−z=(1+e−z)21+e−z−1=(1+e−z)21+e−z−(1+e−z)21=1+e−z1−(1+e−z)21=g(z)−g(z)2=g(z)⋅(1−g(z))
即 y ′ = y ( 1 − y ) y' = y(1 - y) y′=y(1−y)
正则化
对于线性回归或逻辑回归的损失函数构成的模型,可能会造成有些权重很大,有些权重很小的情况发生,从而会导致过拟合,使得模型的复杂度提高,泛化能力变差。
过拟合问题往往源自过多的特征,解决方法为:
- 减少特征数量(但减少特征会失去一些信息,即使特征选的很好)
- 正则化,保留所有特征,但减少 θ 的大小
如下例所示
x
=
[
1
,
1
,
1
,
1
]
x = [1, 1, 1, 1]
x=[1,1,1,1]
w
1
=
[
1
,
0
,
0
,
0
]
w_1 = [1, 0, 0, 0]
w1=[1,0,0,0]
w
2
=
[
0.25
,
0.25
,
0.25
,
0.25
]
w_2 = [0.25, 0.25, 0.25, 0.25]
w2=[0.25,0.25,0.25,0.25]
w 1 ⋅ x = w 2 ⋅ x = 1 w_1 · x = w_2 · x = 1 w1⋅x=w2⋅x=1,但是明显 w 2 w_2 w2 的模型更好,于是就引入正则化惩罚项。正则项可以取不同的形式,在回归问题中取平方损失,就是参数的 L2 范数,也可以取 L1 范数。取平方损失时,模型的损失函数变为
J ( θ ) = 1 2 m ∑ i = 1 n ( h θ ( x i ) − y i ) 2 + λ ∑ j = 1 n θ j 2 J(\theta) = \frac{1}{2m} \sum_{i=1}^{n}(h_\theta(x_i) - y_i)^2 + \lambda \sum_{j=1}^{n} \theta_j^2 J(θ)=2m1i=1∑n(hθ(xi)−yi)2+λj=1∑nθj2
λ \lambda λ 是正则项系数
- 如果它的值很大,说明对模型的复杂度惩罚大,对拟合数据的损失惩罚小,这样它就不会过分拟合数据,在训练数据上的偏差较大,在未知数据上的方差较小,但是可能出现欠拟合的现象;
- 如果它的值很小,说明比较注重对训练数据的拟合,在训练数据上的偏差会小,但是可能会导致过拟合。
正则化后的梯度下降算法 θ 的更新变为
θ
j
:
=
θ
j
−
α
m
∑
n
=
1
m
(
h
θ
(
x
i
)
−
y
i
)
x
i
j
−
λ
m
θ
j
\theta_j := \theta_j - \frac{\alpha}{m} \sum_{n=1}^{m}(h_\theta(x_i) - y_i) x_i^j - \frac{\lambda}{m}\theta_j
θj:=θj−mαn=1∑m(hθ(xi)−yi)xij−mλθj
L1与L2的选择
L1和L2经常被用来解决过拟合问题。而L1正则也常被用来进行特征选择,主要原因在于L1正则化会使得较多的参数为0,从而产生稀疏解。我们可以将0对应的特征遗弃,进而用来选择特征。
但为什么L1正则会产生稀疏解呢?这里我们用梯度的方式介绍下
L 1 = ∣ w 1 ∣ + ∣ w 2 ∣ + . . . + ∣ w n ∣ , ∂ L 1 ∂ w i = s g n ( w i ) = 1 o r − 1 ( s g n 为 符 号 函 数 ) L1 = |w_1| + |w_2| + ... + |w_n|, \quad \frac{\partial_{L_1}}{\partial_{w_i}} = sgn(w_i) = 1 \quad or \quad -1 \quad (sgn为符号函数) L1=∣w1∣+∣w2∣+...+∣wn∣,∂wi∂L1=sgn(wi)=1or−1(sgn为符号函数)
L 2 = w 1 2 + w 2 2 + . . . + w n 2 , ∂ L 2 ∂ w i = w i L2 = w_1^2 + w_2^2 + ... + w_n^2, \quad \frac{\partial_{L_2}}{\partial_{w_i}} = w_i L2=w12+w22+...+wn2,∂wi∂L2=wi
假设: w i w_i wi 等于不为 0 的正浮点数,学习速率 η 为 0.5
L 1 L_1 L1 的权重更新公式为 w i = w i − η ∗ 1 = w i − 0.5 ⋅ 1 w_i = w_i - \eta * 1 = w_i - 0.5 · 1 wi=wi−η∗1=wi−0.5⋅1,也就是说每次权重更新都能减少一个特定的值( η = 0.5 \eta = 0.5 η=0.5),那么经过若干次迭代后,权重就有可能减少到0。
L2的权重更新公式为 w i = w i − η ∗ w i = w i − 0.5 ∗ w i w_i = w_i - \eta * w_i = w_i - 0.5 * w_i wi=wi−η∗wi=wi−0.5∗wi,也就是说权重每次都等于上一次的1/2,那么,虽然权重不断变小,但是因为每次都等于上一次的一半,所以很快会收敛到较小的值但永远不为0。
下面的图很直观的说明了这个变化趋势: