2146 字
11 分钟
有监督学习:回归与分类

有监督学习:回归与分类 (Supervised Learning)#

1. 什么是有监督学习?#

  • 直观类比:就像老师批改作业——给你一批“题目 + 标准答案”(带标签的训练数据),让你学会解题规律,然后去解新题(预测新数据)。

  • 核心要素

    • 输入特征 XX (Features):题目本身(已知属性)。

    • 标签 yy (Labels):标准答案(预测目标)。

    • 学习目标:找到一个最优的映射函数 ff,使得 f(X)yf(X) \approx y

  • 数据划分 (Data Splitting):为了防止模型“死记硬背”,训练数据通常会被划分为三部分:

    • 训练集 (Training Set):用来训练模型(日常做题)。

    • 验证集 (Validation Set):用来调整模型参数(模拟考,发现弱点)。

    • 测试集 (Test Set):用来评估最终模型的真实能力(期末考,仅用一次)。


2. 回归任务 (Regression)#

  • 目标与输出:预测连续的数值

  • 典型场景

    • 房价预测(输出:具体价格)

    • 气温预测(输出:具体温度)

    • 股票价格/用户生命周期价值 (LTV) 预测

  • 常用算法:线性回归 (Linear Regression)、多项式回归1、支持向量回归 (SVR)2、随机森林回归3、梯度提升树 (GBDT/XGBoost)4

  • 评估指标 (Evaluation Metrics)

指标 (简称)数学公式核心特点与业务说明
MAE(平均绝对误差/L1 Loss)1ni=1nyiy^i\frac{1}{n}\sum_{i=1}^n \\y_i - \hat{y}_i预测值与真实值误差绝对值的平均。直观反映实际误差大小,对异常值不如 MSE 敏感。
MSE(均方误差/L2 Loss)1ni=1n(yiy^i)2\frac{1}{n}\sum_{i=1}^n (y_i - \hat{y}_i)^2误差的平方和平均。对异常值(大误差)极其敏感(惩罚力度大),数学上易求导,是最常用的损失函数。
RMSE(均方根误差)MSE\sqrt{MSE}MSE 的平方根。使其量纲(单位)与原始目标值保持一致,解释起来更接地气(如:房价误差约 50 万元)。
R2R^2(决定系数)1(yiy^i)2(yiyˉ)21 - \frac{\sum(y_i - \hat{y}_i)^2}{\sum(y_i - \bar{y})^2}衡量模型的拟合优度。取值通常在 010 \sim 1 之间,越接近 1 说明模型拟合越好。如果为 0 代表跟直接猜平均值没区别。
Adjusted R2R^2(校正决定系数)1(1R2)(n1)np11 - \frac{(1 - R^2)(n - 1)}{n - p - 1}
(n为样本量,p为特征数)
多元线性回归必备。普通的 R2R^2 只要增加特征就会变大(哪怕是没用的特征)。校正 R2R^2 增加了对“无用特征”的惩罚,更客观。
MAPE(平均绝对百分比误差)100%ni=1nyiy^iyi\frac{100\%}{n}\sum_{i=1}^n \\\frac{y_i - \hat{y}_i}{y_i}业务汇报最爱。它给出的是一个百分比(如:误差率为 5%),不受量纲影响,方便给非技术老板汇报。注意:当真实值 yiy_i 为 0 时公式会报错。
Huber Loss(平滑平均绝对误差)分段函数:误差小用平方,误差大用绝对值融合了 MSE 和 MAE 的优点。在误差较小时像 MSE 一样平滑易收敛,在遇到极端异常值时像 MAE 一样呈线性惩罚,具有极强的鲁棒性。

3. 分类任务 (Classification)#

  • 目标与输出:预测离散的类别标签(可以是二分类,也可以是多分类)。

  • 典型场景

    • 垃圾邮件识别(输出:是/否)

    • 图像识别(输出:猫/狗/鸟)

    • 疾病诊断(输出:阳性/阴性)

  • 常用算法:逻辑回归 (Logistic Regression)5、支持向量机 (SVM)6、决策树、K近邻 (KNN)7、神经网络。

  • 混淆矩阵 (Confusion Matrix) 与评估指标

    在分类中,真实值和预测值的组合会产生四种情况:TP (真阳性)、FP (假阳性/误报)、FN (假阴性/漏报)、TN (真阴性)。基于此,我们有以下指标:

指标重点关注说明
Accuracy (准确率)整体表现预测正确的样本占总样本的比例。【注意】在正负样本严重不均衡时(如罕见病诊断),准确率会产生误导。
Precision (精确率)宁缺毋滥预测为“正”的样本中,真正为“正”的比例。(例如:被判定为垃圾邮件的,多少真的是垃圾邮件?)
Recall (召回率)宁错杀不放过真正为“正”的样本中,被成功预测出来的比例。(例如:所有真实癌症患者中,查出了多少个?)
F1-Score综合考量Precision 与 Recall 的调和平均数,用于在精确率和召回率之间寻找平衡。

4. 监督学习的核心挑战#

无论回归还是分类,模型训练都会面临以下两个核心问题:

  • 欠拟合 (Underfitting):模型太简单,连训练集上的“日常作业”都做不好(高偏差)。

  • 过拟合 (Overfitting):模型太复杂,“死记硬背”了训练集里的噪声和特例,导致在测试集上的“期末考”成绩极差(高方差)。

  • 解决方案:正则化 (Regularization)、增加数据量、交叉验证 (Cross-validation)8、提前停止 (Early Stopping)。


5. LDA(线性判别分析)#

类比:LDA 就像把两堆颜色不同的球投影到一根棍子上,找到那根棍子的最佳角度,使得两堆球在棍子上的投影尽可能分开,同时每堆球内部尽可能集中

5.1 核心思想#

LDA 同时优化两个目标:

  • 最大化类间散度9:不同类别的中心点投影后距离尽量远
  • 最小化类内散度10:同一类别的样本投影后尽量集中

J(w)=wTSBwwTSWwJ(w) = \frac{w^T S_B w}{w^T S_W w}

  • SBS_B:类间散度矩阵
  • SWS_W:类内散度矩阵
  • 目标:找到投影方向 ww 使 J(w)J(w) 最大

5.2 LDA vs PCA#

对比项LDAPCA
类型有监督降维无监督降维
目标最大化类别可分性最大化数据方差
需要标签
最大降维数K1K-1(K为类别数)无限制
适用场景分类前的特征提取通用降维/可视化

LDA 既可用于降维(提取判别特征),也可直接用于分类(贝叶斯决策)。

PCA详解

5.3 代码示例#

import micropip
await micropip.install(["numpy", "scikit-learn"])
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X, y = load_iris(return_X_y=True) # 4维特征,3类
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 用作分类器
lda = LinearDiscriminantAnalysis()
lda.fit(X_train, y_train)
print("分类准确率:", accuracy_score(y_test, lda.predict(X_test)))
# 用作降维(4维→2维)
lda_dim = LinearDiscriminantAnalysis(n_components=2)
X_reduced = lda_dim.fit_transform(X, y)
print("降维后形状:", X_reduced.shape) # (150, 2)

6. 回归 vs 分类 知识图谱#

Footnotes#

  1. 多项式回归: 当你可能只有一个特征,但这个特征和结果之间的关系不是一条直的,而是弯曲的时候使用。

  2. SVR(支持向量回归):SVM 的回归版本。不是找”最宽分界线”,而是找一条”误差容忍带”,让尽可能多的数据点落在带内,对带外的点才计算损失。

  3. 随机森林:同时训练很多棵决策树,每棵树用随机抽取的数据和特征训练,最终结果取所有树的平均(回归)或投票(分类)。“三个臭皮匠顶个诸葛亮”的集成思想。

  4. GBDT/XGBoost(梯度提升树):也是集成多棵决策树,但不是并行训练,而是串行——每棵新树专门去拟合上一棵树犯的错误,逐步修正。XGBoost 是工业界结构化数据竞赛的常胜将军。

  5. 逻辑回归:名字里有”回归”,但实际是分类算法。它在线性回归的输出上套一个 Sigmoid 函数,把结果压缩到 0~1 之间,表示”属于正类的概率”。

  6. SVM(支持向量机):找到一个”间隔最大”的决策边界,让两类数据离边界都尽可能远。对小数据集效果好,高维数据也适用。

  7. KNN(K近邻):最直觉的算法——预测一个新样本时,找训练集里离它最近的 K 个邻居,看邻居们属于哪个类别最多,就判为那个类。不需要训练,但预测时计算量大。

  8. 交叉验证:把训练数据分成 K 份,轮流用其中 1 份做验证集、其余 K-1 份做训练集,重复 K 次取平均。比单次划分更可靠,能更准确地估计模型的真实泛化能力。

  9. 类间散度:不同类别的样本中心点之间的距离。类间散度越大,说明各类别在投影方向上分得越开,越容易区分。

  10. 类内散度:同一类别内部样本的分散程度。类内散度越小,说明同类样本投影后越集中,分类边界越清晰。

有监督学习:回归与分类
https://fuwari.vercel.app/posts/ai/llm/machine-learning/notes/02_supervised_learning/01_回归与分类/
作者
OopsYanxi
发布于
2026-04-20
许可协议
CC BY-NC-SA 4.0