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

本文介绍了Adaboost算法的基本原理和核心思想,展示了如何利用scikit-learn库中的AdaBoostClassifier进行分类器训练,并讨论了Boosting算法与其他相关方法的区别。

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)中放缩来限制过拟合的高级参数;



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值