五种算法详解(SVM / Logistic Regression / kNN / Random Forest / HistGradientBoosting)
五种算法详解(SVM / Logistic Regression / kNN / Random Forest / HistGradientBoosting)
本文介绍项目中横向对比与投票集成所用的五种经典算法:技术原理、关键超参数、优缺点、适用场景、在本项目的推荐配置与常见陷阱。
1) 支持向量机 SVM(线性核)
-
核心原理:通过最大化分类间隔(margin)来提升泛化能力。线性核下即在特征空间中寻找最优超平面,间隔最大化等价于二次优化问题;加入松弛变量处理不可分数据。
-
概率输出:通常通过 Platt scaling 等方法对决策函数进行后校准得到近似概率,需要
probability=True
训练时启用。 -
关键超参:
- C(正则强度):越大越倾向于拟合训练数据,越小越平滑、泛化更强。
- kernel:本项目使用
linear
(线性核)。 - probability:为 True 时启用概率估计(训练更慢)。
-
优点:
- 适合高维特征、小样本;具有明确的间隔最大化几何解释。
- 在线性可分近似时表现稳健,泛化较好。
-
缺点:
- 概率估计为后处理,训练耗时会增加;对异常点较敏感。
-
适用场景:
- 高维表征(如图像经降维后的特征)、类间边界相对线性。
-
本项目推荐配置:
LinearSVC
或SVC(kernel='linear', probability=True)
;前置StandardScaler + PCA(n_components=50)
。
-
常见陷阱:
- 忘记标准化会导致权重尺度失衡;C 过大易过拟合,过小则欠拟合。
2) 逻辑回归 Logistic Regression(One-vs-Rest)
- 核心原理:以逻辑函数建模后验概率,最大化对数似然;多分类用 OvR 拆分为多个二分类。L2 正则可抑制过拟合。
- 关键超参:
- C(正则强度,和 SVM 定义方向相反):值大→正则弱;值小→正则强。
- penalty/solver:常见
penalty='l2'
,solver='lbfgs'
或saga
(支持大规模与稀疏)。 - class_weight:
'balanced'
可在类别不均衡时改善召回。
- 优点:
- 概率输出可靠、可解释性强;线性模型,训练与预测高效。
- 缺点:
- 对非线性边界拟合能力有限;特征工程要求高。
- 适用场景:
- 线性可分近似、需要概率与可解释性、作为稳健基线。
- 本项目推荐配置:
LogisticRegression(multi_class='ovr', class_weight='balanced')
,配合StandardScaler + PCA
。
- 常见陷阱:
- 未标准化或正则不当导致收敛慢或欠/过拟合;类别极不均衡时需关注阈值与权重。
3) k 近邻 kNN(距离加权)
- 核心原理:基于相似度的惰性学习;预测时在训练集中寻找最近的 k 个邻居,进行投票或概率估计(距离加权)。
- 关键超参:
- k:邻居数量,过小易受噪声影响,过大导致过度平滑。
- weights:
'uniform'
或'distance'
;建议使用'distance'
提升鲁棒性。 - metric:距离度量,常用欧氏距离。
- 优点:
- 简单直观,无训练时间;对多模态数据友好。
- 缺点:
- 预测时开销大;对特征尺度敏感;对噪声与冗余特征较敏感。
- 适用场景:
- 小规模、结构清晰的数据集;作为对比基线。
- 本项目推荐配置:
KNeighborsClassifier(n_neighbors=5, weights='distance')
,使用标准化与 PCA 后的特征。
- 常见陷阱:
- 未标准化导致距离失真;k 取 1 在噪声存在下波动大。
4) 随机森林 Random Forest
- 核心原理:Bagging 思想集成多棵决策树(随机特征子集),通过投票与均值降低方差、提升鲁棒性。
- 关键超参:
- n_estimators:树的数量;适度增大提升稳定性但带来更多计算。
- max_depth, max_features:控制树复杂度与随机性。
- class_weight:不均衡数据时可用
'balanced'
。
- 优点:
- 对特征尺度不敏感;抗过拟合;可给出特征重要度;概率输出自然。
- 缺点:
- 相比线性模型可解释性较差;树太深会过拟合(虽集成可缓解)。
- 适用场景:
- 中小规模、非线性关系明显、特征工程有限的任务。
- 本项目推荐配置:
RandomForestClassifier(n_estimators≈300, class_weight='balanced')
,前置标准化+PCA 可加速但非必须。
- 常见陷阱:
- n_estimators 太小波动大;未限制 max_depth 在小数据集上也可能过拟合。
5) 直方梯度提升树 HistGradientBoosting (HGBT)
- 核心原理:梯度提升树的高效实现,对连续特征先做分桶(直方),以直方统计加速分裂搜索;逐轮拟合残差,提升偏差方向的性能。
- 关键超参:
- learning_rate:步长,越小越稳健但需更多迭代。
- max_iter:迭代轮数(树数)。
- max_depth / max_leaf_nodes:控制树的表达能力与过拟合风险。
- l2_regularization:正则项强度。
- 优点:
- 拟合能力强、速度快;对多种特征分布鲁棒;常在表格数据/低维嵌入上有更高精度。
- 缺点:
- 对噪声与异常点敏感;超参众多需调优;概率校准有时需要后处理。
- 适用场景:
- 特征维度较低(或降维后)、非线性关系明显、追求更高精度的任务。
- 本项目推荐配置:
HistGradientBoostingClassifier(max_iter≈300)
,配合 PCA 后 50 维特征;可与 SVM/LogReg 进行投票集成。
- 常见陷阱:
- learning_rate 与 max_iter 需配套调整;max_depth 过大易过拟合。
投票与融合策略建议
- 多数投票(硬投票):
- 简洁稳健;平局可用“按权重的概率均值”打破。
- 加权投票(软投票):
- 将各模型的类别概率向量按权重相加取 argmax;权重可用验证集 Accuracy 或 F1;本项目默认读取
svm_pd_model/model_compare_results.json
。
- 将各模型的类别概率向量按权重相加取 argmax;权重可用验证集 Accuracy 或 F1;本项目默认读取
- 何时采用:
- 单模型已较强但类别间有互补时,集成常带来稳健性提升。
本项目中的实践要点
- 统一预处理:
StandardScaler + PCA(n_components=50)
,再送入各分类器。 - 概率缺失时的处理:对于不提供
predict_proba
的模型,用 one-hot 近似概率用于集成。 - 权重来源:若
model_compare_results.json
缺失则使用等权重。
参考资料
- scikit-learn 官方文档:
- SVM: https://scikit-learn.org/stable/modules/svm.html
- Logistic Regression: https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
- kNN: https://scikit-learn.org/stable/modules/neighbors.html
- Random Forest: https://scikit-learn.org/stable/modules/ensemble.html#forest
- HistGradientBoosting: https://scikit-learn.org/stable/modules/ensemble.html#histogram-based-gradient-boosting
- 模型概率校准(Platt scaling / Isotonic):https://scikit-learn.org/stable/modules/calibration.html