Bagging,Boosting

来源:互联网 发布:日本好用面膜推荐知乎 编辑:程序博客网 时间:2024/04/28 03:02

Bagging:bootstrap aggregating的缩写

Bagging方法就是将所有training data放进一个黑色的bag中,黑色意味着我们看不到里面的数据的详细情况,只知道里面有我们的数据集。然后从这个bag中随机抽一部分数据出来用于训练一个base estimator。抽到的数据用完之后我们有两种选择,放回或不放回。

既然样本本身可以bagging,那么feature是不是也可以bagging呢?当然可以!bagging完数据本身之后我们可以再bagging features,即从所有特征维度里面随机选取部分特征用于训练。在后面我们会看到,这两个‘随机’就是随机森林的精髓所在。从随机性来看,bagging技术可以有效的减小方差,即减小过拟合程度。

在scikit-learn中,我们可以很方便的将bagging技术应用于一个分类器/回归器,提高性能:

>>> from sklearn.ensemble import BaggingClassifier>>> from sklearn.neighbors import KNeighborsClassifier>>> bagging = BaggingClassifier(n_estimators=50, bootstrap=True,                                KNeighborsClassifier(), bootstrap_features=True,                                max_samples=0.5, max_features=0.5)

---------------------------------------------------------------

Boosting: 其中主要的是AdaBoost(Adaptive Boosting)

初始化时对每一个训练例赋相等的权重1/n,然后用该学算法对训练集训练t轮,每次训练后,对训练失败的训练例赋以较大的权重,也就是让学习算法在后续的学习中集中对比较难的训练例进行学习,从而得到一个预测函数序列h_1,⋯, h_m , 其中h_i也有一定的权重,预测效果好的预测函数权重较大,反之较小。最终的预测函数H对分类问题采用有权重的投票方式,对回归问题采用加权平均的方法对新示例进行判别。
(类似Bagging方法,但是训练是串行进行的,第k个分类器训练时关注对前k-1分类器中错分的文档,即不是随机取,而是加大取这些文档的概率。)

---------------------------------------------------------------

Bagging与Boosting的区别:
二者的主要区别是取样方式不同。Bagging采用均匀取样,而Boosting根据错误率来取样,因此Boosting的分类精度要优于Bagging。Bagging的训练集的选择是随机的,各轮训练集之间相互独立,而Boostlng的各轮训练集的选择与前面各轮的学习结果有关;
Bagging的各个预测函数没有权重,而Boosting是有权重的;
Bagging的各个预测函数可以并行生成,而Boosting的各个预测函数只能顺序生成。对于象神经网络这样极为耗时的学习方法。Bagging可通过并行训练节省大量时间开销。

Bagging和Boosting都可以有效地提高分类的准确性。在大多数数据集中,Boosting的准确性比Bagging高。在有些数据集中,Boosting会引起退化---Overfit。
Boosting思想的一种改进型AdaBoost方法在邮件过滤、文本分类方面都有很好的性能。


AdaBoost只适用于二分类任务,Bagging适用于多分类、回归等任务。

原创粉丝点击