今天看啥  ›  专栏  ›  焰雨追虹

十大数据挖掘算法之AdaBoost

焰雨追虹  · 简书  ·  · 2020-01-26 23:46

(由于之前做毕设时候没接触AdaBoost算法,而且个人精力有限,所以本文只做了一个简介和调用sklearn模块,具体算法还请参阅其他文档)

一、AdaBoost简介

AdaBoost,是英文"Adaptive Boosting"(自适应增强)的缩写,是一种机器学习方法,由Yoav Freund和Robert Schapire提出。AdaBoost方法的自适应在于:前一个分类器分错的样本会被用来训练下一个分类器。AdaBoost方法对于噪声数据和异常数据很敏感。但在一些问题中,AdaBoost方法相对于大多数其它学习算法而言,不会很容易出现过拟合现象。AdaBoost方法中使用的分类器可能很弱(比如出现很大错误率),但只要它的分类效果比随机好一点(比如两类问题分类错误率略小于0.5),就能够改善最终得到的模型。而错误率高于随机分类器的弱分类器也是有用的,因为在最终得到的多个分类器的线性组合中,可以给它们赋予负系数,同样也能提升分类效果。(摘自维基百科)

AdaBoost算法的一般步骤:

  1. 给定训练样本集S,其中X和Y分别对应于正例样本和负例样本;T为训练的最大循环次数;
  2. 初始化样本权重为1/n ,即为训练样本的初始概率分布;
  3. 第一次迭代:
    1. 训练样本的概率分布相当,训练弱分类器;
    2. 计算弱分类器的错误率;
    3. 选取合适阈值,使得误差最小;
    4. 更新样本权重;
    5. 经T次循环后,得到T个弱分类器,按更新的权重叠加,最终得到的强分类器。

AdaBoost算法的优缺点:

  • 优点
  1. Adaboost是一种精度很高的分类器,泛化错误率低;
  2. 可以使用各种方法构建子分类器,Adaboost算法提供的是框架 ;
  3. 当使用简单分类器时,计算出的结果是可以理解的。而且弱分类器构造极其简单 ;
  4. 简单,不用做特征筛选;
  5. 不用担心overfitting(过度拟合);
  • 缺点
  1. 容易受到噪声干扰,这也是大部分算法的缺点;
  2. 训练时间过长;
  3. 执行效果依赖于弱分类器的选择。

二、基于sklearn模块实现AdaBoost

(代码参考AdaBoost分类器的官方文档)

# 调用AdaBoost分类器
from sklearn.ensemble import AdaBoostClassifier
from sklearn.datasets import make_classification

# 创建数据
# X是1000行四列的二维numpy.ndarray数据
# y是1000行1列的numpy.ndarray数据
X, y = make_classification(n_samples=1000, n_features=4,
                           n_informative=2, n_redundant=0,
                           random_state=0, shuffle=False)

# 创建AdaBoost分类器模型
# n_estimators参数指的是弱学习器的最大迭代次数
clf = AdaBoostClassifier(n_estimators=100, random_state=0)
clf.fit(X, y) 

# feature_importances指的是特征重要性,即模型中最重要的特征
print(clf.feature_importances_ )
print(clf.predict([[0, 0, 0, 0]]))
# 打印拟合分数
print(clf.score(X, y))



原文地址:访问原文地址
快照地址: 访问文章快照