前言
速度下来了,感觉找到了一个舒适的学习速度。还是欢迎各位大佬指正
第三章
本章主要说明了什么是线性模型以及在回归、分类任务中如何应用线性模型。
3.1 线性模型
线性模型是机器学习中最基础且应用最广泛的模型之一。线性代数作为数学中最成熟的工具之一,因其简单性和普适性,成为建模时的首选方法。
模型定义
给定一个由 d 个属性描述的示例 xi=(xi1,xi2,…,xid),线性模型通过以下线性函数进行预测:
f(xi)=k=1∑dwkxik+b
其中:
- wk 是第 k 个属性的权重,反映该属性的重要性;
- b 是偏置项(bias),用于调整模型的输出范围。
为了简化表达,通常使用向量形式:
f(xi)=wTxi+b
其中 w=(w1,w2,…,wd) 是权重向量。
3.2 线性回归
线性回归是一种基础且重要的机器学习方法,用于学习线性模型。其核心目标是:训练得到的模型在给定数据集上,其性能度量均方误差(MSE)尽可能小。
均方误差在第2.1节中已简要介绍,如果印象模糊,建议回顾上一节内容。
但在计算MSE之前,我们需要处理数据预处理步骤。原始数据中,部分属性值可能不是数值类型,无法直接参与数值计算。因此,我们需要首先将这些属性值映射转换为数值形式。现在假设某个属性有l个可取值:
- 对于有序的属性,可以挑选l个实数,按照序关系一一映射,比如属性值{胖,瘦}可以映射为{0,1}
- 对于无序的属性,我们只能将其映射为l个向量。比如颜色属性可取值有{红,绿,蓝},那么可以映射为{(1,0,0),(0,1,0),(0,0,1)}。在计算MSE的时候该属性值会拓展为l个值来参与计算
- 比如某个实例有胖瘦和颜色两个属性,那我们表达该实例时用的是四维向量x=(0,1,0,0),表示红胖。
将所有属性值都映射为实数后,我们就可以表示MSE了(这里我们省略m,因为最后求导为零,MSE的常系数都不重要)。
MSE=i=1∑m(f(xi)−yi)2=i=1∑m(yi−wTxi−b)2
接下来我们需要找到向量w和偏置项b来使得MSE最小,这种使用线性拟合数据且使均方差最小的方法也被称为最小二乘法。
为了方便计算,全部使用向量来表示MSE,构造矩阵:
w^Xy=(w;b)=x11x21⋮xm1x12x22⋮xm2……⋱…x1dx2d⋮xmd1111=(y1,y2,…,ym)
于是MSE可以写成
MSE(w^)=(y−Xw^)T(y−Xw^)
现在要找MSE的最小值,需要对w^求导,但在此之前我们对MSE展开有
MSE=(y−Xw^)T(y−Xw^)=yTy−yTXw^−w^TXTy+w^TXTXw^第二项和第三项是标量,转置等于其自身,因此=yTy−2w^TXTy+w^TXTXw^
此时再对w^求导有
∂w^∂MSE=0−2XTy+2XTXw^=2XT(Xw^−y)
最后一项求导用到了二次型求导的结论(∂x∂xTAx=(A+AT)x)。
对于向量的求导
本节中出现了标量对向量的求导,这实际上是标量对向量各分量求导后组合成向量的简写形式,即: ∂x∂y=(∂x1∂y,…,∂xn∂y)T
这一结果称为梯度(或切空间上的微分形式)。
现在我们来求解 ∂w^∂MSE=0,即
XT(Xw^−y)XTXw^=0=XTy
这本质上是解矩阵方程。按照一般数学方法,我们会根据线性方程组理论求解通解与特解:
- 根据线性,将解分为通解和特解
- 通解通过极大线性无关组表示(当XTX不满秩时存在无穷多解)
但在机器学习中,通常通过引入正则化来隐式地根据归纳偏好确定一个特解。这种方法的优势在于:
- 几乎没有满秩地情况:在许多任务中属性会非常多,甚至多过样本数
- 计算效率更高:避免直接处理不满秩矩阵的复杂情况
- 泛化性能更好:通过正则化项抑制过拟合
关于正则化的补充说明
虽然教材未给出具体示例,但其核心思想是通过人为添加约束(即归纳偏好),将解空间收缩到符合先验假设的特解上。例如:
L2正则对应min∥w∥22,偏好小权重解
重点:线性回归并非只能处理线性模型。某些非线性模型若能通过变量替换转化为线性形式,仍可使用线性回归求解。
若目标变量 y 与特征 x 的关系可通过一个单调可微函数 g(⋅) 线性化,即满足:
y=g−1(wTx+b)或等价地g(y)=wTx+b,
则可通过以下步骤求解:
- 线性部分:对变换后的目标变量 g(y) 与特征 x 进行线性回归,求解权重 w 和偏置 b;
- 逆变换:通过 g−1(⋅) 将预测值映射回原始空间,得到 y 的最终预测。
这种线性模型被称为广义线性模型。
到此为止我们已经学习了回归任务的线性模型,那么对于分类任务能否也用线性模型来描述呢?答案是可以的,且关键就在上面说的广义线性模型。
我们已知分类任务也是通过模型对样本打分,再根据阈值进行分类。因此,我们的目标是找到一个映射函数 g,将连续的预测值 z=wTx+b 转化为离散的。
以二分类任务为例,其真实标记为离散值 y∈0,1。最直观的方法是使用阶跃函数:
g(z)=⎩⎨⎧0,0.5,1,z<0z=0z>0
其中,0.5 表示当预测值 z 等于阈值时,可随机选择类别。然而,阶跃函数存在不连续、不可微的问题,因此我们改用连续可微的对数几率函数(Logistic Function):
y^=g(z)=1+e−z1
将线性预测 z=wTx+b 代入,可得对数几率形式:
ln(1−y^y^)=wTx+b
正例的取值是1,因此可以将模型输出y^解释为正例的概率,即:
P(y=1∣x)=y^
相应地,反例概率为:
P(y=0∣x)=1−y^
因此ln1−y^y^的意义就是正例相对反例的概率的对数,也称对数几率(比值就是几率)。
该方法有以下几点好处:
- 不需要假设数据的分布
- 不仅能预测类别,还可输出概率化结果(P(y=1∣x)和P(y=0∣x))
- 对数几率函数是光滑凸函数,保证优化过程能收敛到全局最优解
在回归任务中我们使用最小二乘法给出了参数wT和b,但不要忘记我们现在处理的是分类任务,分类任务更适用最大似然估计(MLE),目标是最大化观测数据的似然函数。给出似然函数的对数
l(w,b)=i=1∑mlnp(yi∣xi;w,b)
为了便于计算,现在做代换:
βx^p1(x^;β)p0=1−p1=(w,b)=(x;1)=p(y=1∣x^;β)=p(y=0∣x^;β)
此时有p(yi∣xi;w,b)=yip1(x^;β)+(1−yi)p0(x^;β),可将似然函数对数简化为
l(β)=i=1∑m(−yiβTx^i+ln(1+eβTx^))
接下来就是数值求解的活了(如梯度下降、牛顿法),找到最优解β就找到了对应的参数。
3.3 线性判别分析
线性判别分析(LDA)(又称Fisher判别分析)是一种经典的有监督线性学习方法。其核心思想是通过线性变换 W 将样本空间 X 映射到低维空间 X′,并满足以下目标:
- 同类样本聚集:同一类的样本在变换后尽可能靠近。
- 异类样本分散:不同类的样本在变换后尽可能分离。
线性变换W
书中用词是投影,但我被这个迷惑成投影算符然后混淆了一段时间……于是我就把它改成线性变换了。如果不知道什么是线性变换可以把它理解为矩阵运算WTx=y。如果W是d×p矩阵,那么这个线性变换把一个d维的向量变成了p维的向量,即书上的“投影”。
可以看到我们这里用到了线性空间“距离”的概念,它由内积给出:针对两个列向量a,b,其距离的平方由下式给出:
∣∣a−b∣∣2=(a−b)T(a−b)
所谓聚,就意味着有一个中心点,同一类的样本变换后分布在该点周围,一个比较好的选择是用样本期望的变换结果来表示,为此我们先给出均值向量的定义:
μ=(E(x1),E(x2),…,E(xd))
即所有分量的期望组成的向量,此时μ∈X。而为了表述样本距离期望的偏离程度,一个朴素的观点是推广方差,计算所有样本到均值向量的距离平方再求和。这种计算方法确实能够得到一个用于比较离散程度的值(且能够用于计算),但是它有几个缺点:
- 丢失了方向信息
- 丢失了属性(维度)之间的关系
因此一个更好的工具是散度矩阵(没有归一化的协方差矩阵),它包含了上类三个信息。
散度矩阵表示为:
S=x∈X∑(x−μ)(x−μ)T
得到的是一个d×d的方阵。其对角线的元素正比于对应属性的方差,其他元素正比于协方差。衡量了样本点相对于均值向量μ的分散程度。
S的迹:
可以计算,其实迹Tr(S)就是我们那个朴素的推广“方差”。上文之所以说正比于正是因为没有归一化。
回到LDA上,我们最终的目标是让同一类的散度矩阵尽可能得小;此外如果我们有一个所有样本的总均值向量,那么我们也希望让所有类的均值向量尽量相对这个总均值向量尽可能地分散——也即散度矩阵尽可能地大。
假设我们有C个类别,可以定义类内散度矩阵:
Sw=i=1∑CSi=i=1∑Cx∈Xi∑(x−μi)(x−μi)T
其中Si是第i类的散度矩阵,对称阵,他表示了所有类内散度地综合,越小越好。
类似的,我们还能定义类间散度矩阵:
Sb=i=1∑CNi(μ−μi)(μ−μi)T
其中Ni是第i类样本数,代表该类的权重,对称阵。衡量了不同类别均值向量相对于总均值向量μ的分散程度,越大越好。
有了类内散度矩阵 Sw 和类间散度矩阵 Sb 后,我们可以构造一个目标函数,通过调整线性变换 W 使其达到极值。一个常用的目标函数是:
J(W)=det(WTSwW)det(WTSbW)
当目标函数 J(W) 取得最大值时,对应的 W 就是最优变换。特别地,当 W 退化为1维向量 w 时,目标函数简化为:
J(w)=wTSwwwTSbw
目标函数 J 的数学意义
1. WTSbW 表示投影后的类间散度矩阵,其核心思想是通过合同变换(尽管 W 不可逆,严格来说并非合同变换)保持矩阵的对称性和半正定性。
2. 行列式的意义:
det(⋅) 用于衡量矩阵所包含的离散信息,因此目标函数通过行列式比值的形式,最大化投影后类间散度与类内散度的相对大小。
现在我们来求解最优线性变换W使得目标函数取得最大值。我们将分三步走
首先我们先考虑Rayleigh Quotient问题,即假设此时W退化为w。考虑到J(w)=wTSwwwTSbw本身具有一定的对称性,比如我们解出一个解w0那么任何一个常数乘上去cw0都会是目标函数的解,因此我们可以引入约束来限定解,一个常用的约束就是wTSww=1。
因为引入了约束,现在我们通过拉格朗日乘数法求解该问题,即对辅助函数
L(w,λ)=wTSbw−λ(wTSww−1)
求梯度,并令其为0有:
∇L(w,λ)=∂w∂(wTSbw−λ(wTSww−1))=2Sbw−2λSww
令其为0求得2Sbw−2λSww=0⇒Sbw=λSww。
这个就是广义特征值问题。
- 求解是简单的,两边乘以Sw−1就变成了标准特征值问题。
- 另外如果两边同时乘以wT再用到约束wTSww=1,特征值方程变为wTSbw=λ=J(w)。因此我们需要找的是特征值最大的那个特征向量。
接下来回到线性变换W上,直观的看W含有多个列向量,我们可以一个一个去找最优向量,其中w1已经找到;然后去找第二个列向量w2,即选择Rayleigh Quotient的次大特征值对应的特征向量,但是需要做正交,这个正交要求是因为不能和w1线性相关。以此类推,找到前p个广义特征值,和一组正交向量,最后就能构造成最优W.
最后说明一下为什么贪心找最大就行了,因为特征值的乘积就是行列式的值。
Sw正交
更准确的说法,wi之间最好是Sw正交(则此时Sw是度规,内积的计算方式为u⋅v=uTSwv)。这是因为我们更希望数据在类内散度结构是线性无关的,而不是普通欧氏空间上。
另外,书上也给出了基于迹的目标函数:
J(W)=Tr(WTSwW)Tr(WTSbW)
可以类似的证明,其最后还是会回到广义特征值问题,且方程都一样。两者只是在优化目标上各有侧重。
3.4 多分类学习
现实世界中的分类任务几乎都是多分类问题,而研究者更偏好处理二分类任务,因为其具有模型简单和理论明确两大优势。因此,我们需要一种通用方法将二分类任务的解决方案推广到多分类场景,这正是本节要解决的核心问题。
经典的方法有三种:
- 一对一(OvO)
- 一对其余(OvR)
- 多对多(MvM)
设现在训练集面对N分类任务,使用Ci表示第i类。
一对一(OvO)
OvO 的核心思想非常简单粗暴,它将多分类任务分解为若干个二分类任务。具体说来:
- 构建分类器:针对两个类 Ci 和 Cj 训练得到一个二分类器 fij,对所有类组合遍历后共生成 (2N)=2N(N−1) 个分类器。
- 预测阶段:当需要对新样本进行预测时,OvO 会将样本提交给所有分类器。
- 投票决策:每一个分类器fij都给出一个预测,统计哪一个类被预测的次数最多,那新样本就属于哪一类
- 优点在于简单直观,训练模型的开销较小
- 缺点在于得到的模型数量较多,存储和测试开销较大。
一对其余(OvR)
OvR 的思路则更加直接,它每次将一个类别作为正例,其余所有类别作为反例,训练一个二分类器。具体说来:
- 构建分类器:对于每一个类 Ci,让其作为正类,其余的类作为反类,训练出一个二分类器 fi。对所有类别遍历后共生成 N 个分类器。
- 预测阶段:当需要对新样本进行预测时,OvR 会将样本提交给所有 N 个分类器。
- 置信度决策:最终的类别结果通常选择分为正类中置信度最高的分类器对应的类别。
- 优点:分类器数量少,存储和预测开销小。
- 缺点:对多类别重叠数据敏感(多个分类器可能同时给出高置信度)。
多对多(MvM)
MvM 是一种灵活的策略,每次将若干个类别作为正类,若干个其他类别作为反类构建分类器。OvO 和 OvR 是 MvM 的两种特例。纠错输出码 (ECOC) 是 MvM 中最常用的技术。
ECOC 核心思想:
为每个类别设计唯一编码,利用编码的纠错能力提升分类稳健性。具体流程分为三阶段:
-
编码阶段(关键人为设计步骤):
- 对数据集进行 M 次划分,每次划分将部分类作为正类(其余为反类),要求生成的二分类器 fi 满足该分类结果。
- 例如:第一次划分 {C1,C2} vs {C3,C4},第二次划分 {C1,C3} vs {C2,C4},依此类推
- 对类别 Ci,每个分类器 fj 输出 ∈{0,1},按顺序组成其编码
- 如三个分类器对 C1 的编码可能是
[1, 0, 1]
- 将所有类别的编码按行排列,形成编码矩阵 H∈{0,1}N×M
- 矩阵第 j 列对应分类器 fj 对所有类别的预测值
- 注意:该阶段还没有进行训练,只是在指定编码规则
-
训练阶段:
根据编码矩阵 H 的划分规则,训练 M 个二分类器 {f1,f2,...,fM}。
-
解码阶段:
- 新样本输入所有分类器,得到预测编码 P=[f1(x),f2(x),...,fM(x)]
- 计算 P 与每个类别编码 Hi 的距离,二者距离计算方式选择其一即可:
- 海明距离:∑j=1MI(Pj=Hij)
- 欧氏距离:∑j=1M(Pj−Hij)2
- 选择与预测编码距离最小的类别编码所对应的类别作为最终的预测结果。
关键点:
- 编码矩阵设计直接影响模型性能,常用方法包括:
- 二元码:仅含 {0,1},上述流程就是二元码。
- 三元码:扩展为 {−1,0,1},其中 0 表示不参与预测。
- 纠错能力:即使部分分类器预测错误(编码位翻转),仍可能通过距离最小化正确分类。
3.5 类别不平衡问题
在之前的分类方法介绍中,我们默认假设了不同类别的训练样例数量均衡,但实际场景中常出现类别不平衡(class imbalance)问题。此时模型容易在多数类上表现很好,而在少数类上表现极差。
例子说明:
若构建疾病诊断系统时,训练集中 99% 样本为健康人(class0),仅 1% 为病人(class1)。若模型简单将所有样本预测为 "健康",其准确率为99%:
尽管指标数值高,但模型对关键类别(病人)的查全率(Recall=TP+FNTP=0%)完全失效,导致实际应用价值为零。
因此本节介绍4种方法来处理类别不平衡的问题:
- 再放缩:再缩放是一种基于代价敏感学习 (见2.1.4节) 的思想。 它的核心思想是,让学习器在训练时调整分类阈值来宽容少数类,严苛多数类。
- 比如线性回归中,我们用几率1−yy>1作为正例判断依据,这是因为我们假设了正类数量和反类数量几乎一致。如果不一致设正类数量和反类数量分别为m+,m−,那么判断依据应当是1−yy>m−m+。
- 我们用m−m+代替真实分布概率是因为我们相信训练集满足真实分布,但这往往是达不到的,所以再缩放法多数停留在理论上,实际效果往往有限
- 欠采样:欠采样是指去除一些多数类样本,使得正反例样本比例接近平衡,然后再进行学习。
- 常见方法是 EasyEnsemble 算法,通过集成学习的思想,多次欠采样并训练集成模型。
- 优点是简单快速
- 缺点是可能丢失多数类样本中的一些重要信息,导致学习器学到的模型不够全面。
- 过采样:过采样是指增加一些少数类样本,使得正反例样本比例接近平衡,然后再进行学习。
- 常见方法是SMOTE (Synthetic Minority Over-sampling Technique): 合成少数类过采样技术。 通过插值的方式,在少数类样本之间合成新的样本。
- 优点是保留了所有原始样本的信息,避免了信息丢失
- 缺点是过采样可能会导致过拟合
- 阈值移动:阈值移动是一种不改变训练集样本分布,而是调整分类器决策阈值的方法。 它基于再缩放的思想,但更加直接。
- 核心思想就是分类的时候调整阈值,使其往少数类移动,尽可能把样本识别为少数类
- 优点是简单易行
- 缺点是最佳阈值难以确定
4种方法的关系
再放缩与阈值移动:
均基于代价敏感思想,不改变数据分布,后者是前者的实践简化版。
欠采样与过采样:
直接修改数据分布,但可能引入信息丢失(欠采样)或过拟合(过采样)
本文由博客一文多发平台 OpenWrite 发布!