引言
在这篇文章中,我会详细地介绍Bagging、随机森林和AdaBoost算法的实现,并比较它们之间的优缺点,并用scikit-learn分别实现了这3种算法来拟合Wine数据集。全篇文章伴随着实例,由浅入深,看过这篇文章以后,相信大家一定对ensemble的这些方法有了很清晰地了解。
Bagging
bagging能提升机器学习算法的稳定性和准确性,它可以减少模型的方差从而避免overfitting。它通常应用在决策树方法中,其实它可以应用到任何其它机器学习算法中。如果大家对决策树的算法不太理解,请大家参考这篇文章:决策树ID3、C4.5、C5.0以及CART算法之间的比较,在下面的例子中,都会涉及到决策树,希望大家能理解一下这个算法。
下面,我介绍一下bagging技术的过程:
假设我有一个大小为 n 的训练集D,bagging会从D中有放回的均匀地抽样,假设我用bagging生成了
假设有一个训练集 D 的大小为7,我想用bagging生成3个新的训练集
样本索引 | bagging(D1) | bagging(D2) | bagging(D3) |
---|---|---|---|
1 | 2 | 7 | 3 |
2 | 2 | 3 | 4 |
3 | 1 | 2 | 3 |
4 | 3 | 1 | 3 |
5 | 5 | 1 | 6 |
6 | 2 | 5 | 1 |
7 | 6 | 4 | 1 |
那么现在我就可以用上面生成的3个新训练集来拟合模型了。
决策树是一个很流行的机器学习算法。这个算法的性能在特征值的缩放和各种转换的情况下依然保持不变,即使在包含不相关特征的前提下,它依然很健壮。然而,决策树很容易过拟合训练集。它有低的偏差,但是有很高的方差,因此它的准确性不怎么好。
bagging是早期的集成方法(ensemble method),它可以重复地构建多个决策树基于有放回地重新采样,然后集成这些决策树模型进行投票,从而得到更好地准确性。稍后,我会介绍决策森林算法,它可以比bagging更好地解决决策树overfitting的问题。这些方法虽然会增加一些模型的偏差和丢失一些可解释性,但是它们通常会使模型具有更好地性能。
下面,我用scikit-learn实现bagging来拟合Wine数据集来实战一下bagging方法。这是数据集的介绍:Wine数据集
<