目录
1 集成学习概述
2 决策树

3 随机森林

4 Bagging和boosting

Boosting
原理:随着学习的积累从弱到强
实现过程:
- 初始化训练数据权重,初始权重相等
- 通过学习器计算错误率
- 计算学习器的投票权重
- 对每个样本进行重新赋权
- 重复1-4
- 对构建好的最后的学习器进行加权投票
Bagging&Boosting对比
1.数据方面:
Bagging数据随机放回,重新采样
Boosting:对数据进行权重调整
2.投票方面:
Bagging 平权投票
Boosting 加权投票
3.学习顺序方面:
Bagging 并行(训练多个弱分类器)
Boosting 串行(迭代生成弱分类器)
4.主要作用:
Bagging 解决过拟合问题
Boosting 欠拟合
Adaboost
前向分布算法:
弱学习器—决策树
通过将迭代生成弱学习器,并将产生的弱学习器与当前已有的学习器加和,最终产生一个强学习器。
Gm(x)是第m次迭代产生的弱学习器,最后将Sign(Fm(x))作为x的输出类别。
损失函数:
| (1) |
损失函数大,权重小;反之权重大。
所以我们可以从损失函数推导出样本权重w和学习器权重afa的推导公式。
损失函数L取:
现在将(1)式代入上式进行推导:
令Wmi=/
可以转换成+-1alpham,所以
预测错误的时候是正的,预测对的时候是负的。
最终推导得到如下Wmi的递推公式:
Adaboost算法整体流程:
优缺点:
Adaboost的api
# -*- coding:utf-8 -*-
from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import make_classification
from sklearn.svm import SVC
X, y = make_classification(n_samples=1000, n_features=4,
n_informative=2, n_redundant=0,
random_state=0, shuffle=False)
# 弱学习器更改为svm,需要设置algorithm为SAMME
cl=SVC()
# 默认决策树,max_depth=1,集成学习,本来弱,集成后结果反而更好;本来强,集成后结果不一定好。
clf = AdaBoostClassifier(base_estimator=cl,n_estimators=100, random_state=0,algorithm='SAMME')
clf.fit(X, y)
cl.fit(X,y)
print(clf.predict([[0, 0, 0, 0]]))
print(clf.score(X, y))
print(cl.score(X, y))#单个强的话效果更好