1、基本形式
给定由d个属性描述的示例 x = ( x 1 ; x 2 ; … … ; x d ) x=(x_1;x_2;……;x_d) x=(x1;x2;……;xd),线性模型试图用函数 f ( x ) = ω 1 x 1 + ω 2 x 2 + … … + ω d x d + b f(x)=\omega_1x_1+\omega_2x_2+……+\omega_dx_d+b f(x)=ω1x1+ω2x2+……+ωdxd+b来表示,一般用向量形式写成 f ( x ) = ω T x + b , f(x)=\omega^Tx+b, f(x)=ωTx+b,当 ω \omega ω与b的值学得后,模型就确定了。线性模型形式简单、易于建模,但却蕴含着机器学习中一些重要的基本思想,许多功能强大的模型是建立在线性模型的基础上的。
2、线性回归
给定数据集
D
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
…
,
(
x
m
,
y
m
)
D={(x_1,y_1),(x_2,y_2),……,(x_m,y_m)}
D=(x1,y1),(x2,y2),……,(xm,ym),线性回归试图学习一个线性模型以尽可能地预测实值输出标记。假设输入属性的数目只有一个,对离散属性,若属性间存在“序关系”,可通过连续化将其转化为连续值。线性回归试图学得
f
(
x
i
)
=
w
x
i
+
b
,
使
得
f
(
x
i
)
≃
y
i
f(x_i)=wx_i+b,使得f(x_i)\simeq y_i
f(xi)=wxi+b,使得f(xi)≃yi为得到函数的参数,我们通过均方误差来对模型进行求解,令均方误差最小的参数就是我们要求的参数。
w
w
w和
b
b
b的取值分别为
w
=
∑
i
=
1
m
y
i
(
x
i
−
x
‾
)
∑
i
=
1
m
x
i
2
−
1
m
(
∑
i
=
1
m
x
i
)
2
,
w=\frac{\sum\limits_{i=1}^{m}y_i(x_i-\overline{x})}{\sum\limits_{i=1}^{m}x_i^2-\frac{1}{m}(\sum\limits_{i=1}^{m}x_i)^2},
w=i=1∑mxi2−m1(i=1∑mxi)2i=1∑myi(xi−x),
b
=
1
m
∑
i
=
1
m
(
y
i
−
w
x
i
)
b=\frac{1}{m}\sum\limits_{i=1}^{m}(y_i-wx_i)
b=m1i=1∑m(yi−wxi)其中
x
‾
=
1
m
∑
i
=
1
m
x
i
\overline{x}=\frac{1}{m}\sum\limits_{i=1}^{m}x_i
x=m1i=1∑mxi为
x
x
x的均值。
更一般地,对于包含d个属性的样本构成的数据集,此时我们试图学得
f
(
x
i
)
=
w
T
x
i
+
b
i
,
使
得
f
(
x
i
)
≃
y
i
f(x_i)=w^Tx_i+b_i,使得f(x_i)\simeq y_i
f(xi)=wTxi+bi,使得f(xi)≃yi这称为“多元线性回归”。类似的,用最小二乘法对参数进行估计。我们尽量将模型中的各类数据以向量及矩阵形式表示:将w和b纳入向量形式
w
^
=
(
w
;
b
)
\hat w=(w;b)
w^=(w;b),将数据集D表示为一个m行,d+1列的矩阵,其中每行代表一个样本,每行前d个元素对应于样本的d个属性值,最后一个元素恒为1,
标记也是向量形式
y
=
(
y
1
;
y
2
;
…
…
;
y
m
)
y=(y_1;y_2;……;y_m)
y=(y1;y2;……;ym),求其均方误差
E
w
^
=
(
y
−
X
w
^
)
T
(
y
−
X
w
^
)
E_{\hat w}=(y-X\hat w)^T(y-X\hat w)
Ew^=(y−Xw^)T(y−Xw^)并对其求偏导,最后可得
w
^
∗
=
(
X
T
X
)
−
1
X
T
y
\hat w^*=(X^TX)^{-1}X^Ty
w^∗=(XTX)−1XTy最终学得的线性回归模型为
f
(
x
^
i
)
=
x
^
i
T
(
X
T
X
)
−
1
X
T
y
f(\hat x_i)=\hat x_i^T(X^TX)^{-1}X^Ty
f(x^i)=x^iT(XTX)−1XTy
然而,现实任务中
X
T
X
X^TX
XTX往往不是满秩矩阵,在许多任务中我们会遇到大量的变量,其数目甚至超过样例数,这时我们可以解出多个
w
^
\hat{w}
w^,它们都能使均方误差最小化。选择哪一个解由学习算法的归纳偏好决定,常见的作法是引入正则化。
线性模型的变化很丰富,对于样例
(
x
,
y
)
(x,y)
(x,y),我们期望线性模型的预测值逼近真实标记
y
y
y,我们把线性模型简写为
y
=
w
T
x
+
b
,
y=w^Tx+b,
y=wTx+b,假设我们认为示例所对应的输出标记是在指数尺度上变化,那就可以将输出标记的对数作为线性模型逼近的目标,即
l
n
y
=
w
T
x
+
b
,
lny=w^Tx+b,
lny=wTx+b,在形式上仍是线性回归,但实质上是非线性的。
更一般地,考虑单调可微函数
g
(
⋅
)
g(\cdot)
g(⋅),令
y
=
g
−
1
(
w
T
x
+
b
)
,
y=g^{-1}(w^Tx+b),
y=g−1(wTx+b),这样得到的模型称为“广义线性模型”,其中函数
g
(
⋅
)
g(\cdot)
g(⋅)称为联系函数。
3、对数几率回归
上面我们解决了回归问题,我们要做分类任务时怎么办呢?只需要找到一个单调可微函数将分类任务的真实标记
y
y
y与线性回归模型的预测值联系起来。
考虑二分类任务,其输出标记
y
∈
0
,
1
y \in {0,1}
y∈0,1,而线性回归模型产生的预测值是
z
=
w
T
+
b
z=w^T+b
z=wT+b是实值,于是,我们需要将实值转为
0
/
1
0/1
0/1值。最理想的方法是当
z
>
0
z>0
z>0 时判为正例,
z
<
0
z<0
z<0 时判为反例,为临界值零则任意判别。但单位阶跃函数是不连续的,因此不能直接用作
g
(
⋅
)
g(\cdot)
g(⋅)。于是我们要找到一个函数来代替它,对数几率函数就是这样一个函数
y
=
1
1
+
e
−
z
y=\frac{1}{1+e^{-z}}
y=1+e−z1对数几率函数是一种"Sigmoid函数",它将
z
z
z值转化为一个接近0或1的
y
y
y值,并且在
z
=
0
z=0
z=0时它的输出值变化很陡,将其取代
g
−
1
g^{-1}
g−1,得
y
=
1
1
+
e
−
(
w
T
x
+
b
)
y=\frac{1}{1+e^{-(w^Tx+b)}}
y=1+e−(wTx+b)1化简得
l
n
y
1
−
y
=
w
T
x
+
b
s
ln\frac{y}{1-y}=w^Tx+bs
ln1−yy=wTx+bs若将
y
y
y视作样本
x
x
x为正例的可能性,则
1
−
y
1-y
1−y是其反例可能性,两者的比值
y
1
−
y
\frac{y}{1-y}
1−yy称为几率,反映了x作为正例的相对可能性。对几率取对数则得到“对数几率”
l
n
y
1
−
y
ln\frac{y}{1-y}
ln1−yy。 可以看出,我们是在用线性回归模型的预测结果去逼近真实标记的对数几率,因此,对应的模型称为“对数几率回归”。要注意,虽然名字是“回归”,但实际处理的是分类问题。
怎么求它的解呢?
若将 y y y视为类后验概率估计 p ( y = 1 ∣ x ) p(y=1|x) p(y=1∣x),则 l n p ( y = 1 ∣ x ) p ( y = 0 ∣ x ) = w T x + b ln\frac{p(y=1|x)}{p(y=0|x)}=w^Tx+b lnp(y=0∣x)p(y=1∣x)=wTx+b显然有 p ( y = 1 ∣ x ) = e w T x + b 1 + e w T x + b p(y=1|x)=\frac{e^{w^Tx+b}}{1+e^{w^Tx+b}} p(y=1∣x)=1+ewTx+bewTx+b p ( y = 0 ∣ x ) = 1 1 + e w T x + b p(y=0|x)=\frac{1}{1+e^{w^Tx+b}} p(y=0∣x)=1+ewTx+b1然后我们可以通过极大似然法来估计 w w w和 b b b,给定数据集 ( x i , y i ) {(x_i,y_i)} (xi,yi) ,令 l ( w , b ) = ∑ i = 1 m l n p ( y i ∣ x i ; w , b ) , l(w,b)=\sum\limits_{i=1}^{m}lnp(y_i|x_i;w,b), l(w,b)=i=1∑mlnp(yi∣xi;w,b),最大的值就是我们要求的参数。令 β = ( w ; b ) , x ^ = ( x ; 1 ) \beta=(w;b),\hat x=(x;1) β=(w;b),x^=(x;1),则 w T x + b w^Tx+b wTx+b可写为 β T x ^ \beta^T\hat x βTx^,再令 p 1 ( x ^ ; β ) = p ( y = 1 ∣ x ^ ; β ) , p 0 ( x ^ ; β ) = p ( y = 0 ∣ x ^ ; β ) = 1 − p 1 ( x ^ ; β ) p_1(\hat x;\beta)=p(y=1|\hat x;\beta),p_0(\hat x;\beta)=p(y=0|\hat x;\beta)=1-p_1(\hat x;\beta) p1(x^;β)=p(y=1∣x^;β),p0(x^;β)=p(y=0∣x^;β)=1−p1(x^;β)则 p ( y i ∣ x i ; w , b ) = y i p 1 ( x ^ i ; β ) + ( 1 − y i ) p 0 ( x ^ i ; β ) p(y_i|x_i;w,b)=y_ip_1(\hat x_i;\beta)+(1-y_i)p_0(\hat x_i;\beta) p(yi∣xi;w,b)=yip1(x^i;β)+(1−yi)p0(x^i;β) l ( w , b ) l(w,b) l(w,b)可改写为 l ( β ) = ∑ i = 1 m ( − y i β T x ^ i + l n ( 1 + e β T x ^ i ) ) l(\beta)=\sum\limits_{i=1}^{m}(-y_i\beta^T\hat x_i+ln(1+e^{\beta^T\hat x_i})) l(β)=i=1∑m(−yiβTx^i+ln(1+eβTx^i))上式是关于 β \beta β的高阶可导连续凸函数,经典的数值优化算法如梯度下降法、牛顿法都可求出其最优解。
4、线性判别分析
线性判别分析是一种经典的线性学习方法,给定训练样本集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近,异类样例的投影点尽可能远离;对新样本进行分类时,同样将其投影到这条直线上,根据投影位置对其分类。
给定数据集
D
=
(
x
i
,
y
i
)
,
y
i
∈
0
,
1
D=(x_i,y_i),y_i\in {0,1}
D=(xi,yi),yi∈0,1,令
X
i
,
μ
i
,
∑
i
X_i,\mu_i,\sum_i
Xi,μi,∑i分别表示第
i
∈
0
,
1
i\in0,1
i∈0,1类示例的集合、均值向量、协方差矩阵。若将数据投影到直线
w
w
w上,则两类样本的中心在直线上的投影分别为
w
T
μ
0
w^T\mu_0
wTμ0和
w
T
μ
1
w^T\mu_1
wTμ1;若将所有样本点都投影到直线上,则两类样本的协方差分别为
w
T
∑
0
w
,
w
T
∑
1
w
w^T\sum_0w,w^T\sum_1w
wT∑0w,wT∑1w,由于直线是一维空间,因此
w
T
μ
0
、
w
T
μ
1
、
w
T
∑
0
w
、
w
T
∑
1
w
w^T\mu_0、w^T\mu_1、w^T\sum_0w、w^T\sum_1w
wTμ0、wTμ1、wT∑0w、wT∑1w均为实数。为使同类样例的投影点尽可能相近,我们可以让同类样例投影点的协方差尽可能小,即
w
T
∑
0
w
+
w
T
∑
1
w
w^T\sum_0w+w^T\sum_1w
wT∑0w+wT∑1w尽可能小;为使异类样例的投影点尽可能远离,可以让类中心之间的距离尽可能大,即
∣
∣
w
T
μ
0
−
w
T
μ
1
∣
∣
2
2
||w^T\mu_0-w^T\mu_1||_2^2
∣∣wTμ0−wTμ1∣∣22尽可能大。最终,我们的可以将目标转为使
J
=
∣
∣
w
T
μ
0
−
w
T
μ
1
∣
∣
2
2
w
T
∑
0
w
+
w
T
∑
1
w
=
w
T
(
μ
0
−
μ
1
)
(
μ
0
−
μ
1
)
T
w
w
T
(
∑
0
+
∑
1
)
w
J=\frac{||w^T\mu_0-w^T\mu_1||_2^2}{w^T\sum_0w+w^T\sum_1w} =\frac{w^T(\mu_0-\mu_1)(\mu_0-\mu_1)^Tw}{w^T(\sum_0+\sum_1)w}
J=wT∑0w+wT∑1w∣∣wTμ0−wTμ1∣∣22=wT(∑0+∑1)wwT(μ0−μ1)(μ0−μ1)Tw最大。定义
S
w
=
∑
0
+
∑
1
=
∑
x
∈
X
0
(
x
−
μ
0
)
(
x
−
μ
0
)
T
+
∑
x
∈
X
1
(
x
−
μ
1
)
(
x
−
μ
1
)
T
S_w=\sum_0 + \sum_1=\sum\limits_{x\in X_0}(x-\mu_0)(x-\mu_0)^T+\sum\limits_{x\in X_1}(x-\mu_1)(x-\mu_1)^T
Sw=0∑+1∑=x∈X0∑(x−μ0)(x−μ0)T+x∈X1∑(x−μ1)(x−μ1)T
S
b
=
(
μ
0
−
μ
1
)
(
μ
0
−
μ
1
)
T
S_b=(\mu_0-\mu_1)(\mu_0-\mu_1)^T
Sb=(μ0−μ1)(μ0−μ1)T则
J
=
w
T
S
b
w
w
T
S
w
w
J=\frac{w^TS_bw}{w^TS_ww}
J=wTSwwwTSbw怎么确定
w
w
w呢?
令
w
T
S
w
w
=
1
w^TS_ww=1
wTSww=1,上式就转成了在
w
T
S
w
w
=
1
w^TS_ww=1
wTSww=1的条件下求
w
T
S
b
w
w^TS_bw
wTSbw的最大值,即
−
w
T
S
b
w
-w^TS_bw
−wTSbwd的最小值。令
l
=
−
w
T
S
b
w
+
λ
w
T
S
w
w
=
0
l=-w^TS_bw+\lambda w^TS_ww=0
l=−wTSbw+λwTSww=0得
S
b
w
=
λ
S
w
w
S_bw=\lambda S_ww
Sbw=λSww因为
S
b
w
S_bw
Sbw的方向恒为
μ
0
−
μ
1
\mu_0-\mu_1
μ0−μ1,故
S
b
w
=
λ
(
μ
0
−
μ
1
)
S_bw=\lambda (\mu_0-\mu_1)
Sbw=λ(μ0−μ1)解的
w
=
S
w
−
1
(
μ
0
−
μ
1
)
w=S_w^{-1}(\mu_0-\mu_1)
w=Sw−1(μ0−μ1)将它推广到多分类任务中,类内、类间散度矩阵都是所有类别的类内、类间散度矩阵之和。
S
w
=
∑
i
=
1
N
S
w
i
S_w=\sum\limits_{i=1}^{N}S_{w_i}
Sw=i=1∑NSwi又可知“全局散度矩阵”为
S
t
=
S
b
+
S
w
=
∑
i
=
1
m
(
x
i
−
μ
)
(
x
i
−
μ
)
T
S_t=S_b+S_w=\sum\limits_{i=1}^{m}(x_i-\mu)(x_i-\mu)^T
St=Sb+Sw=i=1∑m(xi−μ)(xi−μ)T因此
S
b
=
S
t
−
S
w
=
∑
i
=
1
N
m
i
(
μ
i
−
μ
)
(
μ
i
−
μ
)
T
S_b=S_t-S_w=\sum\limits_{i=1}^{N}m_i(\mu_i-\mu)(\mu_i-\mu)^T
Sb=St−Sw=i=1∑Nmi(μi−μ)(μi−μ)T在知道这三个数据后,对其进行线性判别分析即可。
5、多分类学习
现实生活中经常遇到多分类任务,有些二分类任务可以直接推广到多分类,但更多地,我们是利用一些策略,利用二分类学习器来解决多分类问题。考虑N个类别
C
1
,
C
2
,
…
…
,
C
N
,
C_1,C_2,……,C_N,
C1,C2,……,CN,多分类学习的基本思想是将其拆分成若干个二分类任务,为每个二分类任务训练一个分类器;在测试时,对这些分类器的预测结果进行集成以获得最终的结果。
经典的拆分策略有“一对一”,“一对其余”,“多对多”三种,给定数据集
D
=
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
…
…
,
(
x
m
,
y
m
)
,
y
i
∈
C
1
,
C
2
,
…
…
,
C
N
D={(x_1,y_1),(x_2,y_2),……,(x_m,y_m)},y_i\in C_1,C_2,……,C_N
D=(x1,y1),(x2,y2),……,(xm,ym),yi∈C1,C2,……,CN,一对一策略将这N个类别两两配对,从而产生
N
(
N
−
1
)
/
2
N(N-1)/2
N(N−1)/2个二分类任务,将样本提交给所有分类器,做种结果为被预测的最多的类别。一对其余是每次将一个类的样例作为正例,其他所有类的样例作为反例来训练N个分类器。在测试时若只有一个分类器预测为正类,则其对应的类别标记为最终分类结果。
可以发现,一对其余只需要训练N个分类器,而一对一需要训练N(N-1)/2个,因此一对一方法的存储开销及测试时间开销通常比一对其余的大。在训练时,一对其余的每个分类器均使用全部训练样例,而一对一的每个分类器仅使用两个样例,因此,一对一的训练时间开销要比一对其余的小。
多对多是指每次将若干个类作为正类,若干个其他类作为反类。要注意,正、反类构造必须有特殊的设计。下面来介绍一种最常用的MvM技术:“纠错输出码”ECOC。
ECOC主要的步骤有编码、解码两部分:
- 编码:对N个类别分别做M次划分,每次划分将一部分划为正类,一部分划为反类,从而形成一个二分类训练集;一共产生M个训练集,训练出M个分类器。
- 解码:使用M个分类器分别对测试样本进行预测,这些预测标记组成一个编码,将这个预测编码与每个类别各自的编码进行比较,返回其中距离最小的类别作为最终结果。
类别划分通过“编码矩阵”指定,编码矩阵有多种形式,常见的主要有二元码,三元码两种,二元码将每个类别分为正类和反类,三元码除了正类和反类外还可指定“停用类”。
为什么称ECOC为纠错输出码呢?
因为它有一定的容错能力,在预测过程中即使某个分类器出现了错误,最后我们仍可能得到正确的结果。ECOC编码越长,纠错能力越强,但要注意,编码越长,需要训练的分类器越多,计算、存储开销越大。
对同等长度的编码,理论上说,任意两个类别之间的编码距离越远,则纠错能力越强,在马场较小时,我们可根据这个原则来计算出理论最优编码。但当码长稍大时,就很难有效地确定最优编码。不过,大多数时候非最优编码往往已经能够满足我们的需求了,而且机器学习涉及许多因素,并不是编码的理论性质越好,分类性能就越好。
6、类别不平衡问题
之前的介绍都是在不同类别的训练数目相当的前提下进行的,但在现实生活中,我们经常会遇到不停类别的训练样例数目差别很大的情况,在这时,我们怎么处理呢?
类别不平衡学习中,我们经常会用到“再缩放"这一策略。我们用
y
=
w
T
+
b
y=w^T+b
y=wT+b对新样本进行分类时,是用预测出的
y
y
y值与一个阈值进行比较,大于阈值时为正例,小于阈值时为反例.
y
y
y表达了正例的可能性,
1
−
y
1-y
1−y表达了反例的可能性,
y
1
−
y
\frac{y}{1-y}
1−yy反映了正例可能性与反例可能性的比值,阈值为0.5说明样例的正反例可能性相同。分类器的决策规则为
y
1
−
y
>
1
,
则
预
测
为
正
例
\frac{y}{1-y}>1,则预测为正例
1−yy>1,则预测为正例当正反例数目不同时,令
m
+
m^+
m+表示正例数目,
m
−
m^-
m−表示反例数目。假设训练集是真实样本总体的无偏采样,这时
y
1
−
y
>
m
+
m
−
,
则
预
测
为
正
例
\frac{y}{1-y}>\frac{m^+}{m^-},则预测为正例
1−yy>m−m+,则预测为正例即令
y
′
1
−
y
′
=
y
1
−
y
∗
m
−
m
+
>
1
\frac{y^{'}}{1-y^{'}}=\frac{y}{1-y}*\frac{m^-}{m^+}>1
1−y′y′=1−yy∗m+m−>1再缩放的思想简单,但实际操作过程中训练集是真实样本总体的无偏采样往往是不成立的,现在一般有三个方法来解决这个问题:
- 对训练集里的反例进行欠采样,去除一些反例使正反例数目接近,然后在进行学习
- 对训练集里的正例进行过采样,增加一些正例使正反例数目接近,然后在进行学习
- 直接用原始训练集进行学习,但在预测时使用上式对阈值进行调整
欠采样的开销往往远小于过采样法,因为欠采样减少样例,而过采样增加样例,要注意,过采样不能简单地对正例进行重复采样,否则会导致严重的过拟合。欠采样若简单地丢弃反例,则会导致信息的丢失,对此,可以将反例分成若干个集合供不同学习器使用,这样每个学习器看起来都进行了欠采样,但并不会丢失重要信息。