跳转至

监督学习(Supervised Learning)

监督学习是机器学习中最常用的范式。给定一组带标签的训练数据 \(\{(x_i, y_i)\}_{i=1}^{n}\),模型学习输入 \(x\) 到输出 \(y\) 的映射关系 \(f: X \rightarrow Y\)


监督学习的两大任务

回归(Regression) 分类(Classification)
输出 连续值(如 3.14, 100.5) 离散类别(如 猫/狗, 0/1)
示例 预测房价、温度、股票价格 识别手写数字、垃圾邮件检测
评估指标 MSE、MAE、\(R^2\) 准确率、精确率、召回率、F1

一、线性回归(Linear Regression)

基本思想

用一条直线(或超平面)去拟合数据点,是最简单、最基础的回归模型。

\[ \hat{y} = w_1 x_1 + w_2 x_2 + \cdots + w_n x_n + b = \mathbf{w}^T \mathbf{x} + b \]

目标:找到最优的 \(\mathbf{w}\)\(b\),使得预测值 \(\hat{y}\) 尽可能接近真实值 \(y\)

损失函数:均方误差(MSE)

\[ J(\mathbf{w}, b) = \frac{1}{2m} \sum_{i=1}^{m} (\hat{y}_i - y_i)^2 \]

为什么用平方而不是绝对值?

  1. 平方函数处处可导,便于使用梯度下降优化
  2. 对较大的误差惩罚更重,促使模型减少大误差
  3. 在误差服从正态分布的假设下,MSE 等价于最大似然估计

求解方法

直接求导令梯度为零,可以一步得到最优解:

\[ \mathbf{w}^* = (\mathbf{X}^T \mathbf{X})^{-1} \mathbf{X}^T \mathbf{y} \]

优点: 不需要迭代,直接得到精确解
缺点: 需要计算矩阵逆,当特征维度很高(>10000)时计算量大;\(\mathbf{X}^T\mathbf{X}\) 不可逆时无法使用

反复更新参数,逐步逼近最优解:

\[ w_j := w_j - \eta \frac{\partial J}{\partial w_j} = w_j - \eta \frac{1}{m} \sum_{i=1}^{m}(\hat{y}_i - y_i) x_j^{(i)} \]

优点: 适用于大规模数据,通用性强
缺点: 需要调整学习率 \(\eta\),可能陷入局部最优(但线性回归是凸函数,没有这个问题)

多项式回归

当数据呈非线性关系时,可以增加多项式特征:

\[ \hat{y} = w_0 + w_1 x + w_2 x^2 + w_3 x^3 + \cdots \]

注意

多项式阶数越高,模型越复杂,越容易过拟合。需要配合正则化使用。


二、逻辑回归(Logistic Regression)

基本思想

尽管名字里有"回归",但逻辑回归是一种分类算法。它在线性回归的基础上加了一个 Sigmoid 函数,将输出压缩到 (0, 1) 区间,表示概率。

\[ \hat{y} = \sigma(\mathbf{w}^T \mathbf{x} + b) = \frac{1}{1 + e^{-(\mathbf{w}^T \mathbf{x} + b)}} \]

Sigmoid 函数的性质:

  • 输出范围 \((0, 1)\),可解释为概率
  • \(z = 0\) 时,\(\sigma(z) = 0.5\)(决策边界)
  • \(z \to +\infty\) 时,\(\sigma(z) \to 1\)
  • \(z \to -\infty\) 时,\(\sigma(z) \to 0\)

决策规则

\[ \text{预测类别} = \begin{cases} 1 & \text{if } \hat{y} \geq 0.5 \\ 0 & \text{if } \hat{y} < 0.5 \end{cases} \]

损失函数:交叉熵(Cross Entropy)

\[ J(\mathbf{w}) = -\frac{1}{m} \sum_{i=1}^{m} \left[ y_i \log(\hat{y}_i) + (1 - y_i) \log(1 - \hat{y}_i) \right] \]

为什么不用 MSE?

对于逻辑回归,MSE 的损失函数是非凸的,梯度下降容易陷入局部最优。而交叉熵损失函数是凸函数,保证能找到全局最优。

多分类扩展:Softmax 回归

当类别数 \(K > 2\) 时,逻辑回归扩展为 Softmax 回归:

\[ P(y = k | \mathbf{x}) = \frac{e^{\mathbf{w}_k^T \mathbf{x}}}{\sum_{j=1}^{K} e^{\mathbf{w}_j^T \mathbf{x}}} \]

Softmax 保证所有类别的概率之和为 1,模型选择概率最大的类别作为预测结果。


三、支持向量机(SVM)

基本思想

SVM 的目标是找到一个最优超平面,使得两个类别之间的间隔(Margin)最大化

直觉理解

想象桌子上有红蓝两堆豆子,你要放一根棍子把它们分开。SVM 不仅要分开,还要让棍子到两堆豆子的最近距离尽可能大——这样分隔最"安全"。

数学表达

超平面方程:\(\mathbf{w}^T \mathbf{x} + b = 0\)

最大化间隔等价于:

\[ \min_{\mathbf{w}, b} \frac{1}{2} \|\mathbf{w}\|^2 \quad \text{s.t.} \quad y_i(\mathbf{w}^T \mathbf{x}_i + b) \geq 1, \quad \forall i \]

支持向量(Support Vectors):距离超平面最近的那些训练样本点。只有支持向量决定了超平面的位置,其他样本点对模型没有影响。

软间隔(Soft Margin)

现实中数据往往不能完美线性分割,因此引入松弛变量 \(\xi_i\) 允许部分样本被误分类:

\[ \min_{\mathbf{w}, b} \frac{1}{2} \|\mathbf{w}\|^2 + C \sum_{i=1}^{m} \xi_i \]
  • \(C\) 越大:对误分类惩罚越重,间隔越小(可能过拟合)
  • \(C\) 越小:允许更多误分类,间隔越大(可能欠拟合)

核函数(Kernel Function)

当数据在原始空间中线性不可分时,核函数将数据映射到高维空间,使其在高维空间中线性可分:

核函数 公式 适用场景
线性核 \(K(x_i, x_j) = x_i^T x_j\) 线性可分数据
多项式核 \(K(x_i, x_j) = (x_i^T x_j + c)^d\) 中等复杂度
RBF(高斯)核 \(K(x_i, x_j) = \exp(-\gamma\|x_i - x_j\|^2)\) 最常用,适用于大多数情况

核技巧的精髓

核函数的巧妙之处在于:不需要真的把数据映射到高维空间,只需要计算两个样本在高维空间中的内积。这让计算量大幅减少。


四、K 近邻(KNN)

基本思想

KNN 是最直觉的分类算法:一个样本的类别由它周围最近的 K 个邻居的投票决定。

类比

如果你搬到一个新社区,想知道自己属于哪种生活风格。你可以看看你家附近最近的 5 户邻居(K=5)是什么风格——如果 3 户是年轻白领,那你大概率也被归为年轻白领社区。

算法步骤

  1. 计算待预测样本与所有训练样本的距离
  2. 选取距离最近的 K 个训练样本
  3. 用这 K 个样本的标签投票(分类)或取平均(回归)

距离度量

距离 公式 特点
欧氏距离 \(d = \sqrt{\sum(x_i - y_i)^2}\) 最常用,对尺度敏感
曼哈顿距离 \(d = \sum\|x_i - y_i\|\) 适合高维数据
余弦相似度 \(\cos\theta = \frac{\mathbf{x} \cdot \mathbf{y}}{\|\mathbf{x}\|\|\mathbf{y}\|}\) 关注方向而非大小

K 值的选择

  • K 太小(如 K=1):对噪声敏感,容易过拟合
  • K 太大(如 K=100):决策边界过于平滑,容易欠拟合
  • 常用方法:通过交叉验证选择最优 K 值,通常尝试奇数以避免平票

优缺点

优点 缺点
简单直观,无需训练 预测时计算量大(需遍历所有样本)
适用于非线性数据 对特征尺度敏感(需要标准化)
天然支持多分类 高维数据效果差(维度灾难)

五、决策树(Decision Tree)

基本思想

决策树模拟人类做决策的过程:通过一系列是/否的问题,逐步将数据划分到不同的类别。

类比

就像猜动物的游戏:
"它是哺乳动物吗?" → 是 → "它会飞吗?" → 否 → "它体型大吗?" → 是 → "大象!"

核心问题:选哪个特征来分裂?

决策树的关键在于:每一步选择哪个特征来提问。理想情况下,每次分裂都应该让数据变得更"纯净"(更容易分类)。

衡量"纯度"的指标:

基于信息熵。信息熵衡量数据的不确定性:

\[ H(D) = -\sum_{k=1}^{K} p_k \log_2 p_k \]

信息增益 = 分裂前的熵 - 分裂后的加权熵:

\[ \text{Gain}(D, A) = H(D) - \sum_{v=1}^{V} \frac{|D^v|}{|D|} H(D^v) \]

选择信息增益最大的特征进行分裂。

缺点: 偏好取值多的特征(如"身份证号"每个值唯一,信息增益很高但没用)

基尼指数衡量从数据集中随机抽取两个样本,类别不一致的概率:

\[ \text{Gini}(D) = 1 - \sum_{k=1}^{K} p_k^2 \]
  • Gini = 0:完全纯净(只有一个类别)
  • Gini 越大:越混乱

选择使基尼指数减少最多的特征进行分裂。

优点: 计算比信息熵快(不需要算对数),是 sklearn 的默认选择

剪枝(Pruning)

决策树如果不加限制,会一直分裂到每个叶子节点只有一个样本——严重过拟合。剪枝是解决方案:

  • 预剪枝:在树生长过程中提前停止(限制最大深度、最少样本数等)
  • 后剪枝:先生长完整棵树,再自底向上地删除那些对泛化无帮助的子树

六、朴素贝叶斯(Naive Bayes)

基本思想

基于贝叶斯定理,计算在给定特征条件下,样本属于各个类别的概率,选择概率最大的类别。

\[ P(y | \mathbf{x}) = \frac{P(\mathbf{x} | y) \cdot P(y)}{P(\mathbf{x})} \]

其中: - \(P(y|\mathbf{x})\)后验概率,给定特征后属于类别 y 的概率(这是我们要求的) - \(P(\mathbf{x}|y)\)似然,属于类别 y 时出现特征 x 的概率 - \(P(y)\)先验概率,类别 y 出现的概率 - \(P(\mathbf{x})\)证据,特征 x 出现的概率(对所有类别相同,可不计算)

"朴素"假设

各特征之间相互独立

\[ P(\mathbf{x} | y) = P(x_1 | y) \cdot P(x_2 | y) \cdots P(x_n | y) = \prod_{j=1}^{n} P(x_j | y) \]

这个假设合理吗?

通常不合理!比如在垃圾邮件检测中,"免费"和"中奖"这两个特征显然不独立,它们经常一起出现。
但尽管假设不成立,朴素贝叶斯在实践中仍然表现得出奇地好,尤其是在文本分类、垃圾邮件过滤等任务中。

常见变体

变体 特征类型 典型应用
高斯朴素贝叶斯 连续值(假设正态分布) 通用分类
多项式朴素贝叶斯 离散计数(如词频) 文本分类
伯努利朴素贝叶斯 二值特征(0/1) 短文本、情感分析

算法对比速查表

算法 优点 缺点 适用场景
线性回归 简单、可解释、快速 只能拟合线性关系 数据近似线性、需要可解释性
逻辑回归 简单、输出概率、可解释 线性决策边界 二分类、基线模型
SVM 高维有效、泛化强 大数据集慢、参数敏感 中小型数据集、文本分类
KNN 简单直观、无需训练 预测慢、维度灾难 小数据集、推荐系统
决策树 可解释、处理混合特征 容易过拟合 需要可解释性、特征工程初探
朴素贝叶斯 快速、小数据也可用 特征独立假设 文本分类、实时预测