当前位置: 首页 > news >正文

第100+40步 ChatGPT学习:R语言实现多轮建模

回顾一下什么叫多轮建模:

要综合判断一个模型好不好,一次随机抽样是不行的,得多次抽样建模,看看整体的性能如何才行(特别是对于这种小训练集)。

所以我的思路是,随机抽取训练集和验证集2000次(随你),然后构建2000个ML模型(譬如2000个朴素贝叶斯),得出2000批性能参数。那怎么实现呢,下面上R语言代码,以朴素贝叶斯为例:

library(caret)
library(e1071)
library(pROC)# 加载数据集
dataset <- read.csv("X disease code fs.csv")
cat("数据集加载成功。\n")
X <- dataset[, 2:14]
Y <- dataset[, 1]# 初始化结果数据框
results <- data.frame(Random_Seed = integer(),Sensitivity_Test = numeric(),Specificity_Test = numeric(),AUC_Test = numeric(),Sensitivity_Train = numeric(),Specificity_Train = numeric(),AUC_Train = numeric()
)
cat("结果数据框初始化完成。\n")# 遍历随机种子
for (n in 1:2000) {set.seed(n)cat("设置随机种子为", n, "\n")# 划分数据集trainIndex <- createDataPartition(Y, p = 0.7, list = FALSE)X_train <- X[trainIndex, ]X_test <- X[-trainIndex, ]y_train <- Y[trainIndex]y_test <- Y[-trainIndex]cat("数据集划分为训练集和测试集。\n")# 标准化特征preProcValues <- preProcess(X_train, method = c("center", "scale"))X_train <- predict(preProcValues, X_train)X_test <- predict(preProcValues, X_test)cat("特征标准化完成。\n")# 训练朴素贝叶斯模型model <- naiveBayes(X_train, y_train)cat("朴素贝叶斯模型训练完成。\n")# 进行预测y_pred <- predict(model, X_test)y_train_pred <- predict(model, X_train)cat("完成对训练集和测试集的预测。\n")# 计算混淆矩阵cm_test <- confusionMatrix(as.factor(y_pred), as.factor(y_test))cm_train <- confusionMatrix(as.factor(y_train_pred), as.factor(y_train))cat("混淆矩阵计算完成。\n")# 计算AUC分数auc_test <- auc(as.numeric(y_test), as.numeric(y_pred))auc_train <- auc(as.numeric(y_train), as.numeric(y_train_pred))cat("AUC分数计算完成:测试集 =", auc_test, ",训练集 =", auc_train, "\n")# 提取敏感性和特异性sen_test <- cm_test$byClass["Sensitivity"]sep_test <- cm_test$byClass["Specificity"]sen_train <- cm_train$byClass["Sensitivity"]sep_train <- cm_train$byClass["Specificity"]cat("敏感性和特异性提取完成。\n")# 追加结果results <- rbind(results, data.frame(Random_Seed = n,Sensitivity_Test = sen_test,Specificity_Test = sep_test,AUC_Test = auc_test,Sensitivity_Train = sen_train,Specificity_Train = sep_train,AUC_Train = auc_train))cat("第", n, "次迭代的结果已追加。\n")
}# 保存结果到CSV
write.csv(results, "jet_NB_par.csv", row.names = FALSE)
cat("结果已保存到jet_NB_par.csv。\n")

简单解说:

(A)其实就是一个for循环语句,for (n in 1:2000) ,2000次就是2000,你要是想运行10000次,就改成10000;

(B)运行以后呢,可以看到模型在迭代,显示的是运行到第几个模型了:

(C)用代码write.csv(results, "jet_NB_par.csv", row.names = FALSE)输出成excel查看,输出地址就是你的工作路径,不懂的话可以使用代码getwd()展示出来。

(D)打开工作路径,可以发现jet_NB_par这个文件:

(E)打开文件,调整一下格式:

(F)然后可以操作了,比如test-sen排个序,看看最好的有多好;比如看看2000次的平均值和标准差:AUC平均值0.77-0.78左右。剩下的自己玩了,不说那么多了,发挥你们的妄想空间。

http://www.xdnf.cn/news/302779.html

相关文章:

  • 用 Tailwind CSS 优化你的 Vue 3 项目! ! !
  • MySQL从入门到精通(一):MySQL介绍及数据库相关概念
  • 高级java每日一道面试题-2025年5月02日-基础篇[反射篇-编码]-使用反射,获取Class对象
  • WPF MVVM入门系列教程(五、命令和用户输入)
  • 如何使用vmstat 和 free 查看内存碎片化信息?
  • Qwen3与Deepseek R1对比(截止20250506)
  • C++ - 仿 RabbitMQ 实现消息队列(1)(环境搭建)
  • 典籍知识问答模块AI问答功能feedbackBug修改+添加对话名称修改功能
  • MySQL基础关键_009_DDL 和 DML(二)
  • vue源代码采用的设计模式分解
  • Hive优化秘籍:大数据处理加速之道
  • Excel 数据 可视化 + 自动化!Excel 对比软件
  • Excel Vlookup
  • Tomcat中Web应用程序停止时为了防止内存泄漏,JDBC驱动程序被强制取消注册出现原因
  • 荣耀A8互动娱乐组件部署实录(终章:后台配置系统与整体架构总结)
  • 链表的面试题2反转单链表
  • 第三章:langchain加载word文档构建RAG检索教程(基于FAISS库为例)
  • 5.6 react组件化开发基础
  • Elasticsearch知识汇总之ElasticSearch部署
  • conda 环境克隆
  • ϵ-prediction和z0-prediction是什么意思
  • 关于EIDE中debug的使用问题
  • 如何打造一个高并发系统?
  • linux redis 设置密码以及redis拓展
  • ROS2:话题通信CPP语法速记
  • 从零开始学习人工智能(Python高级教程)Day6-Python3 正则表达式
  • c++学习合集(2025-4-29)
  • setup 函数在 Vue 3 中的作用是什么?什么时候会执行
  • ASP.NET Core 中间件
  • git flow