python机器学习库scikit-learn简明教程之:AdaBoost算法

来源:互联网 发布:中国战略布局知乎 编辑:程序博客网 时间:2024/06/10 04:46

1.AdaBoost简介及原理

Adaboost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。

Adaboost的结构:最后的分类器YM是由数个弱分类器(weak classifier)组合而成的,相当于最后m个弱分类器来投票决定分类结果,而且每个弱分类器的“话语权”因子α大小不一样。


可以看到,U(1)是初始的权重向量,所有弱分类器的权重为1 / N,其中N是分类器总数;yn代表各个弱分类器;而T对应样例数目,共迭代训练T次;

2.scikit-learn库中的AdaBoost算法

模块sklearn.ensemble包括流行的boosting算法AdaBoost,由Freund和Schapire在1995年提出;

以下示例显示如何以100个弱学习器创建AdaBoost分类器:

#gnu>>> from sklearn.model_selection import cross_val_score>>> from sklearn.datasets import load_iris>>> from sklearn.ensemble import AdaBoostClassifier>>> iris = load_iris() #还是那个数据集>>> clf = AdaBoostClassifier(n_estimators=100) #迭代100次>>> scores = cross_val_score(clf, iris.data, iris.target) #分类器的精确度>>> scores.mean()                             0.9...   #得分比较理想#
Adaboost算法是经过调整的Boosting算法,其能够对弱学习得到的弱分类器的错误进行适应性调整。上述算法中迭代了T次的主循环,每一次循环根据当前的权重分布对样本x定一个分布P,然后对这个分布下的样本使用弱学习算法得到一个弱分类器,对于这个算法定义的弱学习算法,对所有的,都有,而这个错误率的上限并不需要事先知道,实际上。每一次迭代,都要对权重进行更新。更新的规则是:减小弱分类器分类效果较好的数据的概率,增大弱分类器分类效果较差的数据的概率。最终的分类器是个弱分类器的加权平均


../_images/sphx_glr_plot_adaboost_hastie_10_2_0011.png

随训练数目增加各种学习法的误差收敛速度;在这些分类器里AdaBoost表现的很不错;

3.再探Boosting:

Boosting算法是一种把若干个分类器整合为一个分类器的方法,在boosting算法产生之前,还出现过两种比较重要的将多个分类器整合为一个分类器的方法,即boostrapping方法和bagging方法。我们先简要介绍一下bootstrapping方法和bagging方法。

#gnu>>> from sklearn.datasets import make_hastie_10_2>>> from sklearn.ensemble import GradientBoostingClassifier>>> X, y = make_hastie_10_2(random_state=0)>>> X_train, X_test = X[:2000], X[2000:]>>> y_train, y_test = y[:2000], y[2000:]>>> clf = GradientBoostingClassifier(n_estimators=100, learning_rate=1.0,...     max_depth=1, random_state=0).fit(X_train, y_train)>>> clf.score(X_test, y_test)                 0.913...#

弱学习器(即回归树)的数量由参数n_estimators控制; 每个树的大小可以通过通过max_depth参数设置树深度或通过max_leaf_nodes设置叶节点的数量来控制。 learning_rate是在通过在范围(0.0,1.0)中放缩来限制过拟合的高级参数;



0 0
原创粉丝点击