adaboost 算例(二分类问题)
adaboost算法流程以及总结
adaboost流程图:
- 算法流程:
1.初始化样本权重,每个样本都为 1 / m 1/m 1/m(m为样本数)
2.在是用弱分类器后,通过学习误差率(加权样本误差率) e e e,来得到该弱分类器的权重 α \alpha α
3.通过前一个弱分类器的权重 α \alpha α,更新样本权重
4.重复以上三步,知道所有分类器都完成预测,若干个弱分类器最后通过简单的加法加权得到一个强分类器。
import numpy as np
from sklearn.ensemble import AdaBoostClassifier
from sklearn import tree
%matplotlib inline
from matplotlib import pyplot as plt
生成数据
X = np.arange(10).reshape(-1,1)
y = np.array([1,1,1,-1,-1,-1,1,1,1,-1])
display(X,y)
array([[0],
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9]])
array([ 1, 1, 1, -1, -1, -1, 1, 1, 1, -1])
模型预测
ada = AdaBoostClassifier(n_estimators = 3,algorithm ='SAMME')
ada.fit(X,y)
AdaBoostClassifier(algorithm='SAMME', n_estimators=3)
# 有三个一层的决策树
ada.estimators_
[DecisionTreeClassifier(max_depth=1, random_state=532048558),
DecisionTreeClassifier(max_depth=1, random_state=1578686940),
DecisionTreeClassifier(max_depth=1, random_state=727580641)]
计算第一课树的权重,以及更新样本权重
plt.figure(figsize = (16,9))
tree.plot_tree(ada[0],filled = True)
# 查看第一课树的预测结果
y_ = ada[0].predict(X)
y_
array([ 1, 1, 1, -1, -1, -1, -1, -1, -1, -1])
加权样本误差率:
e k = P ( G k ( x i ) ≠ y i ) = ∑ i = 1 m w k i I ( G k ( x i ) ≠ y i ) e_k =P(G_k(x_i) \neq y_i) = \sum_{i=1}^{m}w_{ki}I(G_k(x_i) \neq y_i) ek=P(Gk(xi)=y