Adaboost调参

  Sklearn中的Adaboost接口是在sklearn.ensemble中,ensemble是集成的意思,在这个包中含有很多集成模型,Adaboost就是封装在ensemble中,我们需要做的就是知道如何对模型进行调参,要知道Adaboost使用的基学习器就是决策树,如果解决分类问题那就是分类树,如果解决回归问题就是回归树,对应的函数就是AdaBoostClassifier和AdaBoostRegressor。这俩就是我们使用的最多的函数。回归和分类其实大体参数都是一样的。
Adaboost参数分为两类,第一类是指Adaboost的框架参数,第二类就是Adaboost使用的基学习器参数


下面就先针对Adaboost框架参数介绍:
Adaboost分类器官方文档
1、base_estimator
  这个参数是规定基学习器是什么,如果我们默认,那么Adaboost就会采用决策树,AdaBoostClassifier使用分类树、AdaBoostRegressor使用回归树,一般来说,这个参数是默认的,不需要我们进行改动。
2、n_estimators
  AdaBoostClassifier和AdaBoostRegressor都有,是我们弱学习器的最大迭代次数,或者可以说是基学习器的个数,这个参数是比较重要的,一般来需要我们进行细调,参数默认的值为50,如果参数值太大,容易过拟合;参数值太小,容易欠拟合。
2、learning_rate
  乍一看,这个参数的含义是学习率,有点像之前学习梯度下降法里面的学习率,其实不是的,Adaboost学习算法中并没有使用梯度下降法,所以这里的学习率和梯度下降法里的学习率不一样,但是却有点相似。具体来看,我们知道在Adaboost学习算法中,我们学习的策略是一个一个对基学习器进行学习,然后学习找到每个基学习器的系数,具体表示为:



上面的式子中多了一个v,这个v其实就是adaboost中学习率的意思,即调整每次叠加模型时的权值。在ensemble参考文档中是这么介绍这个参数的:


  缩小每个分类器的贡献程度,后面又说到learning_rate和n_estimators之间存在权衡关系,这说明在调参过程中learning_rate和n_estimators是相互的,合理调节这两个参数可以很好缓解过拟合问题。
这个参数还有一个特殊的名字,叫做正则化参数,范围为0-1。


3、algorithm
  这个参数比较特殊,只有AdaBoostClassifier才有这个参数。主要原因是sklearn中实现的AdaBoostClassifier有两种方式,分别为:SAMME和SAMME.R,SAMME.R必须要基学习器支持类概率计算,这点刚好在决策树中就有,所以在AdaBoostClassifier中默认的就是SAMME.R,并且SAMME.R也比SAMME收敛速度要快,能通过更少的迭代次数获得更低的误差。在调参时不需要改变这个参数。
SAMME和SAMME.R介绍


4、loss
  这个参数的而含义是定义损失函数,可选的参数有:linear、square、exponential,分别对应于线性损失函数,平方损失函数、指数损失函数,要注意这个参数只有在AdaBoostRegressor中才有,分类器中是没有这个参数的,这是因为如果用Adaboost解决回归问题我们的算法和原始算法不一样,详细可以参考这篇文档Adaboost回归算法介绍


一般来说,如果用Adaboost解决分类问题,这个参数可以不用管。



缩小每个分类器的贡献程度,后面又说到learning_rate和n_estimators之间存在权衡关系,这说明在调参过程中learning_rate和n_estimators是相互的,合理调节这两个参数可以很好缓解过拟合问题。
这个参数还有一个特殊的名字,叫做正则化参数,范围为0-1。


3、algorithm
  这个参数比较特殊,只有AdaBoostClassifier才有这个参数。主要原因是sklearn中实现的AdaBoostClassifier有两种方式,分别为:SAMME和SAMME.R,SAMME.R必须要基学习器支持类概率计算,这点刚好在决策树中就有,所以在AdaBoostClassifier中默认的就是SAMME.R,并且SAMME.R也比SAMME收敛速度要快,能通过更少的迭代次数获得更低的误差。在调参时不需要改变这个参数。
SAMME和SAMME.R介绍


4、loss
  这个参数的而含义是定义损失函数,可选的参数有:linear、square、exponential,分别对应于线性损失函数,平方损失函数、指数损失函数,要注意这个参数只有在AdaBoostRegressor中才有,分类器中是没有这个参数的,这是因为如果用Adaboost解决回归问题我们的算法和原始算法不一样,详细可以参考这篇文档Adaboost回归算法介绍
一般来说,如果用Adaboost解决分类问题,这个参数可以不用管。

5、基学习器参数
基学习器参数也指决策树参数,在决策树那篇我们已经介绍过决策树调参的方法,详情参考决策树调参,在AdaBoost中修改基学习器参数需要在基学习器中,例如:

clf = AdaBoostClassifier(DecisionTreeClassifier(max_depth=5, min_samples_split=10, min_samples_leaf=5),
                         n_estimators=300,learning_rate=1)

我们是在AdaBoostClassifier中定义了一个DecisionTreeClassifier基学习器,对基学习器的调参是在DecisionTreeClassifier中设置的。