美文网首页
集成学习——Adaboost分类

集成学习——Adaboost分类

作者: bffbb3a8a646 | 来源:发表于2019-05-10 10:43 被阅读0次

上一期分享了集成学习之Bagging分类的方法,这一期分享它的另外一种方法,Adaboost分类方

Adaboost分类方法和Bagging分类类似,不同之处在于,Adaboost每次用自助法抽样来构建树时,都根据前一棵树的结果对于误判的观测值增加抽样权重,使得下一棵树能够对误判的观测值有更多的代表性。

最终的结果由所有的树加权投票得到,权重根据各棵树的精度来确定。

具体来说,如果在上一次分类器的预测中,样本i被错误分类了,那么,在这一次分类器的训练样本抽取过程中,样本i就会被赋予较高的权重,以使其能够以较大的可能被抽中,从而提高其被正确分类的概率。

它显著的提高了集成分类器的稳定性和准确性。

下面就让我们开启Adaboost分类算法之旅吧!

假定样本为(X1,Y1),(X2,Y2),...(Xn,Yn),为描述简单,假定因变量为二分类变量,Y∈{0,1},即只有两类。

Adaboost分类具体步骤如下:

(1)对观测值点选择初始的自助法抽样权

设m=0;

(2)把m增加1,用基本方法(这里是分类树)拟合加权抽样的数据,权重:

,产生分类器:

(3)计算样本内的加权误判率:

,然后更新权重:

,重复(2)和(3)步,直到预先设定的步数m=m_stop,这样就立了根据加权投票来分类的组合分类器:

哇塞,说了这么多,是不是都糊涂了,这是什么鬼,没事,我们下面看一道案例,重点学会运用就可以啦!

依然使用上一期的数据。我们使用Bank Marketing数据集,可以在网上下载到:http://archive.ics.uci.edu/ml/datasets/Bank+Marketing.

该数据集来自于葡萄牙银行机构的一个基于电话跟踪的商业营销项目,其中收录了包括银行客户个人信息及与电话跟踪咨询结果有关的16个自变量,以及1个因变量,即该客户是否订阅了银行的定期存款。

首先我们看一下数据集:

setwd("C:\Users\dell\Desktop\集成学习")

data=read.csv("bank.csv",header=TRUE,sep=";")

head(data)

dim(data)

summary(data)

sum(data$y=="yes"); sum(data$y=="no")

那么我们使用数据集的四分之一的样本作为测试集来评价分类器的性能:

sub=sample(1:nrow(data),round(nrow(data)/4))

length(sub)

data_train=data[-sub,]

data_test=data[sub,]

dim(data_train);dim(data_test)

即训练集和测试集样本数分别为3391和1130.

下面建立Adaboost分类模型:

需要加载相应的包:

install.packages("adabag")

install.packages("rpart")

library(adabag)

library(rpart)

其中Bagging算法格式:

boosting(formula, data, boos = TRUE, mfinal = 100, coeflearn = 'Breiman', control,...)

其中boos参数用于选择在当下的迭代过程中,是否用各观测样本的相应权重来抽取boostrap样本,默认为TRUE。如果是FALSE,则每个观测样本都以其相应权重在迭代过程中被使用。coeflearn用于选择权重更新系数alpha的计算方式,默认取Breiman.另外也可设置为"Freund","Zhu"。

建立模型如下:

boo=boosting(y~.,data_train,mfinal=5)

pre_boo=predict(boo,data_test)

计算总体错误率:

err_boo=sum(pre_boo$class!=data_test$y)/nrow(data_test)

通过混淆矩阵发现,选择no的人多,yes的人少,严重的数据不平衡,因此,我们把两类分开来看各自的预测错误率的结果;

sub_minor=which(data_test$y=="yes")

sub_major=which(data_test$y=="no")

length(sub_minor); length(sub_major)

首先计算少数类"yes"的错误率:

err_minor_boo=sum(pre_boo$class[sub_minor]!=data_test$y[sub_minor])/length(sub_minor)

其次计算多数类"no"的错误率:

err_major_boo=sum(pre_boo$class[sub_major]!=data_test$y[sub_major])/length(sub_major)

err_boo; err_minor_boo; err_major_boo

结果如下:

与上一期结果比较:

发现除了少数类的预测错误率相对于Bagging有所提升,整体和多数类错误率均有所下降,Adaboost确实可以修正数据集的不平衡性,但总体来说,与Bagging的效果差别不大。关于这两种算法预测效果差异的评价需要在更丰富的数据分享经验基础上给出,大家可以查找更多的资料了解。

集成学习两种算法的内容就讲到这里啦,大家有任何疑问都可以在下方评论区提出,大家一起讨论。愿与君共同进步!

相关文章

  • 2019年上半年收集到的人工智能集成学习干货文章

    2019年上半年收集到的人工智能集成学习干货文章 机器学习-集成学习 集成学习——Adaboost分类 2019-...

  • 集成学习-AdaBoost (分类)

    1. 概念 1.1 League of Legends 还是 AdaBoost? LOL打团的思想是这样的:对面开...

  • 集成学习——Adaboost分类

    上一期分享了集成学习之Bagging分类的方法,这一期分享它的另外一种方法,Adaboost分类方。 Adaboo...

  • Adaboost算法简介

    Adaboost算法 Adaboost算法是一种有监督的学习方法,是基于Adaboost算法的分类器把若干个分类器...

  • Adaboost算法理解

    1、Adaboost作为一种集成学习方法,核心思想是经过多轮迭代,对分类器的权重参数每次迭代进行修正,然后集成得到...

  • 集成学习之AdaBoost

    一. AdaBoost介绍 我们在机器学习(八)-集成学习(Ensemble learning)中介绍了集成学习的...

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

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

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

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

  • 集成学习——AdaBoost

    集成学习 简单来说,集成学习就是将一组个体学习器结合起来,通过某种策略,将其结合成一个总学习器来完成相应任务;集成...

  • Boost-GBDT

    GBDT也是集成学习Boosting家族的成员,但是却和传统的Adaboost有很大的不同。回顾下Adaboost...

网友评论

      本文标题:集成学习——Adaboost分类

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