在上篇的AdaBoost算法原理详细总结中,我们详细的探讨了AdaBoost的原理,并且了解到AdaBoost在学习的过程中以指数速率不断减少训练误差,且无限逼近于0。本篇我们就来探讨Scikit-learn AdaBoost算法库类的使用。
本篇我们先对Scikit-learn AdaBoost算法库类进行概述;再对AdaBoostClassifier和AdaBoostRegressor参数进行解读;然后对Scikit-learn AdaBoost算法库进行经验总结;最后我们利用AdaBoost进行一个实践,可视化各参数对模型的影响。
1)Scikit-learn AdaBoost算法库类概述
AdaBoost算法既可以做分类又可以做回归,分类对应AdaBoostClassifier,回归对应AdaBoostRegressor。当我们对AdaBoost进行调参时,主要对两部分内容进行调参,第一部门是对AdaBoost的框架进行调参,第二部分是对选择的弱分类器进行调参。本篇我们只讨论AdaBoost的框架参数。下面我们具体来看看AdaBoostClassifier和AdaBoostRegressor的框架常用参数。
2)AdaBoostClassifier框架常用参数
class sklearn.ensemble.AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0, algorithm=‘SAMME.R’, random_state=None)[source]
-
base_estimator,基分类器,默认None
base_estimator可以是各种类型的弱分类器,当为None时,基分类器为深度为1的CART分类树。需要注意的是,当algorithm=“SAMME.R”时,基分类器必须支持样本概率的预测。
另外,基分类器的参数对最终的分类效果也有很大的影响。 -
algorithm,实现分类的算法,默认SAMME.R
AdaBoostClassifier独有参数,支持SAMME和SAMME.R(R代表real)输入,两者的主要区别是对基分类器权重的度量。SAMME使用我们上篇介绍的AdaBoost算法原理,利用样本分类效果对基学习器的权重进行度量,基分类器直接输出分类的标签。SAMME.R利用样本分类的预测概率大小对基分类器的权重进行度量,基分类器输出样本分类的概率值。这种依赖于类别概率的算法通常比依赖于分类器的更好。
SAMME.R算法通常比SAMME更快地收敛,通过更少的提升迭代实现更低的测试误差。因此,实际应用中,SAMME.R是一个很好的默认值。需要注意的是,基分类器必须支持预测概率的输出。 -
n_estimators,基分类器的个数,默认50
n_estimators为基分类器的最大个数,我们需要调整的超参数之一,通常和learning_rate一起调整。n_estimators太小,容易欠拟合,n_estimators太大,又容易过拟合。 -
learning_rate,基分类器的权重衰减系数,默认为1
learning_rate是我们需要调整的另一个重要的超参数。在上一篇AdaBoost算法原理介绍中,根据前向学习算法,模型可以写为
g t ( x ) = g t − 1 ( x ) + α t f t ( x ) g_t(x)=g_{t-1}(x)+\alpha_t f_t(x) gt(x)=gt−1(x)+αtft(x)
为了防止过拟合,sklearn加入了权重衰减系数 μ , μ ∈ ( 0 , 1 ] \mu,\mu\in (0,1] μ,μ∈(0,1],模型表达式变成:
g t ( x ) = g t − 1 ( x ) + μ α t f t ( x ) g_t(x)=g_{t-1}(x)+\mu\alpha_t f_t(x) gt(x)=gt−1(x)+μαtf