AdaBoost算法详解及Python实现
(2018-03-08 10:07:08)
标签:
杂谈 |
分类: 数据分析和挖掘 |
一、简单介绍
Adaboost是一种常见的继承学习方法,它属于boosting系列算法中的,也就是说每个学习器之间存在强依赖关系。Adaboost既可以用于分类也可以用于回归。本文对Adaboost算法做一个简单的介绍,文末并给出python的具体实现(主要是应用函数库进行实现)。
对于集成学习算法来说有两个问题需要解决:一是在每一轮的训练中是如何改变训练数据的权重或概率分布;二是如何将弱分类器组合成一个强分类器。对于Adaboost算法是这样解决的,对于第一个问题,提高那些被前一轮弱分类器错误分类的样本的权重,降低那些被正确分类的样本的权重;对于第二个问题,Adaboost采用的是加权多数表决的方法,具体说加大分类误差率小的弱分类器的权重,减小分类误差率大的弱分类器的权重。
二、原理剖析
算法基本实现(主要是对于分类问题来说的):
假设训练样本数目为N,需要训练的弱分类器的个数为M,
1、初始化训练样本的权重D,初始化每个样本的权重为1/N;
2、对于M个弱分类,分别作如下计算:
以上为对Adaboost模型算法的做一个简单的文字解释,更详细的说明请参考李航老师的《统计学习方法》。
Adaboost既可以用于分类也可以用于回归问题,分别对应着sklearn中的AdaBoostClassifier和AdaBoostRegressor。下面分别简单的应用python实现AdaBoost的分类和回归算法,及相关的参数说明。
(一)AdaBoostClassifier
2 3 4 5 6 7 8 9 |
#Adaboost分类
from iris clf scores scores.mean() |
AdaBoostClassifier主要应用AdaBoost算法实现分类问题的主要函数,其主要有如下几个参数:
base_estimator :基本分类器,就是我们常说的弱分类器,默认为决策树分类器(CART),在理论上
可以选择任何一个分类器,但是需要支持选择样本的权重,一般用决策树或者是神经
网络。
n_estimators :
弱分类器的个数,默认为50个,一般来说 n_estimators太小的话会出现欠拟合,过
大的话会出现过拟合,因此一般选择一个适中的数值,这也是调参的必要性。
algorithm :
算法的选择,主要有 ‘SAMME’,
‘SAMME.R’两种,默认为SAMME.R。两者的主要区
别在弱分类器的权重度量上, SAMME使用的是样本集的分类效果作为若学习器的权
重,而 SAMME.R使用了对样本集分类的预测概率大小作为弱学习器的权重,因为
SAMME.R使用的是概率度量的连续值,迭代一般比SAMME快。
(二)AdaBoostRegressor
2 3 4 5 6 7 8 9 |
#Adaboost回归
from boston rgm scores scores.mean() |
AdaBoostRegressor中的参数与AdaBoostClassifier基本相同,主要有base_estimator,n_estimators , learning_rate , loss , random_state,与AdaBoostClassifier所不同的就是loss参数,loss参数是用来指定模型计算误差的类型,主要有:linear、square和exponential三种选项,分别对应着线性误差、平方误差和指数误差,默认为线性误差。
参考网址:https://www.cnblogs.com/pinard/p/6136914.html
(Adaboost参数调参用)