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

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,然后对这个分布下的样本使用弱学习算法得到一个弱分类器,对于这个算法定义的弱学习算法,对所有的,都有,而这个错误率的上限并不需要事先知道,实际上。每一次迭代,都要对权重进行更新。更新的规则是:减小弱分类器分类效果较好的数据的概率,增大弱分类器分类效果较差的数据的概率。最终的分类器是个弱分类器的加权平均



随训练数目增加各种学习法的误差收敛速度;在这些分类器里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)中放缩来限制过拟合的高级参数;



你可能感兴趣的:(Python,Python,机器学习)