一、简单介绍
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三种选项,分别对应着线性误差、平方误差和指数误差,默认为线性误差。