AdaBoost算法详解及Python实现--scikit

一、简单介绍
Adaboost是一种常见的继承学习方法,它属于boosting系列算法中的,也就是说每个学习器之间存在强依赖关系。Adaboost既可 以用于分类也可以用于回归。本文对Adaboost算法做一个简单的介绍,文末并给出python的具体实现(主 要是应用函数库进行实现)。
对于集成学习算法来说有两个问题需要解决:一是在每一轮的训练中是如何改变训练数据的权重或概率分布;二是如何将弱分类器组合成一个强分类器。对于Adaboost算法是这样解决的,对于第一个问题,提高那些被前一轮弱分类器错误分类的样本的权重,降低那些被正确分类的样本的权重;对于第二个问题,Adaboost采用的是加权多数表决的方法,具体说加大分类误差率小的弱分类器的权重,减小分类误差率大的弱分类器的权重。
 
二、原理剖析
算法基本实现(主要是对于分类问题来说的):
假设训练样本数目为N,需要训练的弱分类器的个数为M,
1、初始化训练样本的权重D,初始化每个样本的权重为1/N;
2、对于M个弱分类,分别作如下计算:
  a 使用权值分布为D的训练样本训练数据得到基本分类器;
  b 计算此基本分类器的分类误差率;
  c 计算此基本分类器在最后加权表决中的权重;
  d 更新训练数据的权重。 

以上为对Adaboost模型算法的做一个简单的文字解释,更详细的说明请参考李航老师的《统计学习方法》。
Adaboost既可以用于分类也可以用于回归问题,分别对应着sklearn中的AdaBoostClassifier和AdaBoostRegressor。下面分别简单的应用python实现AdaBoost的分类和回归算法,及相关的参数说明。

(一)AdaBoostClassifier

 Python Code 
1
2
3
4
5
6
7
8
9
#Adaboost分类
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 )
scores = cross_val_score(clf, iris.data, iris.target)
scores.mean()   

AdaBoostClassifier主要应用AdaBoost算法实现分类问题的主要函数,其主要有如下几个参数:
base_estimator  :基本分类器,就是我们常说的弱分类器,默认为决策树分类器(CART),在理论上            可以选择任何一个分类器,但是需要支持选择样本的权重,一般用决策树或者是神经                                     网络。
n_estimators  :    弱分类器的个数,默认为50个,一般来说 n_estimators太小的话会出现欠拟合,过      大的话会出现过拟合,因此一般选择一个适中的数值,这也是调参的必要性。  
         learning_rate  :    学习率,即每个弱分类器的权重缩减系数,取值范围为0到1。一般来说弱分类器的                                      分数和学习率要一起调参,一般来说可从一个小一点的开始调参。
algorithm  :         算法的选择,主要有 ‘SAMME’, ‘SAMME.R’两种,默认为 SAMME.R。两者的主要区      别在弱分类器的权重度量上, SAMME使用的是样本集的分类效果作为若学习器的权      重,而 SAMME.R使用了对样本集分类的预测概率大小作为弱学习器的权重,因为                                              SAMME.R使用的是概率度量的连续值,迭代一般比 SAMME快。
      random_state:       随机状态的设定,默认为None,可以设置为整型数值,也可以给定一个随机状态。


(二)AdaBoostRegressor
 Python Code 
1
2
3
4
5
6
7
8
9
#Adaboost回归
from  sklearn.model_selection  import  cross_val_score
from  sklearn.datasets  import  load_boston
from  sklearn.ensemble  import  AdaBoostRegressor
import  sklearn.datasets  as  skdt
boston = load_boston()
rgm = AdaBoostRegressor(n_estimators=
100 )
scores = cross_val_score(rgm,boston.data,boston.target)
scores.mean()

AdaBoostRegressor中的参数与AdaBoostClassifier基本相同,主要有 base_estimator, n_estimators  , learning_rate  , loss  , random_state,与AdaBoostClassifier所不同的就是loss参数,loss参数是用来指定模型计算误差的类型,主要有:linear、square和exponential三种选项,分别对应着线性误差、平方误差和指数误差,默认为线性误差。

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