[机器学习]sklearn.ensemble模块

49 阅读5分钟

好的,sklearn 的 ensemble 模块是集成学习算法的核心,它包含了许多经典且强大的模型。

这些算法主要可以分为以下几大类:

1. Bagging 思想 (并行集成,目的是:降低方差)

核心思想:通过自助采样法构建多个基学习器,然后通过投票(分类)或平均(回归)结合预测结果,旨在降低方差。

  • BaggingClassifier / BaggingRegressor

    • 描述: 最基础的 Bagging 框架,可以指定任何基学习器(如决策树、SVM等),对其构建多个并行副本并进行集成。
    • 主要参数base_estimator(基学习器),n_estimators(基学习器的数量),max_samples(采样大小),bootstrap(是否有放回)。
  • RandomForestClassifier / RandomForestRegressor

    • 描述最著名、最常用的 Bagging 算法。以决策树为基学习器,并在构建每棵树时,不仅对样本进行随机采样,还对特征进行随机采样,进一步增强了模型的多样性和泛化能力。
    • 主要参数n_estimators(树的个数),max_depth(树的最大深度),min_samples_split(节点分裂所含最小样本数),max_features(每棵树考虑的最大特征数)。
  • ExtraTreesClassifier / ExtraTreesRegressor

    • 描述极端随机树/完全随机树。是随机森林的变体,区别在于:1)每个节点分裂时,特征值是完全随机选择的,而不是寻找最优划分点;2)通常使用全部训练样本(不采样)。训练更快,方差可能更低。
    • 主要参数: 与随机森林类似,但通常不需要剪枝参数(如max_depth)控制得那么严格。

2. Boosting 思想 (串行集成,目的是:降低偏差)

核心思想:按顺序训练基学习器,每个学习器试图纠正前一个学习器的错误,通过加权组合,旨在降低偏差。

  • AdaBoostClassifier / AdaBoostRegressor

    • 描述自适应提升。最早的 Boosting 算法之一。为每个训练样本赋予权重,每次迭代后增加分类错误样本的权重,使得后续学习器更关注难分的样本。
    • 主要参数base_estimator(通常为浅层决策树),n_estimatorslearning_rate(学习率,收缩每步的贡献)。
  • GradientBoostingClassifier / GradientBoostingRegressor (GBDT)

    • 描述梯度提升决策树。通过拟合损失函数的负梯度(残差的近似)来构建新的学习器,是许多竞赛中的常胜将军。sklearn 实现的是其传统版本。
    • 主要参数n_estimatorslearning_ratemax_depth(每棵弱树深度,通常很小,如3-5),subsample(行采样比例,引入随机性即为随机梯度提升)。
  • XGBRFClassifier / XGBRFRegressor(xgb)

    • 描述: sklearn API 风格的 XGBoost 随机森林。这是一个基于 XGBoost 框架实现的随机森林(即 Bagging 思想),而非梯度提升。使用方式和参数与随机森林类似。
  • HistGradientBoostingClassifier / HistGradientBoostingRegressor(类似lightgbm)

    • 描述基于直方图的梯度提升。sklearn 推荐的、速度更快、内存效率更高的梯度提升实现。它使用直方图分箱技术加速寻找最佳分裂点,尤其适合大规模数据集。功能上正在逐步替代传统的 GBDT
    • 主要参数max_iter(相当于 n_estimators),learning_ratemax_depthmin_samples_leaf

3. 投票与堆叠法 (结合策略)

核心思想:将多个不同类型的基学习器的预测结果通过某种策略结合起来。

  • VotingClassifier / VotingRegressor

    • 描述投票/平均集成
      • 分类: 支持hard(少数服从多数)和soft(加权平均概率)投票。
      • 回归: 对多个回归器的预测结果进行平均。
    • 主要参数estimators(基学习器列表),voting(投票方式)。
  • StackingClassifier / StackingRegressor

    • 描述堆叠集成。使用一层或多层学习器来结合基学习器的预测。第一层由多个基学习器组成,它们的输出被用作第二层(最终学习器,或称元学习器)的输入特征,由最终学习器做出最终预测。
    • 主要参数estimators(第一层学习器列表),final_estimator(最终学习器),cv(交叉验证方式,防止过拟合的关键)。

4. 其他/专用集成方法

  • IsolationForest
    • 描述孤立森林。一种专门用于异常检测的无监督集成算法。它通过随机划分特征来“孤立”样本,异常点通常更容易被孤立(路径更短)。
  • RandomTreesEmbedding
    • 描述: 一种无监督的变换方法,它构建一个完全随机的树森林,然后将样本根据最终落入的叶子节点进行编码(类似 One-Hot),常用于特征表示学习。

总结与选择建议

算法类别代表模型主要目标特点
BaggingRandomForest降低方差并行训练,抗过拟合强,稳定,适合高方差模型(如深树)。
BoostingGradientBoosting, HistGradientBoosting降低偏差串行训练,精度通常更高,可能过拟合,需仔细调参。
结合策略Voting, Stacking提升泛化结合异质模型,Stacking 潜力大但计算成本高、易过拟合。

一般入门推荐

  1. 首选 RandomForest: 简单、鲁棒、开箱即用,是优秀的基线模型。
  2. 追求更高精度时,尝试 HistGradientBoosting,并进行细致的参数调优。
  3. 当拥有多个表现不错的异构模型时,可以尝试 VotingStacking 来进一步提升性能。

你可以通过 from sklearn import ensemble 导入这些类,然后使用 help(ensemble.RandomForestClassifier) 等方式查看具体文档。