bagging和boosting是提高监督式学习方法准确率的两种常用的集成方法。
1、bagging
bagging即套袋法,是并行式的集成学习方法,随机森林是bagging的一种。
执行步骤:
1、从原始训练集中随机抽取小部分数据当作新的训练集。假设设定需要n个弱学习器,则需要抽取n次(放回抽样),得到n个训练集。
2、训练弱学习器。每个训练集训练出一个弱学习器,得到n个弱学习器。
3、预测。测试数据在n个弱学习器上预测,得到n个结果,分类任务通过投票方式得到最终结果,回归任务将n个结果的均值作为最终结果。
2、boosting
boosting是一种可将弱学习器提升为强学联器的算法,AdaBoost和提升树都是boosting的一种。
关于boosting的两个核心问题:
1、在每一轮训练后,如何改变训练数据的权值/概率分布?
通过提高前一个弱学习器分类错误的样本的权值,或者降低分类正确的样本权值,来使得新一个弱学习器对对误分类的样本有更好的效果。
以AdaBoost算法为例:
初始化所有数据的权值都为1,共有10个训练数据,第一个弱学习器训练数据后,有7个数据分类正确,3个数据分类错误。那么,错误为类的数据权值为 7 3 \frac{7}{3} 37,新的数据权值用于下一个弱学习器的训练,这个新权值怎么来?
为了让正确分类的权值和错误分类的权值一样,那么 3 ∗ x = 7 ∗ 1 3*x = 7*1 3∗x=7∗1,解得 x = 7 3 x = \frac{7}{3} x=37。
2、通过什么方式来组合弱学习器?
通过加法将弱分类器进行线性组合。
以AdaBoost算法为例:
经过不断地更新样本权重和训练新的弱学习器,得到n个弱学习器。假设弱学习器A正确分类的权重和为7,错误分类的权重和为3,那弱学习器A的模型权重为 ln 7 3 \ln\frac{7}{3} ln37。最后将所有弱学习器的预测结果乘以模型权重所得的结果之和作为最终的预测结果。
3、bagging和boosting的区别
bagging | boosting | |
---|---|---|
样本选择 | 放回抽样 | 全量选取 |
样本权重 | 权重相等 | 错误率大的样本权重越大 |
弱学习器权重 | 权重相等 | 准确率大的分类器权重越大 |
并行计算 | 可以并行 | 不能并行,各个分类器按顺序生成,后一个模型参数要依赖前面的模型结果 |
4、sklearn 中的 AdaBoost
from sklearn.ensemble import AdaBoostClassifier
from sklearn.tree import DecisionTreeClassifier
base_estimator = DecisionTreeClassifier(max_depth=2)
#base_estimator: 弱学习器使用的模型
#n_estimators: 使用的弱学习器的最大数量
model = AdaBoostClassifier(base_estimator = base_estimator, n_estimators = 4)
model.fit(x_train, y_train)
model.predict(x_test)