集成学习,即通过构建并结合多个模学习器来共同完成学习任务。集成学习的一般结构:先产生一组“个体学习器”,再用某种策略将它们结合起来。通过这种方式,集成学习可以获得比单一学习器显著优越的泛化性能。简单来说,集成学习就相当于用团队力量来解决问题,如何产生并结合团队成员便是集成学习研究的核心。
根据个体学习器的生成方式,目前的集成学习方法大致可分为两大类,即个体学习器存在依赖关系、必须串行生成的路劣化方法,以及个体个体学习器间不存在强依赖关系、可同时生成的并行化方法。前者代表是Boosting,后者代表是Bagging。
一、Bagging与随机森林
基本原理:同时训练多个学习机,分别对y进行预测,最后所有子学习机以投票的形式(分类)或者均值的形式(回归),返回集成的预测结果。
子学习机的构建策略:对样本按一定比例有放回的抽样,抽出m个样本子集,然后构建m个子学习机分别在m个样本子集上进行训练。
继承策略:投票法或均值法。
随机森林
- 子学习器:决策树模型
- 子学习器构建方法:按一定比例同时对样本和特征进行有放回的抽样,抽样出m个特征和样本都存在差异的样本子集,再在这m个子集上训练m个决策树模型。
- 集成方法:投票(分类)或者均值(回归)。
- sklearn相关模块:
from sklearn.ensemble import RandomForestClassifier
,随机森林分类器- 相关参数:
-
n_estimators
:子学习器的个数 -
max_features
:每棵树选择的特征的最大数量,默认为auto -
bootstrap
:构建决策树模型时是否使用有放回的抽样方式,默认为True
-
- 相关参数:
二、Boosting
基本原理:先训练一个子学习器,再计算子学习器的误差或残差,并以此作为下一个子学习器的输入,之后不断迭代重复整个过程,使得模型损失函数不断减小。
集大成者:xgboost
首先说说gboosting(gradient boosting),即梯度提升模型,根据当前模型损失函数的负梯度信息来训练新加入的子学习器,然后将所有训练好的子学习器以累加的形式混合到最终模型中。
xgboosting就是极限梯度提升模型。
- 基本思想:gboosting
- 避免过拟合的手段:加入L1和L2正则系数
- 子学习器:CART决策树、线性回归、线性分类器
- 集成策略:在gboosting的基础上,融入随机森林对子学习器训练样本和特征进行随机抽样的策略。
- 优化方法:同时使用损失函数一阶、二阶导数信息,加快优化速度。
- 工程优化:提高训练效率,支持并行计算。
- 相关代码:需要用pip安装xgboost,具体文档:https://xgboost.readthedocs.io/en/latest/python/index.html。
import xgboost as xgb
-
xgb.XGBClassifier
参数简介:- max_depth=3, 树最大深度
- learning_rate=0.1, 训练步长
- n_estimators=100, 子学习器数量,不需要过多,也不宜太少
- verbosity=1,
- silent=None,
- objective='binary:logistic', 任务类型,binary:logistic为二元分类,输出概率,回归任务为reg:squarederror,还有binary:hinge也是二元分类,不过输出为分类结果,其它任务类型可见:https://xgboost.readthedocs.io/en/latest/parameter.html#learning-task-parameters
- booster='gbtree', 子学习器,有gbtree和gbliner两种,前者是基于树的模型,后者是线性模型
- n_jobs=1,
- nthread=None, 最大线程数
- gamma=0,
- min_child_weight=1,
- max_delta_step=0,
- subsample=1, 控制每棵树,选取训练样本比例
- colsample_bytree=1, 控制每棵树,训练特征比例
- colsample_bylevel=1,
- colsample_bynode=1,
- reg_alpha=0, L1正则系数
- reg_lambda=1,
- scale_pos_weight=1,
- base_score=0.5,
- random_state=0,
- seed=None,
- missing=None,
-
网友评论