集成学习——Adaboost分类

https://www.toutiao.com/a6674839167580504587/

 

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

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

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

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

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

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

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

Adaboost分类具体步骤如下:

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

集成学习——Adaboost分类

 

设m=0;

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

集成学习——Adaboost分类

 

,产生分类器:

集成学习——Adaboost分类

 

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

集成学习——Adaboost分类

 

集成学习——Adaboost分类

 

,然后更新权重:

集成学习——Adaboost分类

 

集成学习——Adaboost分类

 

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

集成学习——Adaboost分类

 

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

依然使用上一期的数据。我们使用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分类

 

下面建立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

结果如下:

集成学习——Adaboost分类

 

与上一期结果比较:

集成学习——Adaboost分类

 

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

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值