监督学习算法:线性模型、树与 SVM
监督学习算法:线性模型、树与 SVM
引言
监督学习是机器学习中最核心的分支,模型从已标注的数据中学习输入到输出的映射关系。本教程聚焦三大核心算法家族:线性模型、树模型、支持向量机,帮你建立从简单到复杂的算法心智模型。
1. 线性模型:从回归到分类的基石
线性模型假设输出是输入特征的线性组合。尽管简单,它可解释性强,且通过特征工程、正则化等方法能适应高维场景。
1.1 线性回归
目标:最小化残差平方和
对于特征向量 ( \mathbf{x} = [x_1, x_2, ..., x_d] ),模型预测:
[
\hat{y} = w_0 + \sum_{j=1}^d w_j x_j = \mathbf{w}^T \mathbf{x} + b
]
其中 (\mathbf{w}) 为权重向量,(b) 为偏置。
损失函数:均方误差 (MSE)
[
J(\mathbf{w},b) = \frac{1}{2m} \sum_{i=1}^m (\hat{y}^{(i)} - y^{(i)})^2
]
优化:正规方程(闭式解)或梯度下降。
何时使用:输出为连续值,特征与目标大致线性相关。
1.2 逻辑回归(分类线性模型)
虽是“回归”,却用于二分类。它将线性输出通过 sigmoid 函数映射到 ((0,1)) 概率。
[
P(y=1|\mathbf{x}) = \sigma(\mathbf{w}^T \mathbf{x} + b), \quad \sigma(z)=\frac{1}{1+e^{-z}}
]
损失函数:交叉熵损失
[
J = -\frac{1}{m}\sum_{i=1}^m [y^{(i)}\log \hat{p}^{(i)} + (1-y^{(i)})\log(1-\hat{p}^{(i)})]
]
决策边界:(\mathbf{w}^T \mathbf{x}+b = 0),是线性边界。
多分类:用 softmax 替代 sigmoid,变成多项逻辑回归。
1.3 正则化:防止过拟合
- L1 正则 (Lasso):倾向于稀疏解,自动特征选择。
( J + \lambda |\mathbf{w}|_1 ) - L2 正则 (Ridge):收缩权重大小,防止过拟合。
( J + \lambda |\mathbf{w}|_2^2 ) - Elastic Net:结合 L1 和 L2。
实践提示:先标准化特征,再应用正则化线性模型。
1.4 线性模型的优缺点速查
| 优点 | 缺点 |
|---|---|
| 训练速度快,易于解释 | 对非线性关系表达能力弱 |
| 少量样本也能较好泛化(加正则) | 对异常值敏感 |
| 可输出特征重要性(权重绝对值) | 需要特征工程处理非线性交互 |
2. 树模型:决策树与集成方法
决策树通过递归划分特征空间,形成易于理解的规则。但单棵树容易过拟合,因此诞生了强大的集成模型。
2.1 决策树基础
核心概念:选择最优划分特征,使子节点“纯度”最高。
常用纯度指标:
- 分类:基尼系数、熵(信息增益)
- 回归:MSE 降低量
划分过程:自上而下递归,直到满足停止条件(深度、最小样本数等)。
算法代表作:ID3、C4.5、CART。
过拟合对策:
- 预剪枝:限制最大深度、叶节点最少样本数
- 后剪枝:先生成完整树再剪除冗余分支
2.2 随机森林:并行集成
随机森林通过打包(Bagging)和随机特征子空间生成多棵树,最后投票(分类)或平均(回归)。
- 每棵树在自助采样数据上训练
- 每次分裂仅随机考虑部分特征(如 (\sqrt{d}) 个)
- 降低方差,泛化能力极强
- 天然输出特征重要性(特征在分裂中带来的纯度增益平均值)
适用场景:高维数据、缺失值容忍、特征交互复杂。
2.3 梯度提升树:串行集成
梯度提升框架顺序训练弱学习器,每棵新树拟合前一棵的残差。
- GBDT:使用一阶梯度,通常用决策树桩。
- XGBoost / LightGBM / CatBoost:工业级实现,加入二阶梯度、正则化、并行优化、类别特征处理等。
- 过拟合控制:学习率(shrinkage)+ 早停 + 行/列采样。
优势:通常是结构化数据竞赛的王者;对异常值鲁棒(相比线性模型)。
2.4 树模型对比与选择
| 模型 | 核心思想 | 对抗过拟合方式 | 典型场景 |
|---|---|---|---|
| 决策树 | 贪婪划分 | 剪枝、设置深度 | 需要可解释规则时 |
| 随机森林 | Bagging + 随机特征 | 平均多棵树 | 快速基线,高维数据 |
| GBDT/XGB等 | Boosting 残差拟合 | 学习率、早停、正则化 | 追求最高预测性能的表格数据 |
3. 支持向量机:寻找最优分类边界
SVM 的核心是最大化类别间的间隔(Margin),并通过核技巧处理非线性数据。
3.1 线性 SVM(硬间隔与软间隔)
目标:找到超平面 (\mathbf{w}^T\mathbf{x}+b=0),使最近点到平面距离最大。
这等价于约束优化问题(原始形式):
[
\min_{\mathbf{w},b} \frac{1}{2}|\mathbf{w}|^2 \quad \text{s.t.} ; y_i(\mathbf{w}^T\mathbf{x}_i + b) \ge 1
]
软间隔引入松弛变量 (\xi_i) 允许个别点错误分类,控制权衡的参数 (C):
[
\min \frac{1}{2}|\mathbf{w}|^2 + C\sum_i \xi_i
]
- (C) 大:强调正确分类,可能过拟合
- (C) 小:允许更多误分类,间隔更宽,防止过拟合
3.2 核技巧:低维空间线性不可分的解决之道
当数据非线性可分时,通过映射 (\phi(\mathbf{x})) 到高维空间,然后在高维做线性 SVM。核函数 (K(\mathbf{x}_i, \mathbf{x}_j) = \langle \phi(\mathbf{x}_i), \phi(\mathbf{x}_j) \rangle) 直接计算内积,避免显式高维计算。
- 多项式核:(K(\mathbf{x}, \mathbf{z}) = (\gamma \mathbf{x}^T\mathbf{z} + r)^d)
- RBF (高斯) 核:(K(\mathbf{x}, \mathbf{z}) = \exp(-\gamma |\mathbf{x} - \mathbf{z}|^2))
- (\gamma) 控制单个样本的影响范围:大(\gamma) → 复杂边界,小(\gamma) → 平滑边界。
- Sigmoid 核等。
3.3 SVM 实战关键点
- 数据缩放:SVM 对特征尺度敏感,必须标准化到零均值单位方差。
- 参数选择:通过网格搜索选择 (C) 和 (\gamma)(RBF条件下)。
- 优缺点:
- 优点:在中小规模数据上表现优异,间隔最大化有理论保证,核方法强大。
- 缺点:大规模数据训练慢(复杂度 (O(n^2) \sim O(n^3))),对参数和核函数选择敏感,难以直接输出概率(需 Platt scaling 等)。
3.4 三类算法对比总结
| 维度 | 线性模型 | 树模型 (RF/GBDT) | SVM |
|---|---|---|---|
| 假设 | 线性假设 | 无分布假设,自适应性划分 | 间隔最大化 + 核诱导的假设 |
| 可解释性 | ★★★★★ (系数直接解释) | ★★★☆☆ (可看重要性,树可解释) | ★★☆☆☆ (支持向量不易解释) |
| 训练速度 | 快 | GBDT 慢(但优化后快),RF 中等 | 一般(样本多时很慢) |
| 预测速度 | 快 | 快 | 中等(依赖支持向量数量) |
| 处理非线性 | 需特征工程(多项式、交互项) | 天然处理 | 通过核函数 |
| 异常值影响 | 敏感(平方损失放大) | 鲁棒(树分割基于排序) | 有一定影响(软间隔可缓解) |
| 典型应用 | 大规模线性问题,如广告点击率 | 表格数据竞赛,推荐系统,风控 | 手写识别,文本分类(线性SVM),中小规模 |
4. 从零到实战:动手搭建
4.1 环境准备与伪代码框架
使用 Python 的 scikit-learn 快速体验。
# 统一数据预处理
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
# 线性模型
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.svm import SVC
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
4.2 模型训练流程模板
- 划分训练集和测试集
- 特征标准化(对线性和 SVM 必要,树模型可省略)
- 定义并训练模型
- 评估准确率/精召/F1 或 RMSE
4.3 调参建议
- 逻辑回归:主要调整正则化强度
C和正则化类型(L1/L2)。 - SVM:RBF 核下,
C和gamma是关键。用 GridSearchCV 搜索指数级候选值。 - 随机森林:
n_estimators(树数量)先设定足够大(如 300),再调max_depth、min_samples_split。 - GBDT:优先调整学习率
learning_rate和n_estimators,配合早停;再调树复杂度参数。
4.4 验证学习效果
尝试用加州房价数据集(回归)和葡萄酒数据集(分类)分别测试线性回归 / 逻辑回归、随机森林、SVM,对比性能与训练时间。你会发现:树模型在结构化数据上常常领先,但 SVM 经过精心调参在小数据集上可能持平或反超。
5. 延伸学习与资源
- 理论深入:阅读《机器学习》(周志华)西瓜书相关章节,《统计学习方法》李航。
- 编码实践:尝试从零实现线性回归的梯度下降、决策树的 CART 算法、SVM 的 SMO 优化。
- 可视化工具:利用 TensorBoard 或 Yellowbrick 库观察特征重要性、决策边界。
掌握这三类算法,你就拥有了处理绝大多数监督学习问题的工具箱。下一步可根据数据特性(图像→CNN,序列→RNN/Transformer)深入学习,但那已是深度学习范畴。先扎根经典,未来方可行远。