参考用书:数据挖掘: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