比较R在心脏病数据集上使用机器学习算法的效果
侧边栏壁纸
博主昵称
2.7

  • 累计撰写 10 篇文章
  • 累计收到 27 条评论
  • 今日撰写 0 篇文章

比较R在心脏病数据集上使用机器学习算法的效果

2.7
2.7
2022-07-03 / 0 评论 / 3 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年07月03日,已超过146天没有更新,若内容或图片失效,请留言反馈。

数据集

数据集直接从kaggle上下载,地址: 点击访问

代码

data=read.csv("D:\\code\\R\\heart.csv",header = T)
sub=sample(1:nrow(data),round(nrow(data)*0.7))
train_data=data[sub,]#取0.7的数据做训练集
test_data=data[-sub,]#取0.3的数据做测试集
zql = rep(0,5)#准确率
czl = rep(0,5)#查准率
cql = rep(0,5)#查全率
#svm
library(e1071)
library(ggplot2)
pre_model=svm(target ~. , data=train_data, type = 'C',kernel = 'radial')
pre_data=predict(pre_model,test_data[,-14])
output=table(test_data[,14],pre_data,dnn=c("真实值","预测值"))
zql[1]=(output[2,2]+output[1,1])/(output[1,1]+output[1,2]+output[2,1]+output[2,2])
czl[1]=output[2,2]/(output[1,2]+output[2,2])
cql[1]=output[2,1]/(output[2,1]+output[2,2])

#决策树
library(rpart.plot)
pre_model=rpart(target~.,data = train_data,method = 'class',parms = list(split = 'information'))
rpart.plot(pre_model)
plotcp(pre_model)#画出决策树的图
pre_model=prune(pre_model,cp=0.018)#剪枝
pre_data=predict(pre_model,test_data[,-14],type="class")
output=table(test_data[,14],pre_data,dnn=c("真实值","预测值"))

zql[2]=(output[2,2]+output[1,1])/(output[1,1]+output[1,2]+output[2,1]+output[2,2])
czl[2]=output[2,2]/(output[1,2]+output[2,2])
cql[2]=output[2,1]/(output[2,1]+output[2,2])
#逻辑回归
pre_model=glm(target~.,data=train_data,family = "binomial")
pre_data=predict(pre_model,test_data,type = "response")
output=table(test_data[,14],pre_data,dnn=c("真实值","预测值"))
pre_data_=predict.glm(pre_model,type="response",test_data)
pre_data=ifelse(pre_data>0.5,1,0)
output=table(test_data[,14],pre_data,dnn=c("真实值","预测值"))

zql[3]=(output[2,2]+output[1,1])/(output[1,1]+output[1,2]+output[2,1]+output[2,2])
czl[3]=output[2,2]/(output[1,2]+output[2,2])
cql[3]=output[2,1]/(output[2,1]+output[2,2])
#随机森林
library(randomForest)
n=14#属性个数
#挑选效果最好的mtry,取rate最小的
for(i in 1:(n-1)){
  set.seed(1234)
  rf_train=randomForest(as.factor(train_data$target)~.,data=train_data,mtry=i)
  rate=mean(rf_train$err.rate)
  print(rate)
}
set.seed(100)
ntree_fit<-randomForest(as.factor(train_data$target)~.,data=train_data,mtry=1,ntree=1000)
plot(ntree_fit)#挑选效果最好的ntree
set.seed(100)
pre_model=randomForest(as.factor(train_data$target)~.,data=train_data,mtry=2,ntree=600,importance=TRUE,proximity=TRUE)
pre_data=predict(pre_model,test_data)
output=table(test_data[,14],pre_data,dnn=c("真实值","预测值"))

zql[4]=(output[2,2]+output[1,1])/(output[1,1]+output[1,2]+output[2,1]+output[2,2])
czl[4]=output[2,2]/(output[1,2]+output[2,2])
cql[4]=output[2,1]/(output[2,1]+output[2,2])
#朴素贝叶斯
library(klaR)
pre_model=NaiveBayes(as.factor(train_data$target)~.,train_data)
plot(pre_model)
pre_data=predict(pre_model,test_data)
output=table(test_data[,14],pre_data$class,dnn=c("真实值","预测值"))

zql[5]=(output[2,2]+output[1,1])/(output[1,1]+output[1,2]+output[2,1]+output[2,2])
czl[5]=output[2,2]/(output[1,2]+output[2,2])
cql[5]=output[2,1]/(output[2,1]+output[2,2])
print(zql)
print(czl)
print(cql)
#画折线图
plot(cql,type = "o",col = "red", xlab = "次数", ylab = "查全率")
dev.new()
plot(czl,type = "o",col = "#4c00ff", xlab = "次数", ylab = "查准率")
dev.new()
plot(zql,type = "o",col = "#00ff99", xlab = "次数", ylab = "准确率")

结果

结果

本文共 151 个字数,平均阅读时长 ≈ 1分钟
1

打赏

海报

正在生成.....

评论 (0)

取消