【sklearn第十六讲】集成方法

本文深入探讨了集成学习方法,包括Bagging、随机森林、极端随机树、AdaBoost和Gradient Tree Boosting。介绍了这些方法的原理、应用场景及在sklearn中的实现,强调了它们在降低方差和减少过拟合方面的优势。
摘要由CSDN通过智能技术生成

机器学习训练营——机器学习爱好者的自由交流空间(入群联系qq:2279055353)

集成方法(Ensemble methods)的目标是,组合多个基础估计量的预测结果,以此改善单个估计量预测的通用性和稳健性。集成方法通常分为两大类:

  • 平均的方法:独立地构建多个估计量,然后平均它们的预测。一般来说,组合的估计量要优于任何一个基础估计量,这是因为它的方差减小了。例如, Bagging methods.

  • boosting方法:为了减少组合估计量的偏差,按顺序构建基础估计量,目的是为了组合几个弱估计量成一个强有力的集成方法。例如,AdaBoost.

Bagging 元估计量

在集成方法里,bagging方法组成了一类算法,它在原始的训练数据集的随机子集上创建一个黑箱(black-box)估计量的多个实例,然后聚集这些实例的预测为一个最终的预测。这类方法主要是为了减少一个基础估计量的方差(比如说,决策树)。通过在构建过程里引入随机化,然后再集成。在很多情况下,bagging方法只是改善一个模型,而不必修正基础算法。bagging方法可以有效地减少过度拟合,因此它对于复杂模型表现出色。Bagging方法有很多分支,它们的主要区别在对训练集的随机子集抽取上。

  • 当随机子集作为样本的随机子样本被抽取时,这类算法称Pasting.

  • 当样本有放回抽取时,这类算法称Bagging.

  • 当随机子集作为特征的随机子集被抽取时,这类算法称Random Subspaces.

  • 当基础估计量构建在样本和特征的双重子集时,这类算法称Random Patches.

在scikit-learn里,bagging法实现类BaggingClassifier, 输入用户自定义的基础估计量,由参数指定随机子集的抽取方式。特别的,max_samples and max_features 控制子集的大小(根据样本和特征),而bootstrap and bootstrap_features控制样本和特征是否有放回抽取。当使用一个可利用样本的子集时,设置oob_score=True, 通用准确率(generalization accuracy)可以使用out-of-bag样本估计。下面的例子演示怎么样实例化一个bagging集成KNeighborsClassifier. 每一个基础估计量构建在50%的随机样本和50%的随机特征上。

from sklearn.ensemble import BaggingClassifier
from sklearn.neighbors import KNeighborsClassifier
bagging = BaggingClassifier(KNeighborsClassifier(),
                             max_samples=0.5, max_features=0.5)

随机树森林

sklearn.ensemble模块包括两个基于随机决策树的平均算法:随机森林算法和Extra-Trees方法。这两种算法都是针对树设计的扰动+组合技术。这意味着,通过在分类器构造过程中引入随机化,产生多样的分类器集。然后,平均这些分类器的预测而得到最后的集成预测。像其它分类器一样,随机森林分类器也必须输入两个数组:大小[n_samples, n_features]的X, 装载训练样本;长度为[n_samples]的Y, 装载训练样本的类标签。

from sklearn.ensemble import RandomForestClassifier
X = [[0, 0], [1, 1]]
Y = [0, 1]
clf = RandomForestClassifier(n_estimators=10)
clf = clf.fit(X, Y)

随机森林

在随机森林里,集成的每棵树都构建于一个训练集的有放回抽样的样本,即,一个bootstrap样本。另外,在建树期间分割一个节点时,被选择的分割不再是对于所有特征是最好的分割,而是对一个特征的随机子集最好的分割。随机化的结果,森林通常会稍微增加分类的偏差。但是,由于平均的作用,方差也减小了。两相比较,产生总体上较好的模型。与原始文献提出的随机森林比较,scikit-learn通过平均概率预测组合分类器,而不是根据每个分类器的投票结果。

极端随机树

ExtraTreesClassifier and ExtraTreesRegressor类执行极端随机树(extremely randomized trees). 就像随机森林,一个候选特征的随机子集被使用,但极端随机树并不像随机森林那样寻找最有区别性的阈值,而是对每一个候选特征随机抽取阈值,选择最好的阈值作为分割的规则。这样通常会使模型方差减小的程度更大,付出的代价是稍微增加了预测偏差。

这里写图片描述

这里写图片描述

参数

这些方法使用的主要参数是n_estimators and max_features, n_estimators确定森林里树的棵数,越大越好,但也增加了计算时间。另外也要注意,如果超过树的棵数预设值,结果不会更好。max_features确定分割一个节点时,特征的随机子集大小。它的值越小,方差减小的越大,但也增加了预测偏差。从经验上看,对于回归问题,好的默认值是ax_features=n_features. 对于分类任务,好的默认值是max_features=sqrt(n_features). 当设置max_depth=None, min_samples_split=2, 经常会得到好的结果。请牢记:尽管这些参数值通常并不是最优的&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值