【统计方法】基础分类器: logistic, knn, svm, lda

均方误差(MSE)理解与分解

在监督学习中,均方误差衡量的是预测值与实际值之间的平均平方差:

MSE = E [ ( Y − f ^ ( X ) ) 2 ] \text{MSE} = \mathbb{E}[(Y - \hat{f}(X))^2] MSE=E[(Y−f^(X))2]

MSE 可以分解为三部分:

MSE = Bias 2 ( f ^ ( x 0 ) ) + Var ( f ^ ( x 0 ) ) + Var ( ε ) \text{MSE} = \text{Bias}^2(\hat{f}(x_0)) + \text{Var}(\hat{f}(x_0)) + \text{Var}(\varepsilon) MSE=Bias2(f^(x0))+Var(f^(x0))+Var(ε)

  • Bias:预测值与真实值期望的偏离
  • Variance:模型在不同训练集下预测结果的波动
  • Irreducible error:不可消除的噪声

理解偏差-方差权衡有助于模型选择与调参。


模型复杂度与偏差-方差权衡

  • 高复杂度模型(如深度树、低 k 的 kNN):偏差小但方差大,容易过拟合。
  • 低复杂度模型(如线性回归、大 k 的 kNN):偏差大但方差小,容易欠拟合。

举例:

模型 调参方式 趋势
多项式回归 增加多项式次数 ↓偏差 ↑方差
kNN 减小 k ↓偏差 ↑方差
SVM 增大 C ↑偏差 ↓方差
核密度估计 减小带宽 ↓偏差 ↑方差

分类问题的基本框架

每个观测包含:

  • 类别标签 y y y(如 0/1)
  • 特征向量 x = ( x 1 , x 2 , . . . , x p ) \boldsymbol{x} = (x_1, x_2, ..., x_p) x=(x1,x2,...,xp)

模型目标是使用 x \boldsymbol{x} x 来预测 y y y。

通常模型输出的是类别概率,例如某个样本属于类别 1 的概率为 0.85。需要通过设定阈值(如 0.5)将概率转化为具体类别。


分类 vs 聚类

  • 分类:监督学习,训练集中有类别标签
  • 聚类:无监督学习,无标签,需要自动识别分组结构

逻辑回归(Logistic Regression)

逻辑回归模型形式:

log ⁡ ( p 1 − p ) = x ⊤ β \log\left( \frac{p}{1 - p} \right) = \boldsymbol{x}^\top \boldsymbol{\beta} log(1−pp)=x⊤β

其中 p = P ( Y = 1 ∣ x ) p = P(Y = 1 \mid \boldsymbol{x}) p=P(Y=1∣x)。

Sigmoid 函数将线性预测值映射到 ( 0 , 1 ) (0, 1) (0,1):

p = 1 1 + exp ⁡ ( − x ⊤ β ) p = \frac{1}{1 + \exp(-\boldsymbol{x}^\top \boldsymbol{\beta})} p=1+exp(−x⊤β)1

我们通过最大化对数似然函数估计 β \boldsymbol{\beta} β:

ℓ ( β ) = ∑ i = 1 n [ y i log ⁡ ( p i ) + ( 1 − y i ) log ⁡ ( 1 − p i ) ] \ell(\beta) = \sum_{i=1}^{n} \left[ y_i \log(p_i) + (1 - y_i)\log(1 - p_i) \right] ℓ(β)=i=1∑n[yilog(pi)+(1−yi)log(1−pi)]

决策边界

当 p ≥ 0.5 p \ge 0.5 p≥0.5(即 x ⊤ β ≥ 0 \boldsymbol{x}^\top \boldsymbol{\beta} \ge 0 x⊤β≥0)时,预测为正类。


线性判别分析(LDA)

LDA 假设各类数据服从高斯分布,并具有相同协方差矩阵。利用贝叶斯公式:

P ( Y = k ∣ X = x ) = π k f k ( x ) ∑ ℓ = 1 K π ℓ f ℓ ( x ) P(Y = k \mid X = x) = \frac{\pi_k f_k(x)}{\sum_{\ell=1}^{K} \pi_\ell f_\ell(x)} P(Y=k∣X=x)=∑ℓ=1Kπℓfℓ(x)πkfk(x)

  • π k \pi_k πk:第 k k k 类的先验概率
  • f k ( x ) f_k(x) fk(x):特征在第 k k k 类的密度(正态分布)

LDA 适用于小样本、高斯假设成立的情况。


k 最近邻(kNN)

kNN 是一种非参数方法,预测类别基于最近的 k k k 个样本:

P ( Y = ℓ ∣ x ) = 1 k ∑ i ∈ N x k 1 { y i = ℓ } P(Y = \ell \mid x) = \frac{1}{k} \sum_{i \in N_x^k} \mathbb{1}_{\{y_i = \ell\}} P(Y=ℓ∣x)=k1i∈Nxk∑1{yi=ℓ}

优点:

  • 简单直观
  • 适合非线性边界

缺点:

  • 计算量大
  • 对尺度敏感
  • 不易解释变量重要性

kNN 与 LDA 和逻辑回归的比较

k 最近邻(kNN)是一种完全非参数方法,这意味着它不对决策边界的形状作任何假设。

优点

  • 无需假设边界形状:kNN 自然适应数据的实际分布,能够捕捉复杂的、非线性的分类边界。
  • 模型训练几乎为零成本:不需要显式拟合参数,直接对新样本进行"查找邻居"。
  • 当决策边界高度非线性时,kNN 往往优于 LDA 与逻辑回归

缺点

  • 解释性差:kNN 不提供系数或变量重要性指标,因此难以解释哪些特征起到关键作用。
  • 计算效率低:预测新样本时需要计算与所有训练样本的距离,尤其在数据量大时成本高。
  • 对噪声敏感:由于是基于邻居投票,kNN 极易受到离群点影响。
  • 需要特征标准化:不同量纲的特征会影响距离计算,标准化是必要预处理步骤。

k 的选择至关重要

选择合适的邻居数 k k k 是模型性能的关键:

  • k k k 太小 → 模型过拟合,方差大,受噪声影响严重
  • k k k 太大 → 模型过于平滑,可能欠拟合,边界模糊

常用做法是通过交叉验证选择最优的 k k k。

总结:

方法 假设前提 是否非参数 可解释性 适合边界类型
kNN ✅ 是 ❌ 低 非线性
LDA 高斯分布 + 同方差 ✗ 否 ✅ 强 线性
Logistic回归 决策函数线性 ✗ 否 ✅ 强 线性

支持向量机(Support Vector Machines, SVM)

支持向量机是一种强大的监督学习算法,其目标是寻找一个最优的决策边界(超平面),将不同类别的数据尽可能"间隔最大"地分开。

什么是超平面?

在 p p p 维空间中,超平面是一个 p − 1 p - 1 p−1 维的平坦空间,其一般形式为:

β 0 + β 1 X 1 + β 2 X 2 + ⋯ + β p X p = 0 \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_p X_p = 0 β0+β1X1+β2X2+⋯+βpXp=0

其中,向量 ( β 1 , β 2 , . . . , β p ) (\beta_1, \beta_2, ..., \beta_p) (β1,β2,...,βp) 被称为法向量,它垂直于超平面的表面,定义了决策边界的方向。

在二维空间( p = 2 p = 2 p=2)中,这个超平面就是一条直线。

分隔超平面与最大间隔分类器(Maximal Margin Classifier)

假设我们将两类样本编码为:

  • 良性(Benign) y i = − 1 y_i = -1 yi=−1
  • 恶性(Malignant) y i = + 1 y_i = +1 yi=+1

若一个超平面 f ( x i ) = β 0 + β 1 x i 1 + ⋯ + β p x i p f(x_i) = \beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip} f(xi)=β0+β1xi1+⋯+βpxip 满足对所有样本 y i f ( x i ) > 0 y_i f(x_i) > 0 yif(xi)>0,则该超平面成功分隔了两类。

最大间隔分类器 旨在最大化分类边界两侧距离最近样本的间隔 M M M:

max ⁡ β 0 , β 1 , . . . , β p M subject to ∑ j = 1 p β j 2 = 1 , y i ( β 0 + β 1 x i 1 + ⋯ + β p x i p ) ≥ M , ∀ i \max_{\beta_0, \beta_1, ..., \beta_p} M \\ \text{subject to } \sum_{j=1}^p \beta_j^2 = 1, \\ y_i(\beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip}) \geq M, \quad \forall i β0,β1,...,βpmaxMsubject to j=1∑pβj2=1,yi(β0+β1xi1+⋯+βpxip)≥M,∀i

什么是支持向量?

支持向量是距离决策边界最近的训练样本,它们直接决定了超平面的最终位置。

非完美分隔与软间隔(Soft Margin)

现实中类别不可完全分离或存在噪声。此时我们引入软间隔支持向量分类器(Support Vector Classifier),允许部分样本违背间隔要求:

优化目标:

max ⁡ β 0 , . . . , β p , ε 1 , . . . , ε n M subject to ∑ j = 1 p β j 2 = 1 y i ( β 0 + β 1 x i 1 + ⋯ + β p x i p ) ≥ M ( 1 − ε i ) , ε i ≥ 0 ∑ i = 1 n ε i ≤ C \max_{\beta_0, ..., \beta_p, \varepsilon_1, ..., \varepsilon_n} M \\ \text{subject to} \sum_{j=1}^p \beta_j^2 = 1 \\ y_i(\beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip}) \geq M(1 - \varepsilon_i), \quad \varepsilon_i \geq 0 \\ \sum_{i=1}^n \varepsilon_i \leq C β0,...,βp,ε1,...,εnmaxMsubject toj=1∑pβj2=1yi(β0+β1xi1+⋯+βpxip)≥M(1−εi),εi≥0i=1∑nεi≤C

其中:

  • ε i \varepsilon_i εi 是松弛变量,表示样本违反边界规则的程度;
  • C C C 是超参数,控制对违反样本的容忍度。

解释:

  • ε i = 0 \varepsilon_i = 0 εi=0:在正确侧并超出间隔;
  • 0 < ε i ≤ 1 0 < \varepsilon_i \leq 1 0<εi≤1:在正确侧但落入间隔;
  • ε i > 1 \varepsilon_i > 1 εi>1:落入错误分类区域。

高维空间的扩展:非线性边界

有些问题的分类边界在原始特征空间中是非线性的 。为处理此类问题,可以通过引入特征映射 扩展空间,例如加入 X 1 2 X_1^2 X12, X 1 X 2 X_1X_2 X1X2, X 2 2 X_2^2 X22 等新特征,将二维空间变换为更高维空间。

在线性不可分的情况下,这种扩展使得在新空间中可以通过线性超平面完成分隔,在原始空间则呈现非线性边界

示例决策函数:

β 0 + β 1 X 1 + β 2 X 2 + β 3 X 1 2 + β 4 X 2 2 + β 5 X 1 X 2 = 0 \beta_0 + \beta_1 X_1 + \beta_2 X_2 + \beta_3 X_1^2 + \beta_4 X_2^2 + \beta_5 X_1 X_2 = 0 β0+β1X1+β2X2+β3X12+β4X22+β5X1X2=0

使用核函数(Kernel Trick)

当维度高时显式构造新特征非常耗时,**核技巧(Kernel Trick)**提供了一种无需显式转换的方法:

内积形式

SVM 最终的分类函数可以表示为:

f ( x ) = β 0 + ∑ j = 1 n α j ⟨ x , x j ⟩ f(x) = \beta_0 + \sum_{j=1}^n \alpha_j \langle x, x_j \rangle f(x)=β0+j=1∑nαj⟨x,xj⟩

只需计算训练样本之间的内积。

核函数

将内积 ⟨ x i , x j ⟩ \langle x_i, x_j \rangle ⟨xi,xj⟩ 替换为核函数 K ( x i , x j ) K(x_i, x_j) K(xi,xj):

  • 多项式核: K ( x i , x j ) = ( 1 + ⟨ x i , x j ⟩ ) d K(x_i, x_j) = (1 + \langle x_i, x_j \rangle)^d K(xi,xj)=(1+⟨xi,xj⟩)d
  • 高斯径向基核(RBF): K ( x i , x j ) = exp ⁡ ( − γ ∥ x i − x j ∥ 2 ) K(x_i, x_j) = \exp(-\gamma \|x_i - x_j\|^2) K(xi,xj)=exp(−γ∥xi−xj∥2)

利用核函数可以构造非线性决策边界而无需显式构造新特征。

R 中的 SVM 实现示例:

r 复制代码
svm.model <- svm(x = data.mat[,-3], y = data.mat[[3]],
                 kernel = "radial", type = "C-classification",
                 cost = 64, fitted = FALSE)

多分类扩展

标准 SVM 是为二分类设计的,处理多分类问题时常用以下两种方法:

  1. 一对多(One-vs-All):为每个类别训练一个分类器,与其他类别进行对比。
  2. 一对一(One-vs-One) :每两个类别之间训练一个分类器,总共 K ( K − 1 ) / 2 K(K-1)/2 K(K−1)/2 个分类器。

推荐:

  • 类别数 K K K 较小时,用一对一;
  • K K K 较大时,用一对多以降低计算量。

总结与测验

哪几个模型是非参数分类模型?

  • ✗ 逻辑回归(Logistic Regression) → 参数模型
  • ✓ 支持向量机(SVM) → 部分非参数(核方法)
  • ✓ kNN → 完全非参数
  • ✗ 线性判别分析(LDA) → 参数模型

总结

本周我们学习了四种核心分类方法:

方法 类型 特点 适用场景
逻辑回归 判别模型 输出概率,适合线性边界 简单任务,概率建模
LDA 生成模型 高斯假设,适合小样本 类别边界近似线性
kNN 非参数 无需训练,计算代价高,易过拟合 非线性分布,训练样本丰富
SVM 间隔模型 可构建非线性边界,适合高维稀疏数据 需要强分类性能,特征空间复杂

理解不同模型的假设和适用条件,有助于你在实践中做出更合理的模型选择。

相关推荐
IronMurphy3 小时前
【算法四十三】279. 完全平方数
算法
墨染天姬3 小时前
【AI】Hermes的GEPA算法
人工智能·算法
papership3 小时前
【入门级-数据结构-3、特殊树:完全二叉树的数组表示法】
数据结构·算法·链表
smj2302_796826523 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
Beginner x_u4 小时前
链表专题:JS 实现原理与高频算法题总结
javascript·算法·链表
AI技术增长4 小时前
Pytorch图像去噪实战(六):CBDNet真实噪声去噪实战,解决合成噪声模型落地效果差的问题
pytorch·深度学习·机器学习
博.闻广见6 小时前
AI_概率统计-2.常见分布
人工智能·机器学习
_深海凉_7 小时前
LeetCode热题100-寻找两个正序数组的中位数
算法·leetcode·职场和发展
旖-旎8 小时前
深搜练习(电话号码字母组合)(3)
c++·算法·力扣·深度优先遍历
谭欣辰8 小时前
C++快速幂完整实战讲解
算法·决策树·机器学习