社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

机器学习|第8期. 机器学习预测模型入门与R实战(二)

观科研 • 6 月前 • 74 次点击  
BE声明学写文章②



往期回顾

  REVIEWS  


1)机器学习|第1期. 一图get机器学习基本流程

2)机器学习|第2期. 你该知道的数据预处理实战①

3)机器学习|第3期. 你该知道的数据预处理实战②

4)机器学习|第4期. 特征工程干货及R实战(一)
5)机器学习|第5期. 特征工程干货及R实战(二)

6)机器学习|第6期. 特征工程干货及R实战(三)

7)诊断试验专栏|第7期. 诊断试验的报告规范


上一期我们带大家学习了机器学习预测模型入门与R实战(一),分享了机器学习建模与可视化的重要内容,现继续分享机器学习预测模型入门与R实战(二)。


MASCU

机器学习




01

机器学习预测模型R实战(二)


基于机器学习常见步骤,如何利用自己的数据进行实操,复现可行的结果,我们为大家提供以下代码,本次数据为虚拟生成数据(公众号发送“241009”,获得数据),结局指标为大于胎龄儿,收集了孕妇孕期生活方式、血液检测指标,现利用机器学习算法建立基于孕期因素的大于胎龄儿预测模型,图为变量手册



在上期R代码的基础上继续演示:

####加载必要的包
library(dplyr) #未安装的话,记得install.packages("R包名")
library(caret)
library(pROC)
library(rms)
library(ROCR)
library(stats)
library(xgboost)
library(Boruta)
if(!require("compareGroups"))install.packages("compareGroups");library("compareGroups")
if (!require("openxlsx")) {
  install.packages("openxlsx")}
library(openxlsx)
####读取数据
data "machine learning.xlsx")  ###如果使用自身数据,需注意变量名更换
####其他代码见上期
####模型构建与评估(大于胎龄儿为分类任务,使用上述7种机器学习分类算法)
models "glm", "rf""xgbTree","rpart""svmLinear""knn""nb")
results function(modelName) {
  # 设置控制参数
    control "cv", number = 5)
  # 构建模型
   model                 data = train,
                method = modelName,
                trControl = control,
                preProcess = c("center""scale"))
    # 使用测试集评估模型
    pred test)
    confusionMatrix(pred, test$LGA)
})

# 输出每个模型的结果
names(results) lapply(names(results), function(name) {
    print(paste(name, "Confusion Matrix and Statistics:"))
    print(results[[name]])
})
results
####输出的结果如下图所示



#(注意:上述结果图展示了每个算法获得的准确率accuracy及其95%CI,Kappa值,灵敏度Sensitivity,特异度Specificity,Pos Pred Value阳性预测值,Neg Pred Value阴性预测值等。)
####ROC曲线下面积
test$LGA test$LGA)) - 1  # 转换为0和1
models "glm", "rf""xgbTree","rpart""svmLinear""knn""nb")
# 存储模型
trained_models # 训练模型并存储
for (modelName in models) {
   # 设置控制参数
  control "cv", number = 5)
   # 构建模型
   model             data = train,
             method = modelName,
             trControl = control,
            preProcess = c("center""scale"))
   trained_models[[modelName]] }
# 定义用于绘制的函数
draw_roc_curves function(dataSet, title) {
   plot_colors "black", "red""blue""green""orange","yellow""purple")
   pdf(paste0(title, ".pdf"))  # 保存为PDF文件
   # 初始化第一个模型的ROC曲线
   first_model    pred_probs    predict(first_model, newdata = testtype = "prob")[,2]
    }, warning = function(w) NULL)
   if (!is.null(pred_probs)) {
    roc_obj      roc(test$LGA, pred_probs)
     }, error = function(e) NULL)
    if (!is.null(roc_obj)) {
    # 绘制第一个模型的ROC曲线
     plot(roc_obj, col = plot_colors[1], main = title, 
       print.auc = TRUE, print.auc.x = 0.8, print.auc.y = 0.2,
        print.auc.cex = 0.8, print.auc.col = plot_colors[1])
    }
   } 
   for (i in 2:length(models)) {
    modelName     model     # 使用模型进行预测
      pred_probs        predict(model, newdata = testtype = "prob")[,2]
       }, warning = function(w) NULL)
      if (!is.null(pred_probs)) {
      # 计算ROC曲线
       roc_obj         roc(test$LGA, pred_probs)
        }, error = function(e) NULL)
      if (!is.null(roc_obj)) {
   # 绘制ROC曲线
        # 使用lines添加剩余模型的ROC曲线
      lines(roc_obj, col = plot_colors[i], print.auc = FALSE)
   }
  }
 }
# 添加图例
   legend("bottomright", legend = models, col = plot_colors, lty = 1)

dev.off()  # 关闭PDF设备
}
# 在训练集上绘制ROC曲线
draw_roc_curves(train, "Train2Set ROC Curves")
# 在测试集上绘制ROC曲线
draw_roc_curves(test"Test2Set ROC Curves")
####输出结果如下图




观科研公众号后台回复“241009”,即可获取原始数据进行练习哦~


以上代码为关键部分,实际应用需根据自身数据和代码运行结果做适当调整。机器学习预测模型重点在特征选择,选择合适的特征进行机器学习建模与模型评估。下一期我们将继续分享机器学习常见建模,希望大家快乐科研,每日进步一点点。



今天的分享到这里就结束啦,你学会了吗?
大家对于推送内容有任何问题或建议可以在公众号菜单栏“更多--读者的话” 栏目中提出,我们会尽快回复!


期待已久~临床科研交流群来啦!


(欢迎大家入群交流~
若群满,请添加下方微信,备注:“进临床科研与统计_互助交流群” )





写在最后


“观科研”(点击进一步了解我们吧)是由一群北京协和医学院(清华大学医学部)的博士开创的公众号,初心是让医学科研有迹可循,帮助一线的医学科研人员更快地成长,希望大家支持与关注!

如果大家对分享医学科研知识感兴趣,特别欢迎加入我们,期待与您的相遇相识相知,也非常欢迎大家自主投稿,如果您有需要分享的内容或对我们有任何建议,可通过后台留言、
公众号菜单栏
“更多—读者的话”栏目进一步了解)或发送邮件至mascu_forever@163.com与我们交流并留下个人联系方式,我们会及时与您联系。

如果您觉得我们长期的干货推送对您的科研工作有所帮助,可以在合适的机会致谢(包括但不限于SCI论文、毕业论文等),格式如下:
 The authors thank the support of Skill Learning from Kaixin Doctor and MASCU (Medical Association with Science, Creativity, and Unity), Inc, Shenzhen, China (mascu_forever@163.com).

【大家的支持,是我们持续更新的动力!】


Pay attention!
微信公众号的推送规则发生改变(不再按照时间顺序来显示),如果没有将“观科研”设置为星标,你就可能错失里面的精彩推送。


点击“在看”,可参与讨论哦!

图文:心观

审核:美观

编辑:云观

编审:直观


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/175474
 
74 次点击