R 集成算法① adaboost

作者: 柳叶刀与小鼠标 | 来源:发表于2018-01-09 00:08 被阅读55次

集成算法

集成算法(Ensemble method)

是目前数据科学家工具箱的一种重要补充。这个工具非常流行,目前是许多机器学习比赛参赛者的选择策略。通常是通过一系列分类器,一般是决策树,然后对预测值进行投票。总而言之,集成算法不是挑选一个模型,而是通过一定的方式将多个模型组合起来。其中两个重要方法是套袋法(bagging)和提升法(boosting)。

套袋法和提升法

  • 套袋(Bagging)法:集成中的每个模型投票权重都相同。套袋法利用训练集中随机取出的子集来训练每个模型。这种方法有助于降低方差并有助于避免过拟合。最常见的例子就是随机森林。

  • 提升(Boosting)是一种常用的统计学习方法,在分类问题中,它通过改变训练样本的权重,学习多个分类器(一般是弱分类器),并将这些分类器线性组合,最终提高分类器的性能。Adaboost或者自适应boosting属于Boosting一种,该算法产生于弱分类器来迭代地学习训练集中很大比例的难以分类的样本,对经常分错的样本进行更多的关注(给与更大的权重。)


    image
  • 训练过程:

从未加权的数据开始,第一个分类器尝试对结果建模。预测正确的样本出现在下一个分类器的训练集中的可能性较小,相反,难以分类的样本将会出现的更频繁。当下一轮的弱分类器被添加后,他们用来训练后面更难的样本。该过程会持续进行,知道达到要求的总误差或者性能不能提高。这时每个分类器的票数会按照他们在建模数据集上的准确度进行加权。

  • 代码:

setwd("E:\\Rwork")
library(rpart)
library(caret)
library(adabag)
library(ggplot2)
library(ggthemes)
set.seed(123)
data(iris)
index <- sample(nrow(iris),0.75*nrow(iris))
train <- iris[index,]
test <- iris[index,]
error <- as.numeric()


  • 加载包以及划分训练集和测试集

library(tcltk)  
u <- 1:20  
pb <- tkProgressBar("进度","已完成 %", 0, 100)  

for(i in u){
  info<- sprintf("已完成 %d%%", round(i*100/length(u)))  
  setTkProgressBar(pb, i*100/length(u), sprintf("进度 (%s)", info),info)  
  data.adaboost <- boosting(Species ~ ., data=train, mfinal=i)
  data.pred <- predict.boosting(data.adaboost,newdata = test)
  error[i] <- data.pred$error
  }
close(pb)  


##################################################

##################################################

error <- as.data.frame(error)
p <- ggplot(error,aes(x=1:20,y=error))+
     geom_line(colour="red", linetype="dashed",size = 1)+
     geom_point(size=3, shape=18)+
     ylim(0,0.05) +
     xlab("Classifiers Numbers")

p1 <- p + theme_base()+
      theme(panel.grid = element_blank())+
      theme(axis.title = element_text(face = "bold"))

p1
  • 结果如下:


    error分布图
  • 结论: 用boosting()函数对训练集进行训练。首先定义基分类器个数为1,通过循环依次增加基分类器个数,直至达到20通过增加classifiers可以降低error,但是当number增加到一定范围时,error值将会稳定。

iris.adaboost <- boosting(Species ~ ., data=train, mfinal=10)
importanceplot(iris.adaboost)

  • 选取10为mifinal值时,分别显示各变量对模型影响重要性,结果如下:


相关文章

  • 04 集成学习 - Boosting - AdaBoost算法构

    03 集成学习 - Boosting - AdaBoost算法原理 十、AdaBoost算法构建 上一章最后说明了...

  • GBDT集成算法(梯度提升树)

    一、算法思想 GBDT是集成学习Boosting算法中的一种,它与Adaboost相比,Adaboost算法利用...

  • R 集成算法① adaboost

    集成算法 集成算法(Ensemble method) 是目前数据科学家工具箱的一种重要补充。这个工具非常流行,目前...

  • 集成学习(Ensemble learning)

    摘要:本文是理解adaboost算法与xgboost算法的前奏篇,主要介绍集成学习(Ensemble learni...

  • 集成算法-XGBoost

    前面我们已经详细介绍了集成算法中的Adaboost和GBDT算法,今天我们继续来介绍一下目前最火的集成算法-XGB...

  • 提升方法

    提升方法 提升方法 AdaBoost 算法 AdaBoost算法的训练误差分析 AdaBoost算法的解释 提升树...

  • 十大经典算法(七)

    八、Adaboost(集成算法之一) PAC 定义了学习算法的强弱: 弱学习算法---识别错误率小于1/2(即准确...

  • 随机森林概述

    在SIGAI之前的公众号文章“大话AdaBoost算法”中我们介绍了集成学习的思想以及Boosting算法,今天的...

  • 集成之 AdaBoost算法

    Boosting 屏幕快照 2018-03-02 下午12.10.47.png 上图(图片来自prml p660)...

  • Adaboost集成算法

    一、Adaboost算法原理 从图中可以看出,Boosting算法的工作机制是首先从训练集用初始权重训练出一个弱学...

网友评论

    本文标题:R 集成算法① adaboost

    本文链接:https://www.haomeiwen.com/subject/pybinxtx.html