《机器学习》 学习记录 - 第三章
第3章 线性模型
3.1 基本形式
给定由\(d\)个属性描述的示例\(x=(x_{1};x_{2};...;x_{d})\),其中\(x_{i}\)是\(x\)在第\(i\)个属性上的取值,线性模型(linear model)试图学得一个通过属性的线性组合来进行预测的函数,即
\(f(x)=w_{1}x_{1}+w_{2}x_{2}+...+w_{d}x_{d}+b\) (式3.1)
(式3.1)一般用向量形式写成
\(f(x)=w^{T}x+b\) (式3.2)
其中\(w=(w_{1};w_{2};...;w_{d})\)。\(w\)和\(b\)学得之后,模型就得以确定。
许多功能更为强大的非线性模型(nonlinear model)可以在线性模型的基础上通过引入层级结构或高维映射而得。
由于\(w\)直观表达了各属性在预测中的重要性,因此线性模型有很好的可解释性(comprehensibility)/可理解性(understandability)。
3.2 线性回归
线性回归试图学的一个线性模型以尽可能准确地预测实值输出标记。
3.2.1 当输入属性数目只有一个时
对离散属性,若属性值间存在“序”关系,可通过连续化将其转化为连续值。例如:
- 二值属性“身高”的取值“高”“矮”可转化为{1.0,0.0};
- 三值属性“高度”的取值“高”“中”“低”可转化为{1.0,0.5,0.0};
若属性值间不存在序关系,假定有\(k\)个属性值,则通常转化为\(k\)维向量。如:
- 属性“瓜类”的取值“西瓜”“南瓜”“黄瓜”可转化为(0,0,1),(0,1,0),(1,0,0).
若将无序属性连续化,则会不恰当地引入序关系,对后续处理如距离计算等造成误导。
线性回归试图学得
\(f(x_{i})=wx_{i}+b\),使得\(f(x_{i}) \simeq y_{i}\).(式3.3)
要确定式子中的\(w\)与\(b\),我们可以让其均方误差(亦称平方损失square loss)最小化。
均方误差有非常好的几何意义,它对应了常用的欧几里得距离,简称“欧式距离”(Euclidean distance)。
- 最小二乘法(least square method):基于均方误差最小化来进行模型求解的方法。
在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧式距离之和最小。
求解\(w\)和\(b\)使\(E_{(w,b)}=\sum_{i=1}^{m}(y_{i}-wx_{i}-b)^{2}\)最小化的过程,称为线性回归模型的最小二乘“参数估计”(parameter estimation).
我们可以将\(E_{(w,b)}\)分别对\(w\)和\(b\)求导,并令其导数为零,得到\(w\)和\(b\)最优解的闭式(closed-form)解。
3.2.2 当输入属性数目有多个时
此时,我们试图学得
\(f(x_{i})=w^{T}x_{i}+b\),使得\(f(x_{i}) \simeq y_{i}\).
这称为“多元线性回归”(multivariate linear regression),也称“多变量线性回归”。
对多元线性回归模型求解时可能会解出多个\(w\),它们都能使均方误差最小化。选择哪一个解作为输出将由学习算法的归纳偏好决定,常见的做法是引入正则化(regularization)项。
3.2.3 对数线性回归
为了便于观察,我们将线性回归模型简写为:
\(y=w^{T}x+b\).(式3.13)
假设我们认为示例所对应的输出标记是在指数尺度上变化,那就可以将输出标记的对数作为线性模型逼近的目标,即
\(ln(y)=w^{T}x+b\).(式3.14)
这就是“对数线性回归”(log-linear regression),它实际上是在试图让\(e^{w^{T}x+b}\)逼近\(y\).式(3.14)在形式上仍是线性回归,但实质上已是在求取输入空间到输出空间的非线性函数映射。
如图3.1所示,这里的对数函数起到了将线性回归模型的预测值与真实标记联系起来的作用。
更一般的,考虑单调可微函数\(g(·)\),令
\(y=g^{-1}(w^{T}x+b)\),(式3.15)
这样得到的模型称为“广义线性模型”(generalized linear model),其中函数\(g(·)\)称为“联系函数”。
广义线性模型的参数估计常常通过加权最小二乘法或极大似然法进行。并且\(g(·)\)连续且充分光滑。
显然,对数线性回归时广义线性模型在\(g(·)=ln(·)\)时的特例。
3.3 对数几率回归(logistic regression,亦称logit regression)
虽然对数几率回归的名字是“回归”,但它实际上确是一种分类学习方法。
- 它直接对分类可能性进行建模,无需事先假设数据分布,这样就避免了假设分布不准确所带来的问题。
- 它不仅预测出“类别”,而是可得到近似概率预测,这对许多需利用概率辅助决策的任务很有用。
若要使用线性模型进行分类任务,只需找一个单调可微函数将分类任务的真实标记\(y\)与线性回归模型的预测值联系起来即可。
3.3.1 二分类任务
首先考虑二分类任务,其输出标记\(y \in \{0,1\}\),而线性回归模型产生的预测值\(z=w^{T}x+b\)是实值。我们需要将实值\(z\)转换为0/1值。
最理想的是“单位阶跃函数”(unit-step function)(也叫Heaviside函数):
若预测值\(z\)大于零即判为正例,小于零则判为反例,预测值为临界值零则可任意判别。如图3.2所示。
但是从图3.2可以看出,单位阶跃函数不连续,并不能直接用作式(3.15)中的\(g^{-}(·)\)。
于是找到一个常用的、能在一定程度上近似单位阶跃函数的“替代函数”(surrogate function),对数几率函数(logistic function)(可简称为“对率函数”):
\(y=\frac{1}{1+e^{-z}}\)(式3.17)
可以从图3.2看出,对数几率函数是一种“Sigmoid”函数,即形似S的函数,它将\(z\)值
转化为一个接近0或1的\(y\)值,并且其输出值在\(z=0\)附近变化很陡。
将对数几率函数作为\(g^{-}(·)\)代入式(3.15)并做变换后,可以得到:
\(ln\frac{y}{1-y}=w^{T}x+b\)(式3.19)
若将\(y\)视为样本\(x\)作为正例的可能性,则\(1-y\)是其反例可能性。二者的比值\(\frac{y}{1-y}\)称为几率(odds),反映了\(x\)作为正例的相对可能性。对几率取对数则得到了“对数几率”(log odds,亦称logit)\(ln\frac{y}{1-y}\)
3.4 线性判别分析
线性判别分析(Linear Discriminant Analysis,简称LDA)是一种经典的线性学习方法,亦称“Fisher判别分析”.
LDA的思想:给定训练样例集,设法将样例投影到一条直线上,使得同类样例的投影点尽可能接近、异类样例的投影点尽可能远离;在对新样本进行分类时,将其投影到同样的这条直线上,再根据投影点的位置来确定新样本的类别。
LDA的二维示意图如图3.3所示:
3.5 多分类学习
在更多情形下,我们基于一些基本策略,利用二分类学习器来解决多分类问题。(通常称分类学习器为“分类器”(classifier))
考虑\(N\)个类别\(C_{1},C_{2},...,C_{N}\),多分类学习的基本思路是“拆解法”:将多分类任务拆为若干个二分类任务求解。
- 具体来说,先对问题进行拆分,然后为拆出的每个二分类任务都训练一个分类器;
- 在测试时,对这些分类器的预测结果进行集成以获得最终的多分类结果。
最经典的拆分策略有三种:
- “一对一”(One vs. One,简称OvO)
- “一对其余”(One vs. Rest,简称OvR),亦称OvA(One vs. All)
- “多对多”(Many vs. Many,简称MvM)
3.5.1 OvO
OvO将数据集中的N个类别两两配对,从而产生\(\frac{N(N-1)}{2}\)个分类任务。
在测试阶段,新样本将同时提交给所有分类器,我们将得到\(\frac{N(N-1)}{2}\)个分类结果,最终结果可通过投票产生:把被预测得最多的类别作为最终分类结果。
3.5.2 OvR
OvR是每次将一个类的样例作为正例、所有其他类的样例作为反例来训练\(N\)个分类器。
- 在测试时若仅有一个分类器预测为正类,则对应的类别标记为最终分类结果。
- 若有多个分类器预测为正类,则通常考虑分类器的预测置信度,选择置信度最大的类别标记作为分类结果。
图3.4给出了一个示意图:
容易看出,OvO的存储开销和测试时间开销通常比OvR更大。但在训练时,OvR的每个分类器均使用全部训练样例,而OvO每个分类器仅用到两个类的样例。因此,在类别很多时,OvO的训练时间开销通常比OvR更小。
3.5.3 MvM
MvM是每次将若干个类作为正类,若干个其他类作为反类。
MvM的正、反类构造必须有特殊的设计,不能随意选取。其中,有最常用的一种MvM技术:“纠错输出码”(Error Correcting Output Codes,简称ECOC)。
ECOC将编码的思想引入类别拆分,并尽可能在解码过程中具有容错性。
- 其中,类别划分通过“编码矩阵”(coding matrix)指定。常见的编码矩阵有二元码和三元码,前者将每个类别分别指定为正类和反类,后者在正、反类之外,还可指定“停用类”。图3.5给出了一个示意图。
- 一般来说,对同一个学习任务,ECOC编码越长,纠错能力越强。
- 理论上来说,对同等长度的编码,任意两个类别之间的编码距离越远,则纠错能力越强。在码长较小时可根据这个原则计算出理论最优编码。
- 并不是编码的理论性质越好,分类性能就越好。(机器学习问题涉及很多因素)
3.6 类别不平衡问题
前面介绍的分类学习方法都有一个共同的基本假设:不同类别的训练样例数目相当。
- 类别不平衡(class-imbalance):分类任务中不同类别的训练样例数目差别很大的情况。
从线性分类器的角度讨论:我们在用\(y=w^{T}x+b\)对新样本\(x\)进行分类时,是在用预测出的\(y\)值与一个阈值进行比较。
几率\(\frac{y}{1-y}\)反映了正例可能性与反例可能性之比值,阈值设置为0.5恰表明分类器认为真实正、反例可能性相同,即分类器决策规则为:
若\(\frac{y}{1-y} > 1\) 则 预测为正例(式3.46)
当训练集中正、反例数目不同时,令\(m^{+}\)表示正例数目,\(m^{-}\)表示反例数目,则观测几率为\(m^{+}/m^{-}\),由于我们通常假设训练集是真实样本总体的无偏采样,因此观测几率就代表了真实几率。于是,只要分类器的预测几率高于观测几率就应判定为正例,即:
若\(\frac{y}{1-y} > \frac{m^{+}}{m^{-}}\) 则 预测为正例(式3.47)
但我们的分类器基于式(3.46)进行决策,所以我们需要对其预测值进行调整,让其实际上是在执行式(3.47)。要做到这但,只需令
\(\frac{y_{'}}{1-y_{'}} = \frac{y}{1-y} * \frac{m^{+}}{m^{-}}\) (式3.48)
此为类别不平衡学习的一个基本策略————“再缩放”(rescaling).
但是“训练集是真实样本总体的无偏采样”这个假设往往并不成立,我们未必能有效地基于训练集观测几率来推断出真实几率。现有技术大体上有三类做法:
- 直接对训练集里的反类样例进行“欠采样”(undersampling)/“下采样”(downsampling),即去除一些反例使正、反例数目接近,然后再进行学习;
- 对训练集里的正类样例进行“过采样”(oversampling)/“上采样”(upsampling),即增加一些正例使得正、反例数目接近,然后再进行学习;
- 直接基于原始训练集进行学习,但在用训练好的分类器进行预测时,将式(3.48)嵌入到其决策过程中,称为“阈值移动”(threshold-moving)。
需注意以下几点:
- 欠采样法的时间开销通常远小于过采样法,因为前者丢弃了很多反例,使分类器训练集远小于初始训练集;后者增加了很多正例,其训练集大于初始训练集。
- 过采样法不能简单地对初始正例样本进行重复采样,否则会招致严重的过拟合。
过采样法的代表性算法SMOTE是通过对训练集里的正例进行插值来产生额外的正例。 - 欠采样法若随机丢弃反例,则可能丢失一些重要信息。
欠采样法的代表性算法EasyEnsemble是利用集成学习机制,将反例划分为若干个集合供不同学习器使用,这样在全局来看不会丢失重要信息。
再缩放是代价敏感学习(cost-sensitive learning)的基础。在代价敏感学习中将式(3.48)中的\(\frac{m^{+}}{m^{-}}\)用\(\frac{cost^{+}}{cost^{-}}\)代替即可,其中,\(cost^{+}\)是将正例误分为反例的代价,\(cost^{-}\)是将反例误分为正例的代价。