接着上一章的基础篇 线性回归基础篇
线性分类
线性分类器背后的基本思路是,目标分类的值可以被特征空间中的一个超平面分开。如果这可以无误差地达成,那么训练集被称为线性可分。
上面已经介绍了线性回归和普通最小二乘法(OLS)。现在考虑一个二元分类问题,将目标分类记为「+1」(正面样本)和「-1」(负面样本)。最简单的线性分类器可以通过回归定义:
a
(
x
)
=
sign
(
w
T
x
)
a(\textbf{x}) = \text{sign}(\textbf{w}^\text{T}\textbf x)
a(x)=sign(wTx)
其中:
- x \textbf{x} x 是特征向量(包括标识)。
- w \textbf{w} w 是线性模型中的权重向量(偏置为 w 0 w_0 w0)。
- sign ( ∙ ) \text{sign}(\bullet) sign(∙) 是符号函数,返回参数的符号。
- a ( x ) a(\textbf{x}) a(x) 是分类 x \textbf{x} x 的分类器。
基于逻辑回归的线性分类器
逻辑回归是线性分类器的一个特殊情形,但逻辑回归有一个额外的优点:它可以预测样本
x
i
\textbf{x}_\text{i}
xi 为分类「+」的概率
p
+
p_+
p+:
p
+
=
P
(
y
i
=
1
∣
x
i
,
w
)
p_+ = P\left(y_i = 1 \mid \textbf{x}_\text{i}, \textbf{w}\right)
p+=P(yi=1∣xi,w)
逻辑回归不仅能够预测样本是「+1」还是「-1」,还能预测其分别是「+1」和「-1」的概率是多少。对于很多业务问题(比如,信用评分问题)而言,这是一个非常重要的优点。下面是一个预测贷款违约概率的例子。
银行选择一个阈值
p
∗
p_*
p∗ 以预测贷款违约的概率(上图中阈值为0.15),超过阈值就不批准贷款。
为了预测概率
p
+
∈
[
0
,
1
]
p_+ \in [0,1]
p+∈[0,1],使用 OLS 构造线性预测:
b
(
x
)
=
w
T
x
∈
R
b(\textbf{x}) = \textbf{w}^\text{T} \textbf{x} \in \mathbb{R}
b(x)=wTx∈R
为了将所得结果转换为 [0,1] 区间内的概率,逻辑回归使用下列函数进行转换:
σ
(
z
)
=
1
1
+
exp
−
z
\sigma(z) = \frac{1}{1 + \exp^{-z}}
σ(z)=1+exp−z1
事件
X
X
X 的概率记为
P
(
X
)
P(X)
P(X),则比值比
O
R
(
X
)
OR(X)
OR(X) 由式
P
(
X
)
1
−
P
(
X
)
\frac{P(X)}{1-P(X)}
1−P(X)P(X) 决定,比值比是某一事件是否发生的概率之比。显然,概率和比值比包含同样的信息,不过
P
(
X
)
P(X)
P(X) 的范围是 0 到 1,而
O
R
(
X
)
OR(X)
OR(X) 的范围是 0 到
∞
\infty
∞。如果计算
O
R
(
X
)
OR(X)
OR(X) 的对数,那么显然有
log
O
R
(
X
)
∈
R
\log{OR(X)} \in \mathbb{R}
logOR(X)∈R,这在 OLS 中有用到。
看看逻辑回归是如何做出预测的:
p
+
=
P
(
y
i
=
1
∣
x
i
,
w
)
p_+ = P\left(y_i = 1 \mid \textbf{x}_\text{i}, \textbf{w}\right)
p+=P(yi=1∣xi,w)
现在,假设已经通过某种方式得到了权重
w
\textbf{w}
w,即模型已经训练好了,逻辑回归预测的步骤如下:
步骤一 计算:
w
0
+
w
1
x
1
+
w
2
x
2
+
.
.
.
=
w
T
x
w_{0}+w_{1}x_1 + w_{2}x_2 + ... = \textbf{w}^\text{T}\textbf{x}
w0+w1x1+w2x2+...=wTx
等式
w
T
x
=
0
\textbf{w}^\text{T}\textbf{x} = 0
wTx=0 定义了一个超空间将样本分为两类。
步骤二 计算对数比值比
O
R
+
OR_{+}
OR+
log
(
O
R
+
)
=
w
T
x
\log(OR_{+}) = \textbf{w}^\text{T}\textbf{x}
log(OR+)=wTx
步骤三 现在已经有了将一个样本分配到「+」分类的概率
O
R
+
OR_{+}
OR+,可以据此计算
p
+
p_{+}
p+:
p
+
=
O
R
+
1
+
O
R
+
=
exp
w
T
x
1
+
exp
w
T
x
=
1
1
+
exp
−
w
T
x
=
σ
(
w
T
x
)
p_{+} = \frac{OR_{+}}{1 + OR_{+}} = \frac{\exp^{\textbf{w}^\text{T}\textbf{x}}}{1 + \exp^{\textbf{w}^\text{T}\textbf{x}}} = \frac{1}{1 + \exp^{-\textbf{w}^\text{T}\textbf{x}}} = \sigma(\textbf{w}^\text{T}\textbf{x})
p+=1+OR+OR+=1+expwTxexpwTx=1+exp−wTx1=σ(wTx)
上式的右边就是 sigmoid 函数。
所以,逻辑回归预测一个样本分配为「+」分类的概率(假定已知模型的特征和权重),这一预测过程是通过对权重向量和特征向量的线性组合进行 sigmoid 变换完成的,公式如下:
p
+
(
x
i
)
=
P
(
y
i
=
1
∣
x
i
,
w
)
=
σ
(
w
T
x
i
)
.
p_+(\textbf{x}_\text{i}) = P\left(y_i = 1 \mid \textbf{x}_\text{i}, \textbf{w}\right) = \sigma(\textbf{w}^\text{T}\textbf{x}_\text{i}).
p+(xi)=P(yi=1∣xi,w)=σ(wTxi).
下面介绍模型是如何被训练的,我们将再次通过最大似然估计训练模型。
最大似然估计和逻辑回归
现在,看下从最大似然估计(MLE)出发如何进行逻辑回归优化,也就是最小化逻辑损失函数。前面已经见过了将样本分配为「+」分类的逻辑回归模型:
p
+
(
x
i
)
=
P
(
y
i
=
1
∣
x
i
,
w
)
=
σ
(
w
T
x
i
)
p_+(\textbf{x}_\text{i}) = P\left(y_i = 1 \mid \textbf{x}_\text{i}, \textbf{w}\right) = \sigma(\textbf{w}^T\textbf{x}_\text{i})
p+(xi)=P(yi=1∣xi,w)=σ(wTxi)
「-」分类相应的表达式为:
p
−
(
x
i
)
=
P
(
y
i
=
−
1
∣
x
i
,
w
)
=
1
−
σ
(
w
T
x
i
)
=
σ
(
−
w
T
x
i
)
p_-(\textbf{x}_\text{i}) = P\left(y_i = -1 \mid \textbf{x}_\text{i}, \textbf{w}\right) = 1 - \sigma(\textbf{w}^T\textbf{x}_\text{i}) = \sigma(-\textbf{w}^T\textbf{x}_\text{i})
p−(xi)=P(yi=−1∣xi,w)=1−σ(wTxi)=σ(−wTxi)
这两个表达式可以组合成一个:
P
(
y
=
y
i
∣
x
i
,
w
)
=
σ
(
y
i
w
T
x
i
)
P\left(y = y_i \mid \textbf{x}_\text{i}, \textbf{w}\right) = \sigma(y_i\textbf{w}^T\textbf{x}_\text{i})
P(y=yi∣xi,w)=σ(yiwTxi)
表达式
M
(
x
i
)
=
y
i
w
T
x
i
M(\textbf{x}_\text{i}) = y_i\textbf{w}^T\textbf{x}_\text{i}
M(xi)=yiwTxi 称为目标
x
i
\textbf{x}_\text{i}
xi 的分类边缘。如果边缘非负,则模型正确选择了目标
x
i
\textbf{x}_\text{i}
xi 的分类;如果边缘为负,则目标
x
i
\textbf{x}_\text{i}
xi 被错误分类了。注意,边缘仅针对训练集中的目标(即标签
y
i
y_i
yi 已知的目标)而言。
为了准确地理解为何有这一结论,需要理解向线性分类器的几何解释。首先,看下线性代数的一个经典入门问题「找出向径
x
A
\textbf{x}_A
xA 与平面
w
T
x
=
0
\textbf{w}^\text{T}\textbf{x} = 0
wTx=0 的距离」,即:
ρ
(
x
A
,
w
T
x
=
0
)
=
w
T
x
A
∣
∣
w
∣
∣
\rho(\textbf{x}_A, \textbf{w}^\text{T}\textbf{x} = 0) = \frac{\textbf{w}^\text{T}\textbf{x}_A}{||\textbf{w}||}
ρ(xA,wTx=0)=∣∣w∣∣wTxA
从上图中,可以看到,表达式
w
T
x
i
\textbf{w}^\text{T}\textbf{x}_\text{i}
wTxi 的绝对值越大,点
x
i
\textbf{x}_\text{i}
xi 离平面
w
T
x
=
0
\textbf{w}^\text{T}\textbf{x} = 0
wTx=0 的距离就越远。
因此,表达式
M
(
x
i
)
=
y
i
w
T
x
i
M(\textbf{x}_\text{i}) = y_i\textbf{w}^\text{T}\textbf{x}_\text{i}
M(xi)=yiwTxi 是模型对目标
x
i
\textbf{x}_\text{i}
xi 分类的肯定程度:
- 如果边缘的绝对值较大,且为正值,那么分类的标签是正确的,且目标离分界超平面很远,也就是模型对这一分类很肯定。如下图点 x 3 x_3 x3 所示。
- 如果边缘的绝对值较大,且为负值,那么分类的标签是错误的,且目标离分界超平面很远,那么目标很可能是一个异常值(例如,它可能为训练集中一个错误标记的值)。如下图点 x 1 x_1 x1 所示。
- 如果边缘绝对值较小,那么目标距离分界超平面很近,其符号就决定了目标「是否被正确分类」。如下图点
x
2
x_2
x2 和
x
4
x_4
x4 所示。
现在,计算数据集的似然,即基于数据集 x \textbf{x} x 观测到给定向量 y \textbf{y} y 的概率。假设目标来自一个独立分布,然后可建立如下公式:
P ( y ∣ X , w ) = ∏ i = 1 ℓ P ( y = y i ∣ x i , w ) , P\left(\textbf{y} \mid \textbf{X}, \textbf{w}\right) = \prod_{i=1}^{\ell} P\left(y = y_i \mid \textbf{x}_\text{i}, \textbf{w}\right), P(y∣X,w)=i=1∏ℓP(y=yi∣xi,w),
其中, ℓ \ell ℓ 为数据集 X \textbf{X} X 的长度(行数)。
对这个表达式取对数,简化计算:
log P ( y ∣ X , w ) = log ∏ i = 1 ℓ P ( y = y i ∣ x i , w ) = log ∏ i = 1 ℓ σ ( y i w T x i ) = \log P\left(\textbf{y} \mid \textbf{X}, \textbf{w}\right) = \log \prod_{i=1}^{\ell} P\left(y = y_i \mid \textbf{x}_\text{i}, \textbf{w}\right) = \log \prod_{i=1}^{\ell} \sigma(y_i\textbf{w}^\text{T}\textbf{x}_\text{i}) = logP(y∣X,w)=logi=1∏ℓP(y=yi∣xi,w)=logi=1∏ℓσ(yiwTxi)=
= ∑ i = 1 ℓ log σ ( y i w T x i ) = ∑ i = 1 ℓ log 1 1 + exp − y i w T x i = − ∑ i = 1 ℓ log ( 1 + exp − y i w T x i ) = \sum_{i=1}^{\ell} \log \sigma(y_i\textbf{w}^\text{T}\textbf{x}_\text{i}) = \sum_{i=1}^{\ell} \log \frac{1}{1 + \exp^{-y_i\textbf{w}^\text{T}\textbf{x}_\text{i}}} = - \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\textbf{w}^\text{T}\textbf{x}_\text{i}}) =i=1∑ℓlogσ(yiwTxi)=i=1∑ℓlog1+exp−yiwTxi1=−i=1∑ℓlog(1+exp−yiwTxi)
最大化似然等价于最小化以下表达式:
L
log
(
X
,
y
,
w
)
=
∑
i
=
1
ℓ
log
(
1
+
exp
−
y
i
w
T
x
i
)
.
\mathcal{L_{\log}} (\textbf X, \textbf{y}, \textbf{w}) = \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\textbf{w}^\text{T}\textbf{x}_\text{i}}).
Llog(X,y,w)=i=1∑ℓlog(1+exp−yiwTxi).
上式就是逻辑损失函数。用分类边缘
M
(
x
i
)
M(\textbf{x}_\text{i})
M(xi) 改写逻辑损失函数,有
L
(
M
)
=
log
(
1
+
exp
−
M
)
L(M) = \log (1 + \exp^{-M})
L(M)=log(1+exp−M)
将这一函数的图像和 0-1 损失函数的图像绘制在一张图上。当错误分类发生时,0-1 损失函数只会以恒定的数值 1.0 惩罚模型,即
L
1
/
0
(
M
)
=
[
M
<
0
]
L_{1/0}(M) = [M < 0]
L1/0(M)=[M<0]。
上图体现了这样一个想法:如果不能够直接最小化分类问题的误差数量(至少无法通过梯度方法最小化,因为 0-1 损失函数在 0 的导数趋向无穷),那么可以转而最小化它的上界。对逻辑损失函数而言,以下公式是成立的:
L
1
/
0
(
X
,
y
,
w
)
=
∑
i
=
1
ℓ
[
M
(
x
i
)
<
0
]
≤
∑
i
=
1
ℓ
log
(
1
+
exp
−
y
i
w
T
x
i
)
=
L
log
(
X
,
y
,
w
)
,
\mathcal{L_{1/0}} (\textbf X, \textbf{y}, \textbf{w}) = \sum_{i=1}^{\ell} [M(\textbf{x}_\text{i}) < 0] \leq \sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\textbf{w}^\text{T}\textbf{x}_\text{i}}) = \mathcal{L_{\log}} (\textbf X, \textbf{y}, \textbf{w}),
L1/0(X,y,w)=i=1∑ℓ[M(xi)<0]≤i=1∑ℓlog(1+exp−yiwTxi)=Llog(X,y,w),
其中
L
1
/
0
(
X
,
y
)
\mathcal{L_{1/0}} (\textbf X, \textbf{y})
L1/0(X,y) 只是数据集
(
X
,
y
)
(\textbf X, \textbf{y})
(X,y) 上权重
w
\textbf{w}
w 的逻辑回归误差。因此,可以通过降低分类误差数
L
l
o
g
\mathcal{L_{log}}
Llog 的上限,降低分数误差数本身。
逻辑回归的 L 2 L_2 L2 正则化
逻辑回归的 L2 正则化和岭回归的情况基本一样。代替
L
log
(
X
,
y
,
w
)
\mathcal{L_{\log}} (\textbf X, \textbf{y}, \textbf{w})
Llog(X,y,w),只用最小化下式:
J
(
X
,
y
,
w
)
=
L
log
(
X
,
y
,
w
)
+
λ
∣
w
∣
2
\mathcal{J}(\textbf X, \textbf{y}, \textbf{w}) = \mathcal{L_{\log}} (\textbf X, \textbf{y}, \textbf{w}) + \lambda |\textbf{w}|^2
J(X,y,w)=Llog(X,y,w)+λ∣w∣2
在逻辑回归中,通常使用正则化系数的倒数
C
=
1
λ
C = \frac{1}{\lambda}
C=λ1:
w
^
=
arg
min
w
J
(
X
,
y
,
w
)
=
arg
min
w
(
C
∑
i
=
1
ℓ
log
(
1
+
exp
−
y
i
w
T
x
i
)
+
∣
w
∣
2
)
\widehat{\textbf w} = \arg \min_{\textbf{w}} \mathcal{J}(\textbf X, \textbf{y}, \textbf{w}) = \arg \min_{\textbf{w}}\ (C\sum_{i=1}^{\ell} \log (1 + \exp^{-y_i\textbf{w}^\text{T}\textbf{x}_\text{i}})+ |\textbf{w}|^2)
w
=argwminJ(X,y,w)=argwmin (Ci=1∑ℓlog(1+exp−yiwTxi)+∣w∣2)
验证和学习曲线
上文对模型验证、交叉验证、正则化做了简单介绍,现在考虑一个更大的问题:如果模型的质量不佳,该怎么办?针对这个问题,有很多猜想:
- 应该让模型更复杂还是更简单?
- 应该加入更多特征吗?
- 是否只是需要更多数据用于训练?
这些猜想的答案并不明显,比如有时候一个更复杂的模型会导致表现退化,有时候增加新的特征带来的变化并不直观。事实上,做出正确决定,选择正确方法,从而改进模型的能力是衡量一个人对机器学习知识掌握程度的重要指标。
- 简单模型的训练误差和验证误差很接近,且都比较大。这暗示模型欠拟合,参数数量不够多。
- 高度复杂模型的训练误差和验证误差相差很大,这暗示模型过拟合。当参数数量过多或者正则化不够严格时,算法可能被数据中的噪声「转移注意力」,没能把握数据的整体趋势。
数据对于模型的影响
一般而言,模型所用的数据越多越好。但新数据是否在任何情况下都有帮助呢?例如,为了评估特征 N ,而对数据集的数据进行加倍,这样做是否合理?
由于新数据可能难以取得,合理的做法是改变训练集的大小,然后看模型的质量与训练数据的数量之间的依赖关系,这就是「学习曲线」的概念。
这个想法很简单:将误差看作训练中所使用的样本数量的函数。模型的参数事先固定。
构建学习曲线和验证曲线可以帮助我们为新数据调整合适的模型复杂度。
关于验证曲线和学习曲线的结论:
-
训练集上的误差本身不能说明模型的质量。
-
交叉验证误差除了可以显示模型对数据的拟合程度外,还可以显示模型保留了多少对新数据的概括能力。
-
验证曲线是一条根据模型复杂度显示训练集和验证集结果的曲线:如果两条曲线彼此接近,且两者的误差都很大,这标志着欠拟合;如果两条曲线彼此距离很远,这标志着过拟合。
-
学习曲线是一个根据观测数量显示训练集和验证集结果的曲线:如果两条曲线收敛,那么增加新数据收益不大,有必要改变模型复杂度;如果两条曲线没有收敛,增加新数据可以改善结果。