学习范式与基础
## 机器学习四大学习范式 用一个"学生备考"的比喻贯穿理解,再从数据、反馈、目标三个维度硬核对比。 | 范式 | 灵魂比喻 | 输入数据 | 反馈机制 | 核心目标 | |------|----------|----------|----------|----------| | **监督学习** | 有标准答案的刷题 | 有标签 | 即时绝对反馈(对/错) | 预测 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 文档