8.临床预测模型验证——交叉验证/Bootstrap法

news/2024/2/25 19:57:29/文章来源:https://blog.csdn.net/Dr_long1996/article/details/135636828

基本概念

交叉验证:

将一定比例的数据挑选出来作为训练集,将其余未选中的样本作为测试集,先在训练集中构建模型,再在测试集中做预测。

内部验证:手动将样本随机分为训练集和测试集,先在训练集中构建模型,再在测试集中进行测试。

常用三种方法:

  1. Hold-Out Method 简单交叉验证;
  2. K-fold Cross Validation (K-CV),K折交叉验证;
  3.  Leave-One-Out Cross Validation(LOO-CV),留一法交叉验证,N折交叉验证。

简单交叉验证:

将原始的数据随机分成两组,一组作为训练集,一组作为测试集。

K折交叉验证:

将数据随机分为K个子集,对每个子集分别做一次测试集,其余的K-1组子集数据作为训练集,最终得到K个模型,用K个测试集的平均结果作为K-折交叉验证的性能指标。可以有效避免过度拟合及欠拟合状态的发生,最终得到的结果也比较有说服力。

注意:K一般不小于3

N折交叉验证:

假设原始数据有N个样本,每个样本作为测试集,其余的N-1个样本作为训练集,所以得到N个模型,用N个模型的平均结果作为此留一法交叉验证的性能指标。

相较于K折交叉验证,N折交叉验证的优势:

  1. 每次交叉验证,N-1个样本用于训练模型,接近原始数据分布,结果较为可靠;
  2. 在交叉验证过程中,没有随机因素影响最终结果,结果具有重现性。

外部验证:基于内部数据集建模完成之后,其他独立的研究团队开展的相同研究,其数据集作为外部数据的来源,进行模型的验证。

Bootstrap法

Bootstrap法是非参数统计方法,对样本进行重抽样,从而估计总体特征。优点:可以避免交叉验证造成的样本减少问题,也可以用于创造样本随机性。

优点:数据较小,难以有效划分训练集和测试集时效果显著,能从初始数据集中产生多个不同的训练集。

缺点:产生的数据集改变了初始数据集的分布,引入了估计偏差,因此在初始数据集样本量足够时,交叉验证法更常用

具体实操

二分类资料

案例:肺动脉栓塞风险模型

library(readxl)
data <- read_excel("data.xlsx")
data<-na.omit(data)
data<-as.data.frame(data)
data$group<-factor(data$group,levels = c(0,1),labels = c("No","Yes"))

利用最优子集法筛选出来的自变量,age,BMI,Tos,CA153,CDU,Transfusion,stage构建模型

form.bestglm<-as.formula(group~age+BMI+ToS+CA153+CDU+transfusion+stage)

若无具体的公式,也可以进行循环交叉验证及Bootstrap,确定最优的模型公式:

简单交叉验证

设置验证方法

train.control_1 <- trainControl(method="LGOCV",p=0.7,number = 1)

method=“LGOCV”,leave-group out cross-validation,为简单交叉验证。p指定训练集占的比例,这里为70%,number指定简单交叉次数。

set.seed(1)
LogMod1 <- train(form.bestglm, data=data, trControl=train.control_1, method='glm')LogMod1

train()函数中formula输入公式,data为数据集,trControl指定相应的交叉算法(为上一步定义好的交叉方法),method指定进行广义线性分析

可以发现共有515个样本,7个预测变量,因变量两个水平,no和yes。训练集占70%,1次重复。准确率达到0.87,Kappa值为0.41。结果尚可

显示ROC的结果

train.control_2 <- trainControl(method="LGOCV",p=0.7,number = 1,classProbs=TRUE,summaryFunction=twoClassSummary)
set.seed(1)
LogMod2 <- train(form.bestglm, data=data, trControl=train.control_2, method='glm')
LogMod2 

 classProbs设置为TRUE,summaryFunction设置为twoClassSummary,表示显示ROC结果。

ROC曲线下面积为0.812,灵敏度为0.976,特异度为0.346

K折交叉验证

train.control_3 <- trainControl(method = "cv", number = 10)
set.seed(1)
LogMod3 <- train(form.bestglm, data=data, trControl=train.control_3, method='glm')
LogMod3
train.control_4 <- trainControl(method = "cv", number = 10,classProbs=TRUE,summaryFunction=twoClassSummary)
set.seed(1)
LogMod4 <- train(form.bestglm, data=data, trControl=train.control_4, method='glm')
LogMod4

需要将方法设置为cv,number=10,表示10折交叉验证

N折交叉验证

train.control_5 <- trainControl(method = "LOOCV")
LogMod5 <- train(form.bestglm, data=data, trControl=train.control_5, method="glm")
LogMod5
train.control_6 <- trainControl(method = "LOOCV",classProbs=TRUE,summaryFunction=twoClassSummary)
LogMod6 <- train(form.bestglm, data=data, trControl=train.control_6, method="glm")
LogMod6

LOOCV为留一法交叉验证。

Bootstrap交叉验证

train.control_7 <-trainControl(method = "boot",number=1000)set.seed(1)
LogMod7 <- train(form.bestglm, data=data, trControl=train.control_7, method="glm")
LogMod7train.control_8 <-trainControl(method = "boot",number=1000,classProbs=TRUE,summaryFunction=twoClassSummary)set.seed(1)
LogMod8 <- train(form.bestglm, data=data, trControl=train.control_8, method="glm")
LogMod8

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_925611.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

世邦通信 SPON IP网络对讲广播系统getzoneterminaldata.php 未授权访问

产品介绍 世邦通信SPON IP网络对讲广播系统采用领先的IPAudio™技术,将音频信号以数据包形式在局域网和广域网上进行传送,是一套纯数字传输系统。 漏洞描述 spon IP网络对讲广播系统getuserdata.php存在未授权访问漏洞&#xff0c;攻击者可通过该漏洞获取后台敏感数据。 资…

解决kali beef启动失败解问题

只限于出现这个提示的时候使用 卸载 ruby apt remove ruby 卸载 beef apt remove beef-xss 重新安装ruby apt-get install ruby apt-get install ruby-dev libpcap-dev gem install eventmachine 重新安装beef apt-get install beef-xss 弄完以上步骤如果还是不行就重启kali再试…

现代雷达车载应用——第3章 MIMO雷达技术 3.4节 自动驾驶使用的高分辨成像雷达

经典著作&#xff0c;值得一读&#xff0c;英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 3.4 自动驾驶使用的高分辨成像雷达 如今&#xff0c;许多专为ADAS功能设计的汽车雷达收发器&#xff0c;如NXP半导体的MR3003和德州仪器的AWR2243&…

力扣hot100 打家劫舍 DP 滚动数组

Problem: 198. 打家劫舍 文章目录 思路复杂度&#x1f496; Code&#x1f496; DP空间优化版 思路 &#x1f468;‍&#x1f3eb; 参考地址 复杂度 时间复杂度: O ( n ) O(n) O(n) 空间复杂度: O ( n ) O(n) O(n) &#x1f496; Code class Solution {public static …

七、Qt 信号和槽

在QT4以上的版本&#xff0c;在窗体上用可以通过选中控件&#xff0c;然后点击鼠标右键单击按钮&#xff0c;选择“转到槽”。可以自动创建信号和槽。 选择clicked(),并点击 ok Qt Creator会给头文件和代码文件自动添加 这个按钮的单击事件&#xff08;信号和槽&#xff09;。 …

【征服redis5】redis的Redisson客户端

目录 1 Redisson介绍 2. 与其他Java Redis客户端的比较 3.基本的配置与连接池 3.1 依赖和SDK 3.2 配置内容解析 4 实战案例&#xff1a;优雅的让Hash的某个Field过期 5 Redisson的强大功能 1 Redisson介绍 Redisson 最初由 GitHub 用户 “mrniko” 创建&#xff0c;并在…

蓝桥杯练习题(九)

&#x1f4d1;前言 本文主要是【算法】——蓝桥杯练习题&#xff08;九&#xff09;的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …

网络基础学习(3):交换机

1.交换机结构 &#xff08;1&#xff09;网线接口和后面的电路部分加在一起称为一个端口&#xff0c;也就是说交换机的一个端口就相当于计算机上的一块网卡。 如果在计算机上安装多个网卡&#xff0c;并让网卡接收所有网络包&#xff0c;再安装具备交换机功能的软件&#xff0…

介绍下Redis?Redis有哪些数据类型?

一、Redis介绍 Redis全称&#xff08;Remote Dictionary Server&#xff09;本质上是一个Key-Value类型的内存数据库&#xff0c;整个数据库统统加载在内存当中进行操作&#xff0c;定期通过异步操作把数据库数据flush到硬盘上进行保存。因为是纯内存操作&#xff0c;Redis的性…

【零基础入门Python数据分析】Anaconda3 JupyterNotebookseaborn版

目录 一、安装环境 python介绍 anaconda介绍 jupyter notebook介绍 anaconda3 环境安装 解决JuPyter500&#xff1a;Internal Server Error问题-CSDN博客 Jupyter notebook快捷键操作大全 二、Python基础入门 数据类型与变量 数据类型 变量及赋值 布尔类型与逻辑运算…

【HarmonyOS】消息通知场景的实现

从今天开始&#xff0c;博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”&#xff0c;对于刚接触这项技术的小伙伴在学习鸿蒙开发之前&#xff0c;有必要先了解一下鸿蒙&#xff0c;从你的角度来讲&#xff0c;你认为什么是鸿蒙呢&#xff1f;它出现的意义又是…

SpringAOP-说说 JDK动态代理和 CGLIB 代理

Spring 的 AOP 是通过动态代理来实现的&#xff0c;动态代理主要有两种方式 JDK 动态代理和 Cglib 动态代理&#xff0c;这两种动态代理的使用和原理有些不同。 JDK 动态代理 Interface&#xff1a;JDK动态代理是基于接口的代理&#xff0c;它要求目标类实现一个接口。Invoca…

通过OpenIddict设计一个授权服务器02-创建asp.net项目

在这一部分中&#xff0c;我们将创建一个ASPNET核心项目&#xff0c;作为我们授权服务器的最低设置。我们将使用MVC来提供页面&#xff0c;并将身份验证添加到项目中&#xff0c;包括一个基本的登录表单。 创建一个空的asp.net core项目 正如前一篇文章中所说&#xff0c;授权…

PSoc62™开发板之i2c通信

实验目的 使用模拟i2c接口读取温湿度气压模块BME280数据 实验准备 PSoc62™开发板温湿度气压模块BME280公母头杜邦线 板载资源 本次实验是通过模拟i2c时序的方式来进行通信&#xff0c;理论上可以有非常多的方式配置i2c引脚&#xff0c;不像硬件i2c那样芯片出厂引脚已经固…

SpringBoot教程(十二) | SpringBoot集成JPA

SpringBoot教程(十二) | SpringBoot集成JPA 1. JPA简介 概念&#xff1a; JPA顾名思义就是Java Persistence API的意思&#xff0c;是JDK 5.0注解或XML描述对象&#xff0d;关系表的映射关系&#xff0c;并将运行期的实体对象持久化到数据库中。 优势&#xff1a; 标准化 …

信息系统安全——Linux 访问控制机制分析

实验 4 Linux 访问控制机制分析 4.1 实验名称 《Linux 访问控制机制分析》 4.2 实验目的 1 、熟悉 Linux基本访问控制机制使用和原理 2 、熟悉 Linux S 位的作用和使用 3 、熟悉强制访问控制 Selinux 原理及其使用 4.3 实验步骤及内容 1 、Linux 基本访问控制机制 &#xff08…

渗透测试(8)- Kali Linux 系统概述

Kali Linux 是一个基于 Debian 的 Linux 发行版&#xff0c;包括很多安全和取证方面的相关工具。Kali Linux 是一款全功能的安全操作系统&#xff0c;它可以帮助用户完成各种安全任务&#xff0c;包括网络渗透测试、系统攻击、密码破解、恶意软件分析、社会工程学攻击等&#x…

buuctf[极客大挑战 2019]BabySQL--联合注入、双写过滤

目录 1、测试万能密码&#xff1a; 2、判断字段个数 3、尝试联合注入 4、尝试双写过滤 5、继续尝试列数 6、查询数据库和版本信息 7、查询表名 8、没有找到和ctf相关的内容&#xff0c;查找其他的数据库 9、查看ctf数据库中的表 10、查询Flag表中的字段名 11、查询表…

新能源汽车智慧充电桩方案:如何实现充电停车智慧化管理?

一、方案概述 基于新能源汽车充电桩的监管运营等需求&#xff0c;安徽旭帆科技携手合作伙伴触角云共同打造“智能充电设备&#xff0b;云平台&#xff0b;APP小程序”一体化完整的解决方案&#xff0c;为充电桩车位场所提供精细化管理车位的解决办法&#xff0c;解决燃油车恶意…

Python+Django+MySQL的图书馆管理系统【附源码,运行简单】

PythonDjangoMySQL的图书馆管理系统【附源码&#xff0c;运行简单】 总览 1、《图书馆管理系统》1.1 方案设计说明书设计目标需求分析工具列表 2、详细设计2.1 登录2.2 注册2.3 程序主页面2.4 图书新增界面2.5 图书信息修改界面2.6 其他功能贴图 3、下载 总览 自己做的项目&am…