R语言使用adabag包进行AdaBoost机器学习模型分析
·
既往我简单介绍了一下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曲线,决策曲线,特征曲线等。
更多推荐


所有评论(0)