既往我简单介绍了一下Boosting算法,其中最具代表性的AdaBoost算法就是其中一种。AdaBoost和sgboots算法一样,属于集成算法。

在这里插入图片描述
简单来说就是通过多个弱学习器集成,并相比较于弱学习器而言,进一步提升结果的准确率。严格说来,集成学习并不算是一种分类器,而是一种学习器结合的方法。

在这里插入图片描述
下面我通过R语言来演示一下,先导入数据和R包

library(adabag)
library(rpart)
bc<-read.csv("E:/r/test/demo.csv",sep=',',header=TRUE)
bc <- na.omit(bc)

在这里插入图片描述
数据变量很多,我解释几个我等下要用的,HBP:是否发生高血压,结局指标,AGE:年龄,是我们的协变量,BMI肥胖指数,FEV1肺活量指标,WEIGHT体重,“SBP”,“DBP”:收缩压和舒张压。公众号回复:体检数据,可以获得数据。

有些变量用不到,我先精简一下,

bc<-bc[,c("HBP","SEX","AGE","FEV1","OCCU","COUGH","EDU")]
bc$HBP<-as.factor(bc$HBP)

先把数据分为建模组和验证组

#分成建模和验证组
set.seed(12345)
tr1<- sample(nrow(bc),0.7*nrow(bc))##随机无放抽取
bc_train <- bc[tr1,]#70%数据集
bc_test<- bc[-tr1,]#30%数据集

#构建AdaBoost模型,mfinal是boosting的迭代次数或要使用的树的数量,它的次数也是重要的,提高次数可以降低

model <- boosting(HBP ~ ., data = bc_train ,
                  boos=TRUE, mfinal=100)

模型预测

predictions <- predict.boosting(model, newdata = bc_test)

在这里插入图片描述
预测值这里有很多信息,有帮助我们进一步分析,看混淆矩阵,错误率0.3,但是市在验证集也还好

# 输出结果
print(predictions$confusion) # 混淆矩阵
print(paste("错误率:", predictions$error)) # 错误率

在这里插入图片描述
查看权重,这个不是我们后续的权重,市模型分析的权重

model$weight

在这里插入图片描述
查看变量重要性

model$importance

在这里插入图片描述
查看错误率,这个错误率对应每次分类的错误率,因为我们不是mfinal=100麻,所以有100个

model_error_data<-errorevol(model,bc_test)
model_error_data2<-data.frame(model_error=model_error_data[["error"]],Num=1:length(model_error_data[["error"]]))

在这里插入图片描述
咱们还可以绘图对错误率进行绘图

# require(devtools)
# install_github('ramnathv/rCharts')

library(rCharts)
nPlot(model_error~Num,data=model_error_data2,type='lineChart')

在这里插入图片描述
我们可以看到继续提高树的数量并不能明显降低错误率,在17次的时候错误率最低。咱们还可以进行变量重要性绘图,

data_importance<-as.data.frame(model$importance)
data_importance$index<-rownames(data_importance)
names(data_importance)<-c('importance','index')

rCharts::mPlot(x = 'index', y = list('importance'), data = data_importance, type = 'Bar')

在这里插入图片描述
也可以使用ggplot2绘图

ggplot(data_importance, aes(x = index, y = importance)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  coord_flip() +
  labs(title = "Importance of Variables",
       x = "Variable",
       y = "Importance Score") +
  theme_minimal()

在这里插入图片描述
本期结束,接下来会为AdaBoost模型写一些适配函数,比如ROC曲线,决策曲线,特征曲线等。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐