好的,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_estimators,learning_rate(学习率,收缩每步的贡献)。
-
GradientBoostingClassifier/GradientBoostingRegressor(GBDT)- 描述: 梯度提升决策树。通过拟合损失函数的负梯度(残差的近似)来构建新的学习器,是许多竞赛中的常胜将军。sklearn 实现的是其传统版本。
- 主要参数:
n_estimators,learning_rate,max_depth(每棵弱树深度,通常很小,如3-5),subsample(行采样比例,引入随机性即为随机梯度提升)。
-
XGBRFClassifier/XGBRFRegressor(xgb)- 描述: sklearn API 风格的 XGBoost 随机森林。这是一个基于 XGBoost 框架实现的随机森林(即 Bagging 思想),而非梯度提升。使用方式和参数与随机森林类似。
-
HistGradientBoostingClassifier/HistGradientBoostingRegressor(类似lightgbm)- 描述: 基于直方图的梯度提升。sklearn 推荐的、速度更快、内存效率更高的梯度提升实现。它使用直方图分箱技术加速寻找最佳分裂点,尤其适合大规模数据集。功能上正在逐步替代传统的 GBDT。
- 主要参数:
max_iter(相当于n_estimators),learning_rate,max_depth,min_samples_leaf。
3. 投票与堆叠法 (结合策略)
核心思想:将多个不同类型的基学习器的预测结果通过某种策略结合起来。
-
VotingClassifier/VotingRegressor- 描述: 投票/平均集成。
- 分类: 支持
hard(少数服从多数)和soft(加权平均概率)投票。 - 回归: 对多个回归器的预测结果进行平均。
- 分类: 支持
- 主要参数:
estimators(基学习器列表),voting(投票方式)。
- 描述: 投票/平均集成。
-
StackingClassifier/StackingRegressor- 描述: 堆叠集成。使用一层或多层学习器来结合基学习器的预测。第一层由多个基学习器组成,它们的输出被用作第二层(最终学习器,或称元学习器)的输入特征,由最终学习器做出最终预测。
- 主要参数:
estimators(第一层学习器列表),final_estimator(最终学习器),cv(交叉验证方式,防止过拟合的关键)。
4. 其他/专用集成方法
IsolationForest- 描述: 孤立森林。一种专门用于异常检测的无监督集成算法。它通过随机划分特征来“孤立”样本,异常点通常更容易被孤立(路径更短)。
RandomTreesEmbedding- 描述: 一种无监督的变换方法,它构建一个完全随机的树森林,然后将样本根据最终落入的叶子节点进行编码(类似 One-Hot),常用于特征表示学习。
总结与选择建议
| 算法类别 | 代表模型 | 主要目标 | 特点 |
|---|---|---|---|
| Bagging | RandomForest | 降低方差 | 并行训练,抗过拟合强,稳定,适合高方差模型(如深树)。 |
| Boosting | GradientBoosting, HistGradientBoosting | 降低偏差 | 串行训练,精度通常更高,可能过拟合,需仔细调参。 |
| 结合策略 | Voting, Stacking | 提升泛化 | 结合异质模型,Stacking 潜力大但计算成本高、易过拟合。 |
一般入门推荐:
- 首选
RandomForest: 简单、鲁棒、开箱即用,是优秀的基线模型。 - 追求更高精度时,尝试
HistGradientBoosting,并进行细致的参数调优。 - 当拥有多个表现不错的
异构模型时,可以尝试Voting或Stacking来进一步提升性能。
你可以通过 from sklearn import ensemble 导入这些类,然后使用 help(ensemble.RandomForestClassifier) 等方式查看具体文档。