首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Scikit-learn笔记10 Bagging

放假归来的第一文,关于sickit-learn对集成学习Bagging的实现。Bagging字面意思为”装袋法“,更正式的名称为Bootstrap Aggregating,即自助式集成。Bagging算法过程如下:

1、从样本集中有放回的抽样M个样本,约有37%的样本没有机会抽到。

2、用这M个样本训练基分类器C。

3、重复这个过程N次,得到N个基分类器。

4、对于新传入实例A,用这N个新分类器得到一个分类结果的列表。

5、若待分类属性是数值型(回归),求这个列表的算数平均值作为结果返回。

若待分类属性是枚举类型(分类),按这个列表对分类结果进行投票,返回票数最高的。

下面来介绍sklearn中的Bagging分类器——BaggingClassifier。代码如下

导入集成学习包下的BaggingClassifier,同时导入基学习器决策树包。模型主要参数说明如下,未解释参数请参考前面章节。

base_estimator:Object or None。None代表默认是DecisionTree,Object可以指定基学习器,如:LR、SVM、KNN等。

n_estimators:int (default=10)。要集成的基学习器的个数。

max_samples:int or float(default=1.0)。抽取去训练基学习器的样本数量。int 代表抽取数量,float代表抽取比例。

max_features: int or float (default=1.0)。抽取去训练基学习器的特征数量。int 代表抽取数量,float代表抽取比例。

bootstrap: boolean (default=True) 。样本子集的抽样方式(有放回和不放回)

bootstrap_features: boolean(default=False)。特征子集的抽样方式(同上)。

oob_score: boolean。是否使用袋外样本估计泛化误差。默认是不使用。

Bagging能降低模型的方差,可以对抗过拟合。一般而言,Bagging需要使用高方差、不稳定的个体模型。具体到决策树上,就体现在决策树的层数更深。

接下来使用kaggle泰坦尼克数据集演示BaggingClassifier的效果:

如上所说,将基学习器最大深度设为None,让决策树无限生长,这里假设集成30颗树,oob_score=True即使用未拟合决策树的样本(袋外样本)作为测试集评估效果。因此本例不采用交叉验证评估效果。上图显示测试集的得分为0.84。

模型训练好后,可以得到每个基学习器预测的样本标签,如下是第一个。

还可以看到每个分类器抽取的特征编号。原始的Bagging算法只是对样本无放回采样,不会随机抽取特征,但sklearn中的Bagging也实现了对特征的采样。默认(False)是采用无放回抽样,单颗树的特征都不会重复。

还有一个属性是可以打印每个基学习器的模型参数,如下列出了前3个决策树的模型参数,除了随机种子不同其他都一样。

前面提到Bagging最好使用不稳定的弱学习器,下面看一下换成一个强学习器的效果:

袋外测试集得分0.8,低于决策树的0.84,可以看出换成更稳健的逻辑回归并无助于改善性能。

历史文章回顾

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180225G01K5Y00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券