|
## 机器学习四大学习范式
用一个"学生备考"的比喻贯穿理解,再从数据、反馈、目标三个维度硬核对比。
| 范式 | 灵魂比喻 | 输入数据 | 反馈机制 | 核心目标 |
|------|----------|----------|----------|----------|
| **监督学习** | 有标准答案的刷题 | 有标签 | 即时绝对反馈(对/错) | 预测 X→Y |
| **无监督学习** | 图书馆整理书籍 | 无标签 | 无反馈(自己发现结构) | 聚类/降维 |
| **半监督学习** | 只给重点题答案 | 少量标签+大量无标签 | 部分即时反馈 | 用少量标签撬动大量数据 |
| **强化学习** | 训狗 | 环境动态产生 | 延迟相对反馈(奖惩) | 累计奖励最大化 |
### 两个易踩的误区
- **误区一**:半监督 = 监督+无监督的简单拼接。❌ 半监督有独特算法(自训练、一致性正则化),让无标签数据参与梯度反向传播。
- **误区二**:强化学习是深度学习的分支。❌ RL 是独立框架(马尔可夫决策过程),深度学习只是拟合其价值/策略的工具(即 DRL)。
### 选型决策
- 有清晰正确答案(分类/回归) → **监督学习**
- 无答案只想看数据分布 → **无监督学习**
- 标注成本极高但有一丁点标注 → **半监督学习**
- 连续有状态需长远规划(游戏/机器人) → **强化学习**(训练极难)
|
|
## 强化学习四要素(MDP 骨架)
交互闭环:**Agent 观察状态 → 按策略选动作 → 环境转移新状态 → 返回即时奖励 → 调整策略**。
| 要素 | 通俗解释 | 训狗比喻 | 自动驾驶比喻 |
|------|----------|----------|--------------|
| **Agent(智能体)** | 做决策的"大脑" | 狗狗本身 | 车载决策芯片 |
| **Environment(环境)** | 智能体之外的一切 | 客厅、狗粮 | 道路、天气、行人 |
| **Action(动作)** | 大脑能做的操作 | 坐下、转圈 | 左转、刹车、加速 |
| **Reward(奖励)** | 环境给大脑的打分 | 吃肉(+1)、挨骂(-1) | 到达(+100)、撞车(-1000) |
### 动作空间分类(极重要)
- **离散动作空间**:动作有限分开,如 `{左转,右转,直行}` → 用 **DQN**
- **连续动作空间**:连续数值,如方向盘 `[-180°,+180°]` → 用 **PPO/SAC**
### Reward 设计三铁律
1. 奖励必须稠密:中间过程要给引导("靠近目标 +0.1")
2. 奖励必须对齐目标:防 **Reward Hacking**(训直升机悬停给"省油+1",AI 直接关机落地)
3. 折扣因子 $\gamma$ 通常 0.9~0.99,累计回报 $G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \dots$
> **第五要素 State**:现实中 Agent 看不到完整环境状态,叫部分可观测(POMDP),是 RL 落地难的重要原因。
|
|
## 行业补充:自监督学习(第五范式)
课件只讲四范式,但 2018 年后行业最火的**第五范式**完全没提,是大模型时代基石。
### 为什么需要
监督学习需海量人工标注成本极高;互联网有海量无标注数据浪费可惜。**自监督从数据自身构造"伪标签",让模型做"完形填空"**。
### 两大流派
| 流派 | 核心思想 | 代表 |
|------|----------|------|
| **生成式** | 遮住一部分预测被遮住内容 | BERT(遮掩语言模型)、MAE(遮图像patch重建) |
| **对比式** | 拉近正样本对、推远负样本对 | SimCLR、MoCo、CLIP(图文对比) |
### 对比学习直觉
给一张狗图做两次数据增强(裁剪/翻转)得两个"视图"=正样本对(同一只狗);其他图片=负样本。目标让正样本对在特征空间靠近,负样本远离。
> **面试金句**:GPT/LLM 的成功本质是"自监督预训练 + 监督微调 + 强化学习对齐(RLHF)"三段式,把三大范式串起来了。
|
|
## 行业补充:损失函数全家桶
课件反复提"损失函数"却没系统讲。损失函数是模型的"指挥棒"。
### 回归损失
**MSE(均方误差/L2)**:$\mathcal{L} = \frac{1}{N}\sum(y_i - \hat{y}_i)^2$,对大误差惩罚重(平方放大),受异常值影响大。
**MAE(平均绝对误差/L1)**:$\frac{1}{N}\sum|y_i - \hat{y}_i|$,对异常值鲁棒但 0 点不可导。
**Huber Loss**:小误差用 MSE,大误差用 MAE,兼顾两者。
### 分类损失
**交叉熵(分类标配)**:
二分类(配 Sigmoid):$\mathcal{L} = -\frac{1}{N}\sum[y_i\log\hat{y}_i + (1-y_i)\log(1-\hat{y}_i)]$
多分类(配 Softmax):$\mathcal{L} = -\sum y_k\log\hat{y}_k$
**Hinge Loss(SVM 专用)**:$\max(0, 1 - y\cdot\hat{y})$
### 面试速记
| 任务 | 输出层激活 | 损失函数 |
|------|------------|----------|
| 二分类 | Sigmoid | BCE |
| 多分类(互斥) | Softmax | CE |
| 多标签 | Sigmoid | BCE |
| 回归 | 线性 | MSE/Huber |
|
|
## 行业补充:评估指标体系
课件在"样本不均衡"处提了 P/R/F1/AUC,但没系统讲,是面试超高频。
### 混淆矩阵(一切的基础)
| | 预测正 | 预测负 |
|--|--------|--------|
| **实际正** | TP(真阳) | FN(假阴,漏报) |
| **实际负** | FP(假阳,误报) | TN(真阴) |
### 核心指标
| 指标 | 公式 | 含义 | 关注点 |
|------|------|------|--------|
| **准确率** | $\frac{TP+TN}{总}$ | 整体预测对的比例 | 不均衡数据失真 |
| **精确率P** | $\frac{TP}{TP+FP}$ | 预测为正有多少真是正 | "宁缺毋滥"(垃圾邮件) |
| **召回率R** | $\frac{TP}{TP+FN}$ | 真实为正有多少被找出 | "宁可错杀"(癌症筛查) |
| **F1** | $2\cdot\frac{P\cdot R}{P+R}$ | P与R调和平均 | 平衡两者 |
⚠️ **关键避坑**:正负 100:1 时全预测负,准确率 99% 但无意义!必须看 P/R/F1。
### ROC 与 AUC
- **ROC**:横轴 FPR(假阳率),纵轴 TPR(召回率),遍历阈值画曲线
- **AUC**:ROC 曲线下面积 `[0,1]`,**对不平衡不敏感**,工业界分类最常用排序指标
### 业务选指标
| 场景 | 首选 | 理由 |
|------|------|------|
| 癌症/欺诈检测 | Recall | 漏报代价极高 |
| 垃圾邮件/推荐 | Precision/AUC | 误报打扰用户 |
| 通用分类 | F1/AUC | 平衡 |
|
|
## 常用分类与回归算法总览
| 算法 | 核心思想 | 分类 | 回归 | 特点与适用 |
|------|----------|:----:|:----:|------------|
| 线性回归 | 最佳拟合直线,最小化距离平方和 | ❌ | ✅首选 | 最基础,可解释极强,房价/销售额 |
| 逻辑回归 | Sigmoid 压缩到 0~1 输出概率 | ✅首选 | ❌ | 二分类首选,解释强,上线快 |
| KNN | 看周围K个邻居投票/平均 | ✅ | ✅ | 简单直观无需训练,小样本低维 |
| 决策树 | 一系列"是/否"问题划分 | ✅ | ✅ | 流程图式,白盒可解释 |
| 随机森林 | 多棵树投票(集成) | ✅ | ✅ | 抗过拟合,万金油,看特征重要性 |
| SVM | 找最大间隔分类超平面 | ✅首选 | 较少 | 小样本高维优异,核技巧处理非线性 |
| 朴素贝叶斯 | 贝叶斯定理+特征独立假设 | ✅ | ❌ | 文本分类神器,计算极快 |
| 神经网络 | 多层网络自动学特征 | ✅ | ✅ | 非结构化数据(图/语音/文本)王者 |
| XGBoost/LightGBM | 梯度提升决策树高效实现 | ✅ | ✅ | 比赛/工业界表格数据首选 |
> **工业经验**:表格型数据(Excel),XGBoost/LightGBM 和随机森林往往效果最稳;KNN 生产用得少(计算量随数据线性增长)。
|
|
## 线性回归与逻辑回归(深入)
### 线性回归
模型:$\hat{y} = w_1 x_1 + \dots + w_n x_n + b = \mathbf{w}^\top\mathbf{x} + b$
损失(最小二乘):$\mathcal{L} = \frac{1}{N}\sum(y_i - \hat{y}_i)^2$
- **解析解(正规方程)**:$\mathbf{w} = (\mathbf{X}^\top\mathbf{X})^{-1}\mathbf{X}^\top\mathbf{y}$,特征多时矩阵求逆代价大
- **梯度下降**:迭代更新,大数据/高维更实用
### 逻辑回归(本质是分类!)
用 Sigmoid 把线性结果压到 (0,1) 当概率:$p = \sigma(z) = \frac{1}{1+e^{-z}}$
**决策边界**:$p \ge 0.5$ 判正类(对应 $z \ge 0$)。
损失(二元交叉熵):$\mathcal{L} = -\frac{1}{N}\sum[y_i\log\hat{y}_i + (1-y_i)\log(1-\hat{y}_i)]$
### 为什么用交叉熵不用 MSE?
MSE + Sigmoid 会导致损失函数非凸(多个局部最优),且梯度在饱和区接近 0 学习极慢;交叉熵梯度形式简洁 $\frac{\partial\mathcal{L}}{\partial w_j} = (\hat{y}_i - y_i)x_i$,与 Sigmoid 导数无关。
```python
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(penalty='l2', C=1.0) # C=1/lambda
model.fit(X_train, y_train)
```
|
|
## KNN 与朴素贝叶斯
### KNN(K近邻)
"近朱者赤"。找 K 个最近邻居投票(分类)或平均(回归)。
**距离度量**:
- 欧氏距离 $d = \sqrt{\sum(x_{1i}-x_{2i})^2}$(最常用)
- 曼哈顿距离 $d = \sum|x_{1i}-x_{2i}|$(网格城市)
- 余弦相似度 $\cos\theta = \frac{\mathbf{a}\cdot\mathbf{b}}{|\mathbf{a}||\mathbf{b}|}$(文本/高维稀疏)
**K 值选择**:太小→过拟合;太大→欠拟合;用交叉验证选 K,K 取奇数避免平局。**必须标准化**!
### 朴素贝叶斯
基于贝叶斯定理 + 特征条件独立假设("朴素"由来):
$$P(y|x_1,\dots,x_n) \propto P(y)\prod_{i=1}^{n}P(x_i|y)$$
预测取后验最大类:$\hat{y} = \arg\max_y P(y)\prod_i P(x_i|y)$
**为什么"朴素"假设不成立仍有效?** 因只需排序(比哪个类概率最大),不需概率精确,独立性假设虽不严格成立排序结果往往正确。
**三大变体**:高斯NB(连续)、多项式NB(文本词频)、伯努利NB(二值)。
|
|
## 决策树:信息增益 / 熵 / 基尼
决策树构建核心 = 如何选最优特征分裂。三大数学工具衡量"分裂后数据有多纯"。
### 熵(不确定性温度计)
$$H(D) = -\sum_{k=1}^{K} p_k \log_2(p_k)$$
高熵(接近1):数据混乱难分;低熵(接近0):数据纯净易分。
### 信息增益(熵的减少量)
$$Gain(D, A) = H(D) - H(D|A)$$
**信息增益越大,特征越好**(ID3 算法核心)。陷阱:偏好取值多特征(如用户ID)。
### 基尼系数(熵的简化版)
$$Gini(D) = 1 - \sum_{k=1}^{K} p_k^2$$
含义:随机抽两样本类别不一致的概率。基尼=0 完全纯净。**优势:省对数运算计算更快**,工程最常用(CART、sklearn 默认 `criterion='gini'`)。
### 三者对比
| 维度 | 熵 | 信息增益 | 基尼系数 |
|------|----|----------|----------|
| 决策标准 | — | 越大越好(ID3) | 越小越好(CART) |
| 偏好问题 | 无直接影响 | 偏好取值多特征 | 偏好但程度较轻 |
| 计算 | 含对数稍慢 | 由熵差算出 | 仅平方最快 |
> **进阶**:C4.5 用**信息增益率**惩罚取值多特征,解决 ID3 偏好问题。
|
|
## 无监督两大任务与聚类总览
| 任务 | 目标 | 代表 |
|------|------|------|
| **聚类** | 相似样本自动分组(无标签) | K-Means、层次、DBSCAN、GMM |
| **降维** | 压缩高维保留核心信息 | PCA、t-SNE、UMAP、Autoencoder |
### K-Means 算法流程
```
1. 随机选 K 个初始中心点
2. 重复:
a. 分配:每样本归最近中心点簇
b. 更新:每簇中心 = 簇内点均值
3. 直到中心点不再变化(收敛)
```
目标(最小化簇内误差平方和):$\mathcal{J} = \sum_{k=1}^{K}\sum_{x_i\in C_k}\|x_i-\mu_k\|^2$
**优点**:简单、快、可扩展。**缺点**:必须预设 K;对初始中心敏感(用 K-Means++);只发现球形簇处理不了环形;对噪声敏感。
|
|
## 基于密度的聚类
核心思想:**区域里点足够密集就属同一簇**。优势:发现任意形状簇 + 自动排除噪声。
| 算法 | 簇形状 | 噪声 | 预设K | 最适合场景 | 短板 |
|------|--------|:----:|:----:|------------|------|
| **DBSCAN** | 任意 | 极佳 | 否(设半径) | 数据紧凑噪声明显 | 密度差异大失效 |
| **OPTICS** | 任意 | 极佳 | 否 | 密度不均探索 | 计算较慢 |
| **CLIQUE** | 子空间 | 一般 | 否 | 高维大数据 | 网格步长难调 |
| **Mean Shift** | 任意 | 一般 | 自动发现 | 图像分割/跟踪 | 计算量极大 |
### DBSCAN(最经典)
两参数:**Eps**(邻域半径)、**MinPts**(最小点数)。找所有"核心点"(Eps 邻域内至少 MinPts 个点),连成片形成任意形状簇。
### OPTICS(应对密度不均)
不直接给结果,生成**可达距离图**(密度地形图),"山谷"是密集簇。无需预设 Eps,可发现不同密度簇。
### Mean Shift(核密度估计)
为每点初始化窗口,反复向密度梯度方向移动到峰值,同峰值吸引归一簇。**不需指定 K**。
|
|
## K 值确定与聚类效果评估
### 确定 K 值
| 方法 | 核心思想 | 优缺点 |
|------|----------|--------|
| **肘部法则** | 画 SSE-K 折线找拐点 | 最常用但拐点有时不明显 |
| **轮廓系数** | 结合凝聚度+分离度取最大 | 更客观,计算量稍大 |
| **Gap Statistic** | 与均匀随机分布SSE期望比较 | 统计严谨,成本最高 |
| **业务经验** | 由业务定(客户分高中低3档K=3) | 最实用需专家 |
### 轮廓系数公式
$$s(i) = \frac{b(i) - a(i)}{\max(a(i), b(i))}$$
$a(i)$=同簇平均距离(越小越好);$b(i)$=最近邻簇平均距离(越大越好)。范围 `[-1,1]`,越接近 1 越好。
### 评估指标
**内部(无标签)**:轮廓系数、Davies-Bouldin(越小越好)、CH指数(越大越好)
**外部(有真实标签)**:调整兰德指数ARI `[-1,1]`、互信息NMI `[0,1]`
> **实操建议**:先肘部法则+轮廓系数交叉验证候选K,再结合业务经验最终决策。可视化是最好用的工具。
|
|
## 降维算法与 GMM(行业补充)
### PCA(主成分分析)
找一组正交轴(主成分),投影到方差最大方向实现降维。
步骤:数据中心化 → 算协方差矩阵 → 求特征值/特征向量 → 取前 k 个最大特征值向量投影。
**直觉**:方差大方向信息多,方差小方向(几乎不变特征)丢弃损失不大。
### t-SNE 与 UMAP
- **t-SNE**:专为可视化,高维相似度高斯建模,低维 t 分布(重尾缓解拥挤)。**只适合可视化不适合下游特征**。
- **UMAP(补充)**:比 t-SNE 更快、保留全局结构更好,**可作为下游特征**,现代降维首选。
### Autoencoder(自编码器)
`输入x → [编码器] → 潜在表示z(低维) → [解码器] → 重建x̂`,目标最小化 `||x - x̂||`。用于学核心特征、去噪、预训练。
### GMM + EM(软聚类,行业补充)
GMM 认为数据由多个高斯分布混合生成,给出**样本属于每个簇的概率**:$p(x) = \sum_{k=1}^{K}\pi_k\mathcal{N}(x|\mu_k,\Sigma_k)$
**EM 算法**:E步算每个点属于每簇的后验概率(责任度);M步用责任度加权更新参数。
| 维度 | K-Means | GMM |
|------|---------|-----|
| 类型 | 硬聚类 | 软聚类(给概率) |
| 簇形状 | 球形 | 椭球(任意协方差) |
|
|
## 集成学习:Bagging vs Boosting vs Stacking
核心思想:**"三个臭皮匠,顶个诸葛亮"**,组合多个弱学习器成强学习器。
| 维度 | Bagging(装袋) | Boosting(提升) | Stacking(堆叠) |
|------|---------------|----------------|----------------|
| 结构 | **并行**,基模型独立 | **串行**,后一纠正前一错误 | **分层**,基模型+元模型 |
| 数据 | Bootstrap 有放回采样 | 按前一错误调整样本权重 | 交叉验证生成元特征 |
| 目标 | 降低**方差**(防过拟合) | 降低**偏差**(提拟合度) | 综合提升 |
| 代表 | 随机森林 | AdaBoost/GBDT/XGBoost | 任意组合 |
### Bagging 三步
1. **自助采样**:有放回抽 N 个样本(多次得多样本集)
2. **并行训练**:每样本集训一个基模型
3. **综合**:分类投票,回归平均
**袋外数据(OOB)**:有放回采样约 **36.8%** 样本未抽中,可作免费验证集。
### Boosting
串行训练:先训弱模型,针对犯错样本**加大权重**,再训下一个重点解决难题,最终加权组合。
|
|
## 随机森林构建策略
随机森林 = **Bagging + 决策树 + 特征随机性**。三大策略:
### 1. 数据层面:Bootstrap 采样
每棵树有放回抽 N 个样本。36.8% 袋外数据(OOB)用于无偏评估。
### 2. 特征层面:特征子空间采样
每节点分裂时随机无放回抽 m 个特征($m \ll M$)选最优分裂。分类默认 $m\approx\sqrt{M}$,回归默认 $m\approx M/3$。
### 3. 树生长层面:不剪枝(完全生长)
单棵树易过拟合,但众多"方向不同"的树投票后误差抵消,森林泛化极强。
### 随机森林 vs 纯 Bagging
| 维度 | 纯 Bagging | 随机森林 |
|------|-----------|----------|
| 数据随机性 | 有 | 有 |
| 特征随机性 | **无** | **有** |
| 树相关性 | 较高 | 显著降低 |
| 抗过拟合 | 较强 | 极强 |
> 一句话:**Bagging = 数据随机性;随机森林 = Bagging + 特征随机性**。
|
|
## 行业补充:XGBoost / LightGBM / CatBoost
课件提到"工业界首选"但没讲三者区别。表格数据面试必问。三者都是 GBDT 高效实现:
| 库 | 核心创新 | 优势场景 |
|----|----------|----------|
| **XGBoost** | 预排序 + 二阶泰勒展开损失 + 正则化 | 精度高,学术标杆 |
| **LightGBM** | **Leaf-wise叶子生长** + **GOSS直方图** + **EFB互斥特征捆绑** | 训练极快内存省,**大数据首选** |
| **CatBoost** | **Ordered Boosting**(消目标泄漏) + 原生处理类别特征 | **类别特征多**无需手工编码 |
### LightGBM vs XGBoost 关键区别
- XGBoost 是 **level-wise**(按层生长,同层所有节点都分裂)
- LightGBM 是 **leaf-wise**(选增益最大叶子分裂),更快降损失但需限制 `max_depth`
### LightGBM 直方图算法
把连续特征分桶成直方图,在桶上找分裂点,速度提升数十倍,内存大幅下降。
> **面试金句**:"表格数据我首选 LightGBM(leaf-wise+直方图训练快精度高);类别特征多用 CatBoost 免编码;追求稳健可解释用 XGBoost。"
|
|
## 偏差-方差权衡(Bias-Variance Tradeoff)
面试 100% 会问的"跷跷板"。
### 定义
- **偏差(Bias)**:预测期望与真实差距。高偏差→欠拟合(模型太简单)
- **方差(Variance)**:不同训练集预测结果的变动幅度。高方差→过拟合(模型太复杂)
### 误差分解
$$\text{Error} = \text{Bias}^2 + \text{Variance} + \sigma^2_{\text{噪声}}$$
增加复杂度→偏差↓方差↑;简化模型→偏差↑方差↓。目标找总误差最小"甜蜜点"。
### 集成学习的偏差方差视角
| 方法 | 主要降低 | 原因 |
|------|----------|------|
| **Bagging(随机森林)** | 方差 | 平均多模型平滑波动 |
| **Boosting(XGBoost)** | 偏差 | 串行修正错误提拟合(不加正则化易高方差) |
> **学习曲线诊断**:训练误差低验证误差高差距大=过拟合;两者都高差距小=欠拟合;两者都低且靠近=完美。
|
|
## 过拟合与欠拟合
| 维度 | 过拟合(高方差) | 欠拟合(高偏差) |
|------|----------------|----------------|
| 表现 | 训练精度极高(>95%),验证集低 | 训练和验证都低,差距小 |
| 比喻 | 死记硬背题库新题变说法就不会 | 连课本例题都看不懂 |
| 本质 | 模型太复杂把噪声当规律 | 模型太简单没捕捉结构 |
### 处理过拟合(收紧缰绳)
| 方法 | 说明 |
|------|------|
| **增加数据量** | 最根本;图像数据增强(翻转/裁剪) |
| **正则化** | L1/L2 给权重加惩罚 |
| **降低复杂度** | 决策树剪枝、神经网络减层 |
| **早停法** | 监控验证集一上升就停(深度学习最有效) |
| **集成学习** | 随机森林/Bagging 降方差 |
| **Dropout** | 深度学习随机失活神经元 |
| **特征选择/降维** | 减噪声特征 |
### 处理欠拟合(放开手脚)
| 方法 | 说明 |
|------|------|
| 增加复杂度 | 线性→多项式/树;浅网→深网 |
| 特征工程 | 交叉特征(年龄×收入)、多项式(年龄²) |
| 减少正则化 | 降低惩罚系数 |
| 增加迭代轮数 | Boosting 的 `n_estimators` |
|
|
## 正则化三大门派
正则化 = 损失函数后加"惩罚项"约束复杂度。
| 维度 | L1(Lasso) | L2(Ridge) | 弹性网络 |
|------|-----------|-----------|----------|
| 惩罚项 | $+\lambda\sum\|w_i\|$ | $+\lambda\sum w_i^2$ | $+\lambda_1\sum\|w_i\|+\lambda_2\sum w_i^2$ |
| 效果 | 权重归0,**特征选择** | 权重缩小不归零 | 兼具 |
| 模型 | 稀疏 | 稠密 | 介于 |
| 解唯一性 | 非唯一 | 唯一 | 唯一 |
| 计算 | 较高(坐标下降) | 低(解析解) | 最高 |
| 场景 | 特征极多多噪声 | 防过拟合稳定 | 特征高度相关 |
### 实战选择
- 特征极多多噪声 → **L1**(特征筛选)
- 特征不多怕过拟合 → **L2**(最稳)
- 特征高度相关 → **弹性网络**
- 深度学习 → 优化器 `weight_decay` + Dropout
⚠️ 正则化系数 $\lambda$ 太大→欠拟合。用交叉验证找"恰好不过拟合"临界值。
|
|
## 深度学习中的正则化
| 方法 | 做法 | 作用 |
|------|------|------|
| **Dropout** | 训练随机"掐死"部分神经元 | 强迫分散注意力,相当于集成无数子网络 |
| **Batch Normalization** | 强制每层输入均0方差1 | 引入轻微噪声,客观起正则化效果 |
| **权重衰减** | 优化器加 `weight_decay`(即L2) | 缩小权重 |
| **数据增强** | 翻转/裁剪/加噪 | 等价增加数据 |
| **标签平滑** | one-hot的1改成0.9 | 防止过度自信 |
### Dropout 直觉
训练时随机让一部分神经元输出为0,每次迭代选不同神经元。强迫网络不能依赖任何单个特征,必须分散注意力。相当于同时训练无数个不同结构子网络最后集成,极大增强泛化能力。
### Batch Normalization 的正则化
BN 计算均值方差基于当前批次而非整个数据集,这个批次随机性给训练带来轻微"噪声",效果类似 Dropout。很多情况用了 BN 可适当减少甚至取消 Dropout。
|
|
## 为什么 L1 稀疏、L2 不稀疏(几何视角)
想象权重 $w_1, w_2$ 二维坐标轴:
### L2 正则化(圆)
约束区域是**圆**。圆与误差函数等高线相切时,切点往往落在坐标轴**非零区域**,所以只让权重变小**不归零**。
### L1 正则化(菱形)
约束区域是**菱形**(方形)。菱形顶点正好落在坐标轴上(如 $w_1=0, w_2=1$)。当误差等高线与顶点相交,会把某特征权重**直接清零**,实现特征筛选。
### 数学推导直觉
- L1 梯度:$\frac{\partial}{\partial w}|w| = \text{sign}(w)$,在 0 点不可导,优化易把权重推到 0
- L2 梯度:$\frac{\partial}{\partial w}w^2 = 2w$,权重趋近 0 时梯度也趋近 0,"刹车",不会真的到 0
### 记忆口诀
> L1 菱形顶点在轴上 → 稀疏(特征选择);
> L2 圆形切点在非零 → 稠密(权重衰减)。
|
|
## 标准化 vs 归一化
特征数值范围差异大(年龄[0-100] vs 收入[1k-1M])时必须处理:
| 方法 | 公式 | 适用 |
|------|------|------|
| **标准化(Z-Score)** | $x' = \frac{x-\mu}{\sigma}$ | 数据服从正态分布 |
| **归一化(Min-Max)** | $x' = \frac{x-\min}{\max-\min}$ | 强行压到 [0,1] |
### 为什么必须做?
- **距离算法(KNN/K-Means/SVM)**:收入会主导距离,年龄失效
- **梯度下降(线性/逻辑/神经网络)**:未归一化时等高线呈椭圆,梯度路径曲折(Zigzag)收敛极慢
### 关键:树模型不需要归一化
**树模型(随机森林/XGBoost)不需要归一化**,因为树只关心排序(分裂点)不关心数值大小。
> 这是面试常考区分点:什么时候需要标准化,什么时候不需要。
|
|
## 缺失值处理
按优先级排序:
1. **删除**:缺失比例极低(<1%)且记录少,直接删行
2. **填充**(最常用):
- 数值型:均值/中位数/众数(**中位数对异常值鲁棒**)
- 类别型:众数或标记为 "Unknown" 新类别
3. **模型预测**:缺失严重但不舍删,用其他列预测填充(如随机森林插值)
4. **XGBoost 杀手锏**:树模型训练时自动学习"最优默认分裂方向",把缺失值分到增益最大分支,**无需提前填充**
### 异常值处理(行业补充)
- 检测:箱线图(IQR法)、Z-Score(>3为异常)、孤立森林
- 处理:删除、截断(Winsorize)、对数变换压缩长尾
|
|
## 类别特征编码
| 编码 | 做法 | 适用 | 风险 |
|------|------|------|------|
| **Label Encoding** | 红=1,蓝=2,绿=3 | 有序类别(学历小学<中学<大学) | 强加"1<2<3"大小关系误导模型 |
| **One-Hot** | 变成三列(是不是红/蓝/绿) | 无序类别 | 类别取值多→极度稀疏高维维度灾难 |
| **Target Encoding**(进阶) | 用该类别目标变量均值替换 | 类别极多(如城市) | 需K折交叉验证防过拟合 |
### 何时用哪种
- **有序类别**(学历、等级):Label Encoding
- **无序且类别少**(<10个):One-Hot
- **无序且类别多**(城市1000个):Target Encoding 或嵌入层
|
|
## 样本不均衡处理
正负样本严重不平衡(欺诈检测 100:1):
### 1. 数据层面
| 方法 | 做法 |
|------|------|
| **过采样** | 复制少数类,或 **SMOTE**(在少数类样本间插值生成新样本) |
| **欠采样** | 从多数类随机抽取使与少数类相近(可能丢信息) |
### 2. 算法层面
逻辑回归/SVM/XGBoost 设 `class_weight='balanced'`,让模型对少数类误判付出更大代价(惩罚权重)。
### 3. 评价指标层面(最易踩坑)
⚠️ **绝对不能只用准确率**!1% 正例全预测负,准确率 99% 但无意义。
应看:**Precision、Recall、F1-Score、AUC**(对不平衡不敏感)。
### 三"千万不要"避坑指南
1. 千万别说"我用默认参数跑一下" → 要讲调参逻辑
2. 千万别说"数据量越大模型越好" → 要看信噪比,噪声多增数据反加剧过拟合
3. 千万别只盯准确率 → 混淆矩阵和业务成本才是终极标准
|
|
## 选算法的四步定位法
### 第一步:明确问题类型
预测房价→回归;区分猫狗→分类;自动分组→聚类;下棋玩游戏→强化学习。
### 第二步:审视数据(标签与规模)
- 有标签→监督;无标签→无监督
- 小样本(<万级)→SVM、逻辑回归;大数据(百万+)→神经网络、XGBoost
### 第三步:检查硬性约束(可解释性与速度)
- 要解释给老板→线性回归、逻辑回归、决策树
- 推理要毫秒级→线性模型、决策树
- 不要求解释→神经网络、XGBoost
### 第四步:看数据特征(结构化/非结构化)
- 表格数据→XGBoost/LightGBM
- 图像/语音/文本→深度学习(CNN/RNN/Transformer)
- 高维稀疏(文本词袋)→朴素贝叶斯、SVM、逻辑回归
### 给新手的最终建议
1. **从简单开始**:永远先跑逻辑回归/随机森林 Baseline 知道下限
2. 精度不够再换复杂模型,别"大炮打蚊子"
3. **没有免费午餐定理**:没算法在所有问题上最好,候选3-4个都跑一遍看验证集
|
|
## 核心算法场景对照表
| 算法 | 最佳场景 | 致命缺点 |
|------|----------|----------|
| 线性回归 | 房价/销售额连续值预测 | 拟合非线性效果极差 |
| 逻辑回归 | 信用评分/点击率/医疗诊断 | 不能处理复杂特征交互 |
| 决策树 | 客户流失/风险规则挖掘 | 极易过拟合不稳定 |
| 随机森林 | 表格数据建模起步首选 | 超高维稀疏(文本)表现一般 |
| XGBoost/LightGBM | Kaggle/金融风控/广告推荐 | 参数多调参复杂,对异常值敏感 |
| SVM | 文本分类/人脸识别/小样本高维 | 大数据集(>10万)训练极慢 |
| 朴素贝叶斯 | 垃圾邮件/情感分析/新闻分类 | 特征依赖明显时效果变差 |
| KNN | 推荐系统/小样本实验 | 在线预测极慢,维度灾难 |
| 神经网络 | 图像/语音/NLP(ChatGPT类) | 需大量数据算力,黑盒不可解释 |
### 场景速查
| 场景 | 首选 |
|------|------|
| 表格数据预测流失 | 随机森林/XGBoost + 逻辑回归基线 |
| 图片猫狗识别 | CNN(ResNet/EfficientNet) |
| 预测销售额+解释原因 | 线性回归基线→XGBoost看特征重要性 |
| 高维小样本(罕见病) | 线性SVM / 逻辑回归+L2 |
| 用户日志先分类群体 | PCA降维→DBSCAN/K-Means |
|
|
## 行业补充:交叉验证
课件提"交叉验证是最好的医生"但没系统讲。
### K 折交叉验证(K-Fold CV)
数据分 K 份(通常5或10),每次用 K-1 份训练、1份验证,轮 K 次取平均。比单次划分稳定得多。
```python
from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X, y, cv=5)
print(f"平均准确率: {scores.mean():.3f} ± {scores.std():.3f}")
```
### 变种
- **分层 K 折(StratifiedKFold)**:保持每折类别比例,**不均衡数据必用**
- **留一法(LOO)**:K=样本数,最彻底但慢
- **时序交叉验证**:时间序列必须按时间切,不能随机(防未来信息泄漏)
### 数据泄漏(Data Leakage)⚠️ 面试必坑
- **错误**:先对全数据标准化/填缺失,再划分训练/测试 → 测试集信息泄漏到训练
- **正确**:**先划分,再用训练集统计量(均值/方差)处理测试集**(用 `Pipeline` 保证顺序)
|
|
## 行业补充:超参数调优
| 方法 | 原理 | 优缺点 |
|------|------|--------|
| **网格搜索 GridSearch** | 遍历所有参数组合 | 穷举全面但极慢 |
| **随机搜索 RandomizedSearch** | 随机采样参数组合 | 比网格快,往往够用 |
| **贝叶斯优化** | 用代理模型预测哪组参数好,智能采点 | 高效,现代首选(Optuna/Hyperopt) |
### 实战调参顺序(以 XGBoost 为例)
1. 先固定学习率 `eta=0.1`,调 `n_estimators`(树数量)
2. 调树深度 `max_depth`(通常 3-10)和 `min_child_weight`
3. 调正则化 `gamma`、`alpha`、`lambda`
4. 调采样 `subsample`、`colsample_bytree`
5. 最后降低学习率 `eta=0.01` 增加 `n_estimators` 精调
### 现代工具:Optuna
```python
import optuna
def objective(trial):
params = {
'max_depth': trial.suggest_int('max_depth', 3, 10),
'learning_rate': trial.suggest_float('lr', 1e-3, 0.3, log=True),
}
# 训练并返回验证集分数
return score
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=50)
```
|
|
## 行业补充:SVM 与核技巧深入
课件提到 SVM "核技巧解决非线性"但没展开。
### SVM 核心思想
找一个"分类超平面"让两类数据点离平面**距离最大化**(最大间隔)。
间隔:$margin = \frac{2}{\|\mathbf{w}\|}$,最大化间隔 = 最小化 $\frac{1}{2}\|\mathbf{w}\|^2$。
### 核技巧(Kernel Trick)
低维空间线性不可分的数据,映射到高维可能线性可分。但高维映射计算代价大,**核技巧**用核函数直接在低维算内积,等价于高维:
| 核函数 | 公式 | 适用 |
|--------|------|------|
| **线性核** | $K(x,y) = x^\top y$ | 线性可分、高维稀疏(文本) |
| **多项式核** | $K(x,y) = (x^\top y + c)^d$ | 中等非线性 |
| **RBF/高斯核** | $K(x,y) = e^{-\gamma\|x-y\|^2}$ | **最常用**,强非线性,小样本高维首选 |
### SVM vs 逻辑回归
| 维度 | SVM | 逻辑回归 |
|------|-----|----------|
| 目标 | 最大化间隔 | 最大化似然(交叉熵) |
| 损失 | Hinge Loss | Log Loss |
| 核技巧 | 支持原生 | 需额外工程 |
| 输出 | 类别(距离) | 概率 |
| 大数据 | 慢 | 快 |
|
|
## 基于密码的聚类(隐私计算)
课件提到"基于密码的聚类",是**隐私计算/联邦学习**领域话题。
| 维度 | 传统(明文)聚类 | 基于密码(密文)聚类 |
|------|----------------|---------------------|
| 核心目标 | 最大化聚类效果 | **保护数据隐私**防泄露 |
| 处理数据 | 明文直接算距离 | 密文(同态加密 Paillier) |
| 场景 | 数据可公开(市场分析) | 医疗/金融/联邦学习数据不能离开本地 |
| 挑战 | 复杂形状高维自动定K | 密文上加减乘除比较,开销巨大 |
### 安全 K-Means 流程(Alice + Bob + 不可信云 C)
1. Alice、Bob 各自用同态加密公钥加密数据上传云 C
2. C 在密文上用安全距离/比较协议计算谁离哪个中心近
3. C 返回密文结果给有私钥方解密
> **面试金句**:传统聚类是"算法问题"(怎么分得对),密码聚类是"安全问题"(怎么分得安全)。两者是不同工具,不是替代关系。
|
|
## 没有免费午餐定理与其他重要概念
### 没有免费午餐定理(NFL Theorem)
**没有任何一个算法在所有问题上都是最好的**。
- 对所有可能的问题取平均,所有算法表现一样
- 实际中需根据数据特性、问题类型选择
- 最稳妥做法:把候选 3-4 个算法都在验证集上跑一遍,看哪个指标好选哪个
### 奥卡姆剃刀原则
在性能相近时,**选择更简单的模型**。简单模型更易解释、更快、更不易过拟合。
### 维度灾难(Curse of Dimensionality)
- 特征维度增加时,数据在高维空间变得稀疏
- 距离度量失效(所有点距离趋于一致)
- 解决:降维(PCA)、特征选择
### 生成模型 vs 判别模型
| 类型 | 建模 | 代表 |
|------|------|------|
| **判别模型** | $P(y\|x)$ 直接建模边界 | 逻辑回归、SVM、神经网络、决策树 |
| **生成模型** | $P(x,y)$ 建模联合分布 | 朴素贝叶斯、GMM、HMM、GAN、VAE |
|
|
## 面试避坑金句汇总
### 回答技巧
1. **STAR 原则**:带场景。如问过拟合,说"我训练 ResNet 时验证集 loss 10 epoch 后上升,用 Dropout+早停解决"
2. **量化思维**:多用数字"Batch Size=32""学习率 1e-4"
3. **对比思维**:先抛本质区别再细化
### 高频追问标准回答
**Q:Bagging 主要降低偏差还是方差?**
A:主要降低**方差**。通过平均多个模型平滑了单个模型波动。
**Q:Boosting 主要降低偏差还是方差?**
A:主要降低**偏差**。串行修正前一个模型错误,不断拟合残差提升拟合能力(但 Boosting 不加正则化易高方差过拟合)。
**Q:为什么不能只用准确率?**
A:不均衡数据下准确率失真。1% 正例全预测负准确率 99% 但无意义。应看 Precision/Recall/F1/AUC。
**Q:树模型为什么不需要标准化?**
A:树只关心特征的排序(分裂点)不关心数值大小,标准化不改变排序所以无影响。
|
Scikit-learn 官方文档
XGBoost 文档
LightGBM 文档