Skip to content

机器学习基础

机器学习 = 用数据调出「从输入到输出」的映射,而它的全部智慧浓缩成一句话:训练集上让损失最小,希望它在没见过的数据上也好用(泛化)。本文覆盖读论文、上手深度学习之前必须的地基:够用的数学、经典算法全景、评估方法论与特征工程,全部示例可用纯 Python/标准库复现。

一、数学速成:只有用得上的

工具直觉(不是定义)出现场合
向量内积两个向量的相似度(同向取大、正交为零)线性模型 w·x、注意力、检索打分
矩阵乘法「按规律做批量加权求和」,可看作同时变换许多向量全连接层、Embedding 查表后的混合
梯度 ∇标量函数在某点上升最快的方向;反着走就是下降一切梯度下降优化器
链式法则复合函数的误差层层回传相乘反向传播
条件概率/贝叶斯P(AB) = P(B
正态分布大量独立小误差叠加的自然结果,「钟形」误差假设、初始化
似然「在这组参数下,看到这批数据的概率」最大似然/交叉熵的统一来源

公式建议只记三种:w·x(线性打分)、softmax(把分数变概率)、梯度下降 w ← w − η·∂L/∂w(一切优化)。其余的都能在网上现查。

二、三个范式,一套流程

范式数据形态目标例子
监督学习(x, y) 对学 x→y回归、分类
无监督学习只有 x发现结构聚类、降维
强化学习环境反馈 r学策略使累计回报最大游戏、机器人

训练的统一套路:定义损失 L(模型预测与真实差距)→ 用梯度下降最小化 → 在独立测试集上验证。监督学习的损失本质是「负对数似然」:回归用高斯假设得 MSE,分类用类别分布假设得交叉熵——选损失函数 = 选对 y 的分布假设,而不是拍脑袋。

三、经典算法图谱

3.1 线性回归与正则化

  • 模型 ŷ = w·x + b,损失为均方误差(MSE);最优 w 要么有闭式解(正规方程),要么用梯度下降;
  • 数据量 < 特征量时过拟合:加正则化项——L2(岭回归) 把权重压向 0 但不为 0;L1(Lasso) 会把不重要的权重精确压到 0(自带特征选择);
  • 直觉:L1 的等值面是「菱形」,角点在坐标轴上,所以容易碰到 0。
python
# 一维线性回归 + 梯度下降(python3.7 实测)
xs = [1.0, 2.0, 3.0, 4.0, 5.0]
ys = [3.1, 4.9, 7.2, 8.8, 11.3]   # 真实约为 y = 2x + 1 + 噪声
w = b = 0.0
lr, n = 0.02, len(xs)
for _ in range(60):
    dw = sum(2 * (w*x + b - y) * x for x, y in zip(xs, ys)) / n
    db = sum(2 * (w*x + b - y)     for x, y in zip(xs, ys)) / n
    w -= lr*dw; b -= lr*db
print(f"y ≈ {w:.3f}*x + {b:.3f}")  # 输出:y ≈ 2.100*x + 0.718

3.2 逻辑回归:SVM 与贝叶斯的邻居

  • 线性打分 z = w·x + b 过 sigmoid 得 P(y=1|x);训练用交叉熵——分类别用 MSE:MSE 在预测已对时梯度仍大、收敛慢,且假设了「高斯噪声」这一错误分布;
  • SVM:找「间隔最大」的分界面,起作用的只有离边界最近的少数样本(支持向量);线性不可分时用核技巧把样本隐式映射到高维(K(x,z)=φ(x)·φ(z) 免算 φ),例如 RBF 核;
  • 朴素贝叶斯:假设特征相互独立,P(y|x) ∝ P(y)∏P(x_i|y),训练是数频次——文本分类的极简强基线;
  • KNN:不训练、预测时找 k 个最近邻投票;维度高时距离失真(需要特征缩放)。

3.3 决策树与集成学习

  • 树 = 递归 if-else:每次选一个「最能降低不纯度」的特征与阈值切分(CART 用基尼不纯度);优点可解释、能处理混合特征,缺点单棵树易过拟合;
  • Bagging(随机森林):并行训练多棵有差异的树(行采样 + 列采样),投票——降方差;
  • Boosting(GBDT/XGBoost):串行训练,每棵树拟合前面所有树的残差/负梯度——降偏差;XGBoost 加了二阶导数、正则化与缺失值处理,是表格数据的默认王者;
  • 经验法则:表格数据先上 XGBoost/LightGBM,再考虑深度模型——除非数据是文本/图像/时序这类有结构先验的。

3.4 无监督:聚类与降维

算法思想适合关键超参
KMeans距离平方和最小,迭代「指派-更新」球形簇、先验知道 kk(用肘部/轮廓系数选)
DBSCAN密度相连的点成簇,「没簇可入」的是噪声任意形状 + 要离群点eps、minPts
PCA找方差最大的正交方向,投影降维去相关、可视化、提速主成分数

PCA 与 SVD/矩阵分解同源:方差最大的方向 ≈ 重构误差最小的方向。聚类前一定先做特征缩放,否则量纲大的特征主导距离。

四、评估方法论:别被一个数字骗了

4.1 数据划分与验证

  • 训练 / 验证 / 测试三份:验证集用于调参选模型,测试集只在最终评估时碰一次(否则你就在「对着测试集过拟合」);
  • 小数据用 k 折交叉验证(平均多次划分的分数);
  • 时间序列不能用随机切分——必须按时间先后(否则未来信息泄漏进训练集)。

4.2 偏差-方差:欠拟合与过拟合的光谱

  • 高偏差 = 模型太简单,训练误差都压不下去(欠拟合);高方差 = 模型太复杂,训练很好测试崩(过拟合);
  • 调法对照:欠拟合 → 加特征/加深模型/少正则;过拟合 → 加数据/加正则/简化模型/早停。

4.3 指标速查表

指标回答的问题要点
Accuracy总体判对比例类别不平衡时骗人(99% 是负类时全猜负也有 99%)
Precision(精确率)判正例里多少是真宁缺毋滥(垃圾邮件过滤)
Recall(召回率)真正例里逮住多少宁错毋漏(癌症筛查)
F1P/R 的调和平均平衡两者;macro 均值对少数类更敏感
AUC-ROC随机正样本得分 > 随机负样本的概率排序能力,与阈值无关;不平衡下也比 accuracy 稳
MAE/MSE/R²回归误差R²=1 完美;MSE 放大离群点,MAE 更稳

4.4 类别不平衡

  • 数据层:过采样少数类(SMOTE)、欠采样多数类;
  • 算法层:类别加权损失、调整判定阈值(阈值移向 PR 曲线右上);
  • 评估层:看 PR 曲线/PR-AUC 而不是 accuracy(正类极少时 PR 更能反映检索质量)。

五、特征工程与数据清洗

  • 归一化 vs 标准化:归一化(min-max)压到 [0,1];标准化(减均值除标准差)让分布居中单位化——树模型对单调变换不敏感,但距离类(KNN/SVM/KMeans)与正则化线性模型强烈依赖缩放;
  • 类别特征:低基数用 one-hot(注意哑变量陷阱可不删);有序用 ordinal;高基数用 embedding 或频次编码;
  • 缺失值:机制决定策略——完全随机可用均值/中位数填补;能「解释缺失本身」时加 is_missing 标志;树模型自带处理;
  • 文本粗特征:TF-IDF = 词频 × 逆文档频率(「常见于本文但别处很少」的词加权)——词袋时代的主力,现在了解概念即可(嵌入时代见 RAG 与 Agent);
  • 数据泄漏高频来源:归一化统计量在全量数据上算再划分、去重前切分、用未来特征。

六、端到端工作流清单

  1. 明确目标与评估指标(与业务损失对齐);
  2. 探索数据:分布、缺失、离群、类别;定出训练/验证/测试与防泄漏方案;
  3. 定 baseline(规则/简单模型)→ 特征工程 → 复杂模型逐步升级,每次只改一个变量;
  4. 交叉验证选超参;记录每一次实验(数据版本、特征、超参、分数);
  5. 用测试集做一次性最终评估 → 汇报分数与失败样本分析

七、踩坑清单

  1. 数据泄漏:标准化/填补在划分前做、测试信息进训练,最常见且最致命——分数虚高、上线崩;
  2. 用 accuracy 汇报不平衡任务:换 PR-AUC 或分层看 P/R;
  3. 只调模型不调数据:数据质量/标注错误往往贡献最大提升;
  4. 早停当摆设:过拟合要先看「验证集曲线」而不是只盯训练 loss;
  5. AUC 高不代表业务好:它衡量排序,A/B 与业务指标才是终审;
  6. KMeans 的 k 随便拍:用肘部法/轮廓系数/Gap Statistic 至少一个;
  7. 表格任务一上来就上深度模型:先跑 GBDT baseline,通常更快更好;
  8. 无视特征缩放就上距离模型:量纲大的特征会主导 KNN/SVM/KMeans 结果;
  9. 把随机种子当玄学:固定 seed、固定数据切分、固定初值,否则无法复现与归因;
  10. 测试集反复用:每碰一次测试集都在偷看答案,最终分数会虚高。

下一步:理解了「损失最小化 + 梯度下降」的骨架后,进入 深度学习 看它是如何被放大到上亿参数的网络中;实践工具从 PyTorch 起步。

基于 VitePress 构建 · 内容以知识共享方式沉淀