大数跨境
0
0

R语言 | adaboost 模型代码详解

R语言 | adaboost 模型代码详解 谁说菜鸟不会数据分析
2021-08-07
0
导读:代码干货,请查收。

大家好!我是菜鸟君。最近换了份工作,倒是没有特别忙,但上下班的通勤时间更长了。视频和公众号更新的节奏也慢了下来。8月份希望能逐渐找回之前的节奏和状态。


在这期间收到了好多朋友的善意的“催更”。今天就来填一个坑,唠唠怎么用R语言来进行ababoost模型的构建。



首先,什么是adaboost模型呢?它是一种迭代算法,属于boosting这个大类别的一员。它的核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。

Adaboost与之前我们介绍过的Xgboost模型都属于集成学习模型,但比Xgboost更加“古老”。目前各大比赛基本上以Xgboost为主了。

对Xgboost不熟悉的朋友可以看看:

R语言 | Xgboost 实战分析代码详解


接下来,让我们用R语言来构建一个adaboost模型。首先安装一些需要用到的R包。


install.packages("adabag") #adaboost模型install.packages("RColorBrewer") #用于绘图library(RColorBrewer)library(adabag)library(caret)


然后加载数据集。今天依然采用鸢尾花数据集进行示范。将训练集、测试集按8:2进行划分。

data(iris)#训练集、测试集划分set.seed(111)trainlist <- createDataPartition(iris$Species,p = 0.8, list = FALSE)trainset <- iris[trainlist,]testset <- iris[-trainlist,]

我们可以来进行Adaboost模型构建啦!

#Adaboost算法构建模型fit <- boosting(Species~.data = trainset,boos=TRUE, mfinal=100 )

参数具体介绍如下:


参数
意义
formula

y~x1 + x2 + . . . + xn,确定自变量和因变量


data 数据集名称
boos
True(默认)是权重使用迭代时的权重,False是各个观测使用相同的权重
mfinal
迭代次数。默认100

接下来介绍特征重要性排序。

#将特征重要性存为一个数据框imp <- data.frame(fit$importance)imp$variable <- row.names(imp)#从高到低进行排序imp <- imp[order(imp$fit.importance,decreasing = T),]


将所有特征按重要性分数进行从高到低排序,这个结果是不是还不够直观?让我们来做个图吧!

#特征重要性绘图barplot(rev(imp$fit.importance),horiz=T,xlim=c(-18,56),axes=F,col=rep(brewer.pal(4,'YlOrRd'),each=1))text(seq(from=0.7,length.out=135,by=1.2),x=-10,label=rev(imp$variable))axis(3,c(0,10,20,30,40,50),c('0','10','20','30','40','50'))

这个图采用不同颜色标明特征的重要程度,颜色越深越重要。此外,这个图的上方还加了刻度,方便比较各个特征的数值上的差异。比起冷冰冰的数字,这个条形图是不是更加直观明了呢?放到论文结果部分,肯定会加分的!


对了,咱们的模型还没预测呢。在测试集上预测以后,我们采用caret包来进行模型效果评估。

#预测测试集pre <- predict(fit,newdata = testset)
#模型评估adaboost.cf <- caret::confusionMatrix(as.factor(pre$class),as.factor(testset$Species))adaboost.cf #acc,kappa,混淆矩阵在测试集上预测以后,我们采用caret包来进行模型效果评估。

这个模型在测试集上的准确率为100%,也太理想了吧!每当遇到这种情况我都会产生“自我怀疑”,是不是有过拟合的可能?如果数据量再扩大一些,模型效果是不是会打折扣?


最后,多分类的情况下我们计算一下ROC曲线下面积AUC。这个示例中,AUC为1。

#多类别计算AUC,multiclass.roclibrary(pROC)pre_prob <- data.frame(pre$prob)names(pre_prob) <- levels(testset$Species)roc_ada <- multiclass.roc(testset$Species,pre_prob)


这就是今天想跟大家分享的用R语言构建Adaboost模型的过程。觉得有帮助的小伙伴记得右下角点个“在看”哦!每天进步一点点,我们一起加油!

【声明】内容源于网络
0
0
谁说菜鸟不会数据分析
以大数据分析为驱动,spss/R/python/数据分析交流技术分享,实用教程干货,敬请期待,B站UP主:谁说菜鸟不会数据分析 有更多在线实操视频。
内容 498
粉丝 0
谁说菜鸟不会数据分析 以大数据分析为驱动,spss/R/python/数据分析交流技术分享,实用教程干货,敬请期待,B站UP主:谁说菜鸟不会数据分析 有更多在线实操视频。
总阅读104
粉丝0
内容498