总第112篇
今天这篇讲讲集成学习,集成学习就是将多个弱学习器集合成一个强学习器,你可以理解成现在有好多道判断题(判断对错即01),如果让学霸去做这些题,可能没啥问题,几乎全部都能做对,但是现实情况是学霸不常有,学渣倒是很多,怎么样做才能保证题做对的准确率较高呢?就是让多个学渣一起做, 每个人随机挑选一部分题目来做,最后将所有人的结果进行汇总,然后根据将票多者作为最后的结果;另一种方式就是先让学渣A做一遍,然后再让学渣B做,且让B重点关注A做错的那些题,再让C做,同样重点关注B做错的,依次循环,直到所有的学渣都把题目做了一遍为止。通过上面两种方式就可以做到学渣也能取得和学霸一样的成绩啦。我们把这种若干个学渣组合达到学霸效果的这种方式称为集成学习
。
注:这里的学渣并无它意,请勿过度解读。
理解了集成学习的原理以后,我们来看看关于集成学习的一些理论知识。
集成学习,就是将多个弱学习器集合成一个强学习器,那么我们如何来选取弱学习器呢,主要有两种方式。
我们实际业务中用的比较多的都是用同一种类的弱学习器去集合成一个强学习器。
我们找到了弱学习器以后就可以对弱学习器进行组合,组合的方式也有两种,划分依据主要是看弱学习器之间是否有联系。
bagging
。随机森林(RF)是bagging中比较有代表的算法。boosting
。Boosting系列算法里主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树中应用最广最普遍的算法就是梯度提升树(Gradient Boosting Tree)。讲完了集成学习,顺便讲讲Sklearn中Adaboost模型,关于Adaboost模型的原理篇见:提升方法-Adaboost算法。
class sklearn.ensemble.AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0, algorithm='SAMME.R', random_state=None)
base_estimator
:基分类器,默认是决策树,在该分类器基础上进行boosting,理论上可以是任意一个分类器,但是如果是其他分类器时需要指明样本权重。
n_estimators
:基分类器提升(循环)次数,默认是50次,这个值过大,模型容易过拟合;值过小,模型容易欠拟合。
learning_rate
:学习率,表示梯度收敛速度,默认为1,如果过大,容易错过最优值,如果过小,则收敛速度会很慢;该值需要和n_estimators
进行一个权衡,当分类器迭代次数较少时,学习率可以小一些,当迭代次数较多时,学习率可以适当放大。
algorithm
:boosting算法,也就是模型提升准则,有两种方式SAMME
, 和SAMME.R
两种,默认是SAMME.R
,两者的区别主要是弱学习器权重的度量,前者是对样本集预测错误的概率进行划分的,后者是对样本集的预测错误的比例,即错分率进行划分的,默认是用的SAMME.R
。
random_state
:随机种子设置。
关于Adaboost模型本身的参数并不多,但是我们在实际中除了调整Adaboost模型参数外,还可以调整基分类器的参数,关于基分类的调参,和单模型的调参是完全一样的,比如默认的基分类器是决策树,那么这个分类器的调参和我们之前的Sklearn参数详解——决策树是完全一致。
先生成一个分类器
from sklearn.datasets import load_iris
from sklearn.ensemble import AdaBoostClassifier
iris=load_iris()
model=AdaBoostClassifier(n_estimators=100)
clf=model.fit(iris.data,iris.target)python
estimators_
:以列表的形式返回所有的分类器。
运行结果
列表长度
可以看到该对象得到的list的长度为100,刚好是咱们自定义的基分类器个数。
classes_
:类别标签
运行结果
estimator_weights_
:每个分类器权重。
estimator_errors_
:每个分类器的错分率,与分类器权重相对应。
feature_importances_
:特征重要性,这个参数使用前提是基分类器也支持这个属性。
decision_function(X)
:返回决策函数值(比如svm中的决策距离)
fit(X,Y)
:在数据集(X,Y)上训练模型。
get_parms()
:获取模型参数
predict(X)
:预测数据集X的结果。
predict_log_proba(X)
:预测数据集X的对数概率。
predict_proba(X)
:预测数据集X的概率值。
score(X,Y)
:输出数据集(X,Y)在模型上的准确率。
staged_decision_function(X)
:返回每个基分类器的决策函数值
staged_predict(X)
:返回每个基分类器的预测数据集X的结果。
staged_predict_proba(X)
:返回每个基分类器的预测数据集X的概率结果。
staged_score(X, Y)
:返回每个基分类器的预测准确率。
Adaboost的大部分方法和其他模型基本一致,比其他模型多了几个staged
方法。staged是返回每个基分类的结果。
可以看到,直接运行staged
方法,不会直接输出结果,而是输出一个生成器,要想得到具体的结果,需要遍历打印输出。
还可以看到,共输出100项,这正好是我们100个基分类器的结果。