用R实现集成学习

本文介绍集成学习中的Bagging和AdaBoost算法,通过R语言实战演示如何使用这两种算法提高分类效果。从数据预处理到模型构建,再到模型评估,详细展示了算法的应用流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考用书:数据挖掘:R语言实战      黄文 王正林  编著 

集成学习的两个经典算法是Bagging和AdaBoost分别用不同的方式将若干类
基分类器的预测结果进行综合,以达到显著提升分类效果的目的
Bagging通过boostrap抽样得到若干不同的训练集,分别建立模型,
得到一系列基分类器,它们对同一测试集的预测效果不一,
AdaBoost在依次构建分类器的过程中,会根据上一个集分类器对各选练集样本
的预测结果,自行调整在本次分类器构造时,各样本被抽中的概率。
bagging(formula, data, mfinal = 100, control, par=FALSE,...)
formula用于建模的公式,格式为y~x1+x2+x3
data中放置训练集,mfinal表示算法的迭代次数,可设置为任意整数,缺失值为100;
 boosting(formula, data, boos = TRUE, mfinal = 100, coeflearn = 'Breiman', 
    control,...)
    boos参数用于选择当下的迭代过程,是否用各观测样本的相应权重抽取boostrap样本默认值为T,
    coeflearn用于选择权重更新系数aplha的计算方式,默认为Breiman

setwd("C:\\Users\\Administrator\\Desktop\\数据分析\\bank")#数据集时UCI数据库中的Bank.csv文件
data=read.csv("bank.csv",header=T,sep=";")
dim(data)
summary(data)
sub=sample(1:nrow(data),round(nrow(data)/4))#随机抽取data四分之一的序号
?sample
data_train=data[-sub,]#不包含与sub的数据为训练集
data_test=data[sub,]#将包含于sub的数据为测试集
dim(data_train);dim(data_test)
install.packages("adabag")
library(adabag)
library(rpart)
bag=bagging(y~.,data_train,mfinal=5)#使用bagging函数建模,极为bag
names((bag))
bag$importance
bag1=bagging(y~.,data_train,mfinal=5,control=rpart.control(maxdepth=3))
#通过control参数控制基分类树的复杂度
bag1$tree[2]#查看第二课子树的具体结构
pre_bag=predict(bag,data_test)
#使用bag模型对测试集进行预测
names(pre_bag)
pre_bag$votes[1:10,]
pre_bag$class[1:10]
pre_bag$confusion#测试集预测结果的混淆矩阵
pre_bag$error#测试集预测错误率
sub_minor=which(data_test$y=="yes")#取少数“yes”在测试集中的编号
sub_major=which(data_test$y=="no")#去多数类“no”在测试集中的编号
err_bag=sum(pre_bag$class!=data_test$y)/nrow(data_test)#计算总体错误率err_bag
err_minor_bag=sum(pre_bag$class[sub_minor]!=data_test$y[sub_minor])/length(sub_minor)
#计算少数类“yes“的错误率err——minor_bag
err_major_bag=sum(pre_bag$class[sub_major]!=data_test$y[sub_major])/length(sub_major)
#计算no的
err_bag;err_minor_bag;err_major_bag

boo=boosting(y~.,data_train,mfinal=5) #Adaboost算法,建立模型
pre_boo=predict(boo,data_test) #预测          
err_boo=sum(pre_boo$class!=data_test$y)/nrow(data_test)#计算总体错误率

err_minor_boo=sum(pre_boo$class[sub_minor]!=data_test$y[sub_minor])/length(sub_minor)#少数类yes的错误率
err_major_boo=sum(pre_boo$class[sub_major]!=data_test$y[sub_major])/length(sub_major)#多数类no的错误率
err_boo;err_minor_boo;err_major_boo

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值