3.1 基本形式
1. 线性模型的基本形式
-
问题背景:假设每个示例由 个属性描述,记为
其中 是示例在第 个属性上的取值。
-
模型定义:线性模型试图通过属性的线性组合来进行预测,其形式为
这里, 是各属性对应的权重, 是偏置项。
-
向量表示:为了简洁,可以将上式写成向量形式:
其中 。当模型学得了合适的 和 后,预测函数 就完全确定了。
2. 线性模型的优点和作用
- 简单易建模:线性模型结构简单,便于实现和训练,同时也容易理解。
- 基本思想的体现:虽然模型形式简单,但很多更为复杂的非线性模型正是在此基础上,通过引入层级结构或进行高维映射而构建的。
- 良好的可解释性:权重向量 直观地反映了各属性在预测中的作用和重要性。例如,在“西瓜问题”中,假设学得的模型为
则可以解释为:
- 根蒂的权重最大(0.5),说明它对判断瓜是否好起决定性作用;
- 敲声的影响次之(0.3);
- 色泽的影响最小(0.2)。
3.2 线性回归
3.2.1 线性回归的基本思想
假设你有一个数据集
其中每个 是输入(特征),而 是输出(实际的目标值)。
我们希望找到一个简单的数学模型,用一个直线(如果只有一个输入变量)来近似预测 的值。这个直线可以写成:
这里, 是斜率, 是截距;它们就是我们要学习的参数。
3.2.2 如何“拟合”数据
衡量误差:均方误差
- 目标:希望模型预测 能尽量接近真实的 。
- 方法:我们用“均方误差”(Mean Squared Error, MSE)来衡量所有预测值与真实值之间的差异。具体公式为:
- 直观意义:把每个预测值与真实值的差(残差)平方后相加,差越大,误差越大;我们希望这个总误差尽可能小。
最小二乘法求解参数
方法:调整 和 使得上述误差 达到最小,这个过程称为“最小二乘参数估计”。
步骤:
- 对关于求偏导数:根据求导公式,对求偏导得:
- 对关于求偏导数:
令偏导数为0并化简
- 令,可得:
- 令,可得:
- 将代入上式:
- 设 ,进一步化简:
- 设 , b 也可以写成
3.2.3 多元线性回归
多元线性回归其实就是把“简单线性回归”的思想推广到多个输入特征上。下面我将从头讲解这个概念,帮助你理解其中的每个关键点。
多元线性回归的模型形式
假设每个样本有 个特征,记为
而对应的输出(目标值)是 (一个实数)。多元线性回归模型试图学得一个函数:
这可以用向量形式写成:
其中 是权重向量, 是截距项。
如何用矩阵表示?
为了方便同时处理所有样本,我们把数据组织成一个矩阵和一个向量:
- 设计矩阵 :将所有 个样本的特征排列成一个 的矩阵。为了把截距 一并考虑,我们通常在每个样本的特征向量后加一维常数1,构成扩展后的向量
这样,整个数据集就构成了一个 的矩阵 。
- 输出向量 :把所有样本的输出值写成一个 维向量
- 参数向量 :把权重和截距合并为
模型就可以写成:
对所有样本而言,预测值向量为:
最小二乘法求解参数
多元线性回归的目标是找到参数 使得预测值和真实值之间的残差(误差)的平方和最小,即最小化损失函数:
我们称这种方法为“最小二乘法”。
首先,我们把 展开,根据矩阵乘法分配律和转置的性质可得:
这里需要注意的是, 和 是相等的。因为 是一个标量(数),对于一个标量而言,它等于它的转置,即 。
所以
分别对各项求导
-
求 关于 的导数: 中不包含 ,就好比一个常数,所以 。
-
求 关于 的导数:我们可以把 看成一个固定的行向量(因为这里面没有 ),设 ,那么这一项就是 。
- 对于向量 ,,对 求导,就相当于分别对每个 求偏导。根据求导公式 ,所以 ,也就是 (这里是因为求导后要把行向量变成列向量,需要对取转置)。
-
求关于的导数
设,这是一个对称矩阵(因为)。令。
对求导时,根据求导公式
由于是对称矩阵,,所以,即。
求的导数,根据求导的加法法则,的导数等于各项导数之和,即:
令导数为零求解
令,得到:
如果可逆,在等式两边同时左乘,就可以得到。
直观理解
- 几何意义:你可以把每个样本看作在高维空间中的一个点,所有样本点构成一个“点云”。
- 拟合过程:多元线性回归其实是在这个高维空间中寻找一个“平面”(或更一般的超平面),使得所有样本点到这个平面的距离(残差)平方和最小。
- 正交投影:从几何上讲,计算 相当于把真实输出 在 的列空间(由输入特征张成的空间)上做正交投影。
注意事项
- 满秩要求:正规方程的求解要求 可逆,即 的各列不能线性相关。如果数据中存在多重共线性(特征之间高度相关),可能需要用正则化方法(如岭回归)来求解。
- 扩展性:多元线性回归可以看作是简单线性回归的扩展,只不过涉及更多变量。许多其他模型(比如广义线性模型、逻辑回归)也都是在这个框架的基础上进行修改和扩展的。
总结
多元线性回归就是用一个超平面来同时利用多个输入特征预测一个连续的输出值。我们通过构造设计矩阵 和输出向量 ,并利用最小二乘法求解闭式解:
从而得到预测函数:
这种方法不仅简单,而且在数学上具有很好的性质(例如凸性和几何解释),是机器学习和统计建模中最基础的工具之一。
现实任务中往往不是满秩矩阵。例如在许多任务中我们会遇到大量的变量,其数目甚至超过样例数,导致的列数多于行数,显然不满秩。此时可解出多个,它们都能使均方误差最小化。选择哪一个解作为输出,将由学习算法的归纳偏好决定,常见的做法是引入正则化(regularization)项。
3.3 对数几率回归
对数几率回归(Logistic Regression)虽然名字中有“回归”,但它实际上是一种用于分类的算法,特别适合二分类问题。
3.3.1 从线性回归到分类问题
- 线性回归:用来预测连续值,比如房价。模型形式为 。
- 分类问题:需要预测离散的类别(如0或1)。直接使用线性回归的输出(实数值)无法直接得到类别,需要将实数值转换为概率。
3.3.2 Sigmoid函数:把任意实数映射到[0,1]
- 问题:线性模型计算出的 可以是任何实数,而概率必须落在0到1之间。
- 解决方法:引入 Sigmoid(或对数几率)函数,其公式为
- 函数特点:
- 当 很大时,非常小,趋近于1;
- 当 很小时,非常大,趋近于0;
- 当 时,(可作为分类的中间阈值)。
这样,通过 Sigmoid 函数,我们就把线性模型的输出转化为一个概率值。

3.3.3 从概率到对数几率(Log Odds)
- 几率(Odds):定义为正类概率与负类概率的比值,即
例如,当 时,几率为 0.8/0.2 = 4,表示正类的可能性是负类的4倍。
- 对数几率(Log Odds或Logit):对几率取自然对数,得到
- 关键等式:将对数几率和线性模型联系起来有
这说明,实际上我们是让模型用一个线性函数去预测样本属于正类的对数几率。
3.3.4 极大似然估计:如何确定参数
目标:找出最优的参数 和 ,使得模型预测出的概率与样本的真实标签尽可能匹配。
极大似然原理
- 在对数几率回归这类分类模型中,我们的目标是找到最优参数(如权重向量 和偏置 ),使得模型预测的概率与样本真实标签尽可能匹配。
- 极大似然估计的原理是:对于每个样本,希望模型预测出真实标签对应的概率尽可能高。假设样本之间相互独立,那么所有样本出现的联合概率就是每个样本出现概率的乘积。
定义概率
-
由 进行求解:
- 首先对等式两边取指数,得到 。
- 然后通过交叉相乘进一步变形:。
- 接着展开式子:。
- 再将含有 的项移到等式左边:。
- 提取公因式 :。
- 最后求解 ,即 ,也就是 。
- 从另一个角度看, 其实是将线性回归模型的输出 通过Sigmoid函数 (这里 )进行转换,从而得到样本属于正类的概率,这种转换使得线性回归模型能够应用于二分类任务中,输出具有概率意义的结果。
-
正类概率:
- 负类概率:
似然函数
设样本集有 个样本 。对于第 个样本,当 时,其出现的概率就是 ( 是样本 对应的正类概率);当 时,其出现的概率就是 。
极大似然原理的核心思想是,找到使样本数据出现概率最大的模型参数。因为样本之间相互独立,所以所有样本出现的联合概率(即似然函数 )是每个样本出现概率的乘积。
对于这个样本,似然函数可以表示为:
- 当时,,即此时样本出现概率就是正类概率。
- 当时,,即此时样本出现概率就是负类概率。
对数似然函数
为了便于计算和处理,通常对似然函数 取自然对数,得到对数似然函数 。原因主要有两点:
- 数值稳定性:连乘运算在数值计算上可能不稳定,多个较小的概率值相乘可能导致数值下溢等问题。而对数函数将乘法运算转化为加法运算,可避免这类问题。
- 不改变极值点:对数函数是单调递增的,对似然函数取对数后不会改变函数的极值点,在后续优化求解参数时,使用对数似然函数和似然函数的结果是一致的。
对 取自然对数:
这样就得到了公式:
损失函数
对数几率回归中正类概率 的表达式
在对数几率回归中,假设线性回归部分为,令(即将权重向量和偏置合并为一个向量 ),并令(在特征向量基础上增加一个常数项,以便与进行矩阵乘法运算),那么线性回归部分可表示为 。
同时,正类概率的表达式为 。
将 代入原对数似然函数
把代入 :
- 对于这一项:
- 对于这一项:
先计算
,
则
。
计算对数似然函数的新形式
将上述两项相加:
在优化中,我们通常不直接最大化对数似然,而是最小化负对数似然(loss function)。因此我们令:
转化为
(这里的 实际上代表的是负对数似然,即损失函数)的过程。
3.3.5 优化方法:如何找到最佳参数
-
梯度下降:计算损失函数对参数的梯度,然后按照梯度的方向逐步调整参数,使损失降低。一个常见的更新公式是: 其中:
- 表示参数(可能是向量或矩阵)。
- 称为学习率(learning rate),决定了每一步走多远。
- 是当前点的梯度。
- 这里的 通常是我们希望最小化的损失函数,它衡量了模型预测和真实数据之间的误差。
- 是函数的自变量(例如模型的参数),而 表示当前这一组参数。
- 因此, 就是指在当前参数 下,损失函数对各个参数的变化率(或者说“斜率”)。
-
牛顿法:除了利用梯度外,还利用了二阶导数(Hessian矩阵)的信息,使参数更新更加迅速和准确,其更新公式为:
- 公式概念:牛顿法会用到这样一个公式:
- 是当前的参数(你当前的位置)。
- 是梯度,告诉你哪边下坡最快, 为 Hessian 矩阵。
- 是二阶导数(曲率),告诉你坡的弯曲程度。
- 的作用就像根据坡的弯曲来调整你迈步的长度。
- 公式概念:牛顿法会用到这样一个公式:
梯度下降 VS 牛顿法:
- 计算成本:牛顿法需要计算二阶导数(在多维情况下是一个矩阵),当参数很多时,计算这个矩阵及其逆矩阵会比较耗时。
- 适用范围:对于问题规模较小或中等的场景,牛顿法可以非常快地收敛;而在高维问题中,可能会选择一些近似牛顿法的方法(比如拟牛顿法)来降低计算负担。
3.4 线性判别分析
线性判别分析(Linear Discriminant Analysis,简称LDA)是一种经典的线性学习方法,在二分类问题上因为最早由[Fisher, 1936]提出,亦称“Fisher判别分析”。

3.4.1 LDA的目标是什么?
- 目的:在分类问题中,我们希望能把不同类别的数据区分开来。LDA的目标就是找一条“最优直线”,把数据投影到这条直线上:
- 同一类的数据:在投影后尽可能聚集在一起(也就是“紧凑”)。
- 不同类的数据:在投影后尽可能分开(也就是“分离”)。
3.4.2 如何衡量“紧凑”和“分离”?
-
类内散度(紧凑度):用来衡量同一类别内部数据点彼此的分散程度。如果一类数据投影后方差小,说明它们很紧凑。
-
类间散度(分离度):用来衡量不同类别的中心(平均值)之间的距离。如果两个类别的中心在投影后相距较远,就说明区分效果好。
LDA的目标就是要最大化类间散度,同时最小化类内散度。用一个比率表示就是:
更具体地写成公式就是:
其中:
- 是“类间散度矩阵”,描述不同类别中心之间的差异;
- 是“类内散度矩阵”,描述同一类别内部数据的分散程度;
- 是我们要找的投影方向(向量)。
3.4.3 如何找到最佳的投影方向 ?
-
构造散度矩阵:
- 类内散度矩阵 :把每个类别内所有数据点到该类别均值的偏差“加起来”。
- 类间散度矩阵 :通过不同类别的均值计算出来,反映类别中心之间的差异。
-
最大化比率:目标是找一个方向 ,使得比率 最大。数学上,通过求解一个广义特征值问题,我们可以得到一个闭式解:
这里, 和 分别是两类数据的均值向量。直观上看,这个公式说明我们要根据类内散布(用 来描述)和类别中心的差异()来确定最优的投影方向。
-
多分类情况:当有不止两类数据时,LDA会将数据投影到一个低维空间(通常维度为类别数减1),这样不仅可以达到分类效果,还能起到降维的作用。
3.4.4 总结
- 简单来说:LDA是一种方法,它通过找到一个或一组最优的方向,把数据从高维空间投影到低维空间,同时保证相同类别的数据投影后尽量聚集,不同类别的数据投影后尽量分开。
- 优势:这种方法不仅帮助我们更好地区分不同类别,还能降低数据的维度,使后续的计算和分析更加简单高效。
- 应用场景:在很多需要降维和分类的场合(例如人脸识别、文本分类等),LDA都是一个经典且有效的工具。
3.5 多分类学习
3.5.1 多分类问题的背景
在实际问题中,我们往往需要把数据分成多个类别,比如识别动物图片时分成“猫”、“狗”、“鸟”等。如果你手上只有一种能区分两类的分类器(比如判断“猫”还是“非猫”),那怎么办呢?多分类学习的常见思路就是把一个多类别问题拆解成多个二分类问题,然后将多个二分类器的结果综合起来得到最终的多分类结果。
3.5.2 拆解策略
(1) 一对一(One vs. One, OvO)
- 思路:将所有类别两两配对,每一对训练一个二分类器。
- 例子:如果有 4 个类别(C₁, C₂, C₃, C₄),就会训练 4×3/2 = 6 个分类器,比如一个分类器专门区分 C₁ 和 C₂,一个专门区分 C₁ 和 C₃,以此类推。
- 预测时:每个分类器给出一个预测(比如投票),最终通过多数票的方式选出最终的类别。
(2) 一对其余(One vs. Rest, OvR)
- 思路:对每个类别,都训练一个分类器,该分类器将该类别作为正类,其余所有类别合并为负类。
- 例子:有 4 个类别,就训练 4 个分类器。比如,一个分类器负责判断“是不是 C₁”,另一个判断“是不是 C₂”,依此类推。
- 预测时:把新样本分别放到这 4 个分类器中,通常选择给出最高置信度(概率最高)的那个类别作为最终预测结果。

(3) 多对多(Many vs. Many,MvM)及纠错输出码(Error Correcting Output Codes, ECOC)
- 思路:这种方法将多分类问题设计成多个二分类问题,但不是简单地“一对一”或“一对其余”,而是通过一个编码矩阵为每个类别设计一个“代码”。
- 编码:
- 每个类别都用一个二进制或三进制的编码表示(例如用 +1、-1,有时还可以有 0 表示“停用”)。
- 比如,类别 C₁ 的编码可能是 ( +1, -1, +1, -1, +1 ),而 C₂ 的编码可能是 ( -1, +1, -1, +1, -1 )。
- 训练:
- 根据编码矩阵,将每一次编码(即每一列)看作一个二分类问题,训练一个分类器。
- 比如,在某一列中,所有标记为 +1 的类别样本作为正例,标记为 -1 的作为反例,0 表示这一列不参与训练。
- 解码(预测时):
- 新样本经过所有分类器后,会得到一个预测编码。
- 然后,将这个预测编码与每个类别在编码矩阵中预先设定好的编码进行比较,选择距离最接近(即错误最少)的那个类别作为最终预测结果。
- 优点:由于编码设计具有“纠错”能力,即使部分分类器预测出错,只要整体编码仍接近某个类别的编码,最后依然能得到正确的分类结果。

MvM最常用的方法是ECOC,它的核心是两步:编码和解码。
(1) 编码:给每个类别贴标签
假设我们有4个类别:猫、狗、鸟、鱼。
设计一个“编码矩阵”,比如:
| 类别 | 分类器1 | 分类器2 | 分类器3 |
|---|---|---|---|
| 猫 | 1 | -1 | 1 |
| 狗 | -1 | 1 | 1 |
| 鸟 | 1 | -1 | -1 |
| 鱼 | -1 | 1 | -1 |
这里的1表示“正类”,-1表示“反类”。每个分类器负责不同的组合:
- 分类器1:判断是否是“猫或鸟”(正类)vs.“狗或鱼”(反类)。
- 分类器2:判断是否是“狗或鱼”(正类)vs.“猫或鸟”(反类)。
- 分类器3:判断是否是“猫或狗”(正类)vs.“鸟或鱼”(反类)。
(2) 解码:根据结果猜答案
假设测试样本是一只猫,经过3个分类器预测的结果是[1, -1, 1]。将这个预测结果和编码矩阵里的每一行对比:
- 猫的编码是[1, -1, 1]→距离为0(完全匹配)。
- 狗的编码是[-1, 1, 1]→距离为3。
- 鸟的编码是[1, -1, -1]→距离为1。
- 鱼的编码是[-1, 1, -1]→距离为3。
距离最小的就是正确答案(猫)。
举个实际例子
假设你要区分动物的叫声,类别是猫、狗、鸟、鱼(鱼不会叫,但假设能测声音特征)。
步骤1:训练分类器
- 分类器1:判断声音是否像猫或鸟。
- 分类器2:判断声音是否像狗或鱼。
- 分类器3:判断声音是否像猫或狗。
步骤2:预测未知声音
如果测试样本是猫叫:
- 分类器1说“是猫或鸟”(1) 。
- 分类器2说“不是狗或鱼”(-1) 。
- 分类器3说“是猫或狗”(1) 。
预测编码是[1, -1, 1],对比编码矩阵后发现它和猫的编码一致,所以答案是猫。
3.5.3 小结
- 拆解法:多分类问题常常通过拆解为多个二分类问题来解决,然后综合这些二分类器的结果。
- OvO 与 OvR:OvO训练的分类器更多,但每个分类器只用到两个类别的数据;而 OvR只训练 N 个分类器,但每个分类器用到了所有数据。
- ECOC:利用编码思想构造多个二分类器,具有一定的容错能力,适合于复杂的多分类任务。
3.6 类别不平衡问题
3.6.1 问题背景
- 类别不平衡:通常假设训练数据中各类别样本数差不多,但实际中常出现一种类别样本远少于另一种的情况(例如正例只有 2 个,而反例有 998 个)。
- 问题表现:如果直接用这样的数据训练模型,模型可能会简单地把所有样本都预测为数量多的那一类,这样虽然在整体上“准确率”很高,但却根本无法识别少数类(比如正例)。
3.6.2 分类决策与阈值问题
- 标准决策:常见的分类器(比如用线性分类器 )通常设定一个阈值(例如 0.5),当预测概率大于 0.5 时判断为正例,否则为反例。这个 0.5 对应的是正例和反例被认为概率相等(即正负比为1)。
- 类别不平衡下的调整:
- 在不平衡数据中,真实的正反例比例(观测几率)是 ,比如2/998。
- 因此,我们希望决策规则不是简单地比较 是否大于1,而是要比较它与真实比例 的大小。如果预测的正例几率超过实际比例,才判断为正例。
3.6.3 再缩放(Rescaling)策略
- 再缩放思想:为了使分类器在不平衡数据下能做出合适的判断,我们可以对分类器的输出进行调整,即用下面的公式:
这里:
表示原始预测的“几率”(正例与反例的比值)。 - 乘上后,相当于把预测的几率“拉伸”或“压缩”,使得比较时正例要求更高或更低,来弥补样本数的差异。
3.6.4 处理类别不平衡的三种基本方法
-
欠采样(Undersampling):
- 从样本数较多的那一类(比如反例)中随机去除一部分,使得两类样本数更接近。
- 优点:减少数据量,训练速度更快;缺点:可能丢失部分有用信息。
-
过采样(Oversampling):
- 增加少数类样本的数量,使其和多数类更平衡。
- 注意:不能简单地复制少数类样本,否则容易过拟合。常用方法如SMOTE,会通过对少数类样本进行插值来生成新的样本。
-
阈值移动(Threshold-moving):
- 直接在原始不平衡数据上训练分类器,但在预测时调整决策阈值(也就是应用上述再缩放公式),使得判定标准适应真实的正反例比例。
3.6.5 与代价敏感学习的关系
- 代价敏感学习:考虑不同类型错误的代价不同。例如,把正例误判为反例可能代价较高,那么我们可以在决策时用
和 来代替 和 进行调整。 - 实际上,再缩放就是代价敏感学习的一种具体实现方式。
3.6.6 总结
在类别不平衡问题中,由于训练样本数量严重不平衡,直接训练的模型可能只学会预测数量多的那一类。为了解决这个问题,我们可以:
- 调整训练数据(欠采样或过采样),
- 或者在预测时调整决策阈值(阈值移动、再缩放),
- 甚至进一步考虑不同误分类代价(代价敏感学习)。