Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >预测建模中的重抽样方法

预测建模中的重抽样方法

作者头像
医学和生信笔记
发布于 2023-02-14 09:32:55
发布于 2023-02-14 09:32:55
1.4K0
举报

面向医学生/医生的实用机器学习教程系列推文

随着临床预测模型的愈加火爆,越来越多的医生/医学生开始搞临床预测模型,但其实这个东西已经很老了,并不是什么新鲜的东西。

在我2018年左右刚开始学习生信数据挖掘的时候,临床预测模型就被广泛应用于各种生信SCI中,但它在临床中的使用,远比这个早得多!

不知道什么原因最近又火起来了!(也有可能一直都很火,只不过我最近没关注它......)

大家一定要明白,临床预测模型的本质就是机器学习,这其实是机器学习在生物医学领域的应用,不管怎么改头换面,都逃不出机器学习的各种方法。

通常大家在做临床预测模型或者机器学习时,首先就是要划分数据,比如训练集/测试集划分、内部验证/外部验证,这些都属于重抽样技术。

重抽样技术大家应该都不陌生,比如常用的K折交叉验证、bootstrap、训练集/测试集划分,等,都属于重抽样技术

它的基本思想是:对于一个数据集,先用其中一部分训练模型,然后用剩余的数据评估模型表现,这一过程会重复进行多次,最后对结果进行归纳汇总

使用重抽样技术有助于模型更好地“认识理解”数据,从而得到更加稳健的结果。这就好比让你看一本书,如果只看1次,可能什么也记不住,但是如果让你看10次,那效果肯定比只看1次要好。

因为重抽样过程是随机的,它每次都会随机地从整个数据中抽取一部分,给模型学习,所以每次每次抽取的数据都不一样(既然是随机的,那也有可能一样),这样就让模型有机会认识全部的数据,从而提高模型稳定性。

在临床预测模型领域大家经常听到内部验证、外部验证这种说法,其实很好理解。对于数据集A,我把它分成A1和A2两份,A1这部分数据用于训练模型,A2这部分数据用于评估模型表现,用来评估模型表现的这部分A2数据就是内部验证(也有人把交叉验证和自助法等这种叫做内部验证);假如此时我找来另一份数据集B,在数据集B上再次评估模型表现,那数据集B就是外部验证

重抽样的方法有很多种,除了大家常见的K折交叉验证、bootstrap,还有蒙特卡洛交叉验证、留一法交叉验证等。

如何选择合适的重抽样方法呢?这个一定要和你的数据结合讨论,没有金标准!如果你是一个精通机器学习的人,那你肯定不会有这样的问题,所以说到底,这都是机器学习中的问题,一个临床的医务工作者不懂这些很正常。我会在文末给出一些方法选择建议供大家参考

留出法(holdout)

大家最常使用的,把数据集随机划分为训练集(train)/测试集(test)的做法就是holdout,其中训练集用于建模,测试集用于评估模型表现。

有时还会把数据划分为训练集(train)/测试集(test)/验证集(validation),训练集用来训练模型,测试集查看模型表现,不断进行调整,然后训练集和测试集一起训练出一个模型,最后用验证集评估模型表现。

有时测试集和验证集经常混为一谈,二者经常混用。

交叉验证(cross validation)

交叉验证,意思就是一份数据既用作训练,也用作验证,互相交叉,主要有以下几种:

K折交叉验证(K fold cross validation),就是把数据集随机分为K个样本量基本相同的子数据集。比如5折交叉验证,就是把数据集分为5个子集(比如分成A,B,C,D,E,5份),在建模时,首先会使用其中A,B,C,D,4份数据进行建模,然后用剩下的E数据评估模型表现,接下来使用A,B,C,E,4份数据建模,用剩下的D评估模型表现。这样依次进行5个循环,每份数据都会用来评估模型表现。最后将得到的5个模型表现结果进行汇总。

下面是一个10折交叉验证的示意图:

留一交叉验证(LOOCV, leave one out cross validation),是K折交叉验证的特例。每次都只留1个样本用于评估模型表现,所以这里的K其实就等于样本量,每一个样本都会被用来评估模型表现。

重复交叉验证(repeated cross validation),也是K折交叉验证的扩展版本,比如,重复10次的5折交叉验证,就是把5折交叉验证这个过程重复10遍。

蒙特卡洛交叉验证(Monte Carlo cross validation),也是交叉验证的一个变种。留出法是将数据集划分1次,而蒙特卡洛交叉验证就是将留出法进行多次。

bootstrap

自助法,即有放回的随机抽样法。具体做法如下:

比如,一个数据集有100个样本,每次随机抽取1个,然后放回,再随机抽取1个,这样的过程重复100次,就得到了一个和原数据集样本量相等的抽样数据集,这个抽样数据集就叫做自助集。

由于每次都是有放回然后再随机抽取,所以一个自助集中可能有多个同一样本!所以就有可能在100次随机抽取中,有一些没被抽中过的样本,这些样本就被称为袋外样本(out of bag),其中被抽中的样本(也就是自助集)用于训练模型,袋外样本用来评估模型表现。随机森林算法就是使用这种方法的!

其他方法

除了以上方法,其实还有非常多没有介绍,比如在mlr3中经常使用的嵌套重抽样,这些大家感兴趣可以自行了解。

重抽样的目的

经常有粉丝问我:为什么我用了各种方法,10折交叉验证、10折重复交叉验证、自助法,都用过了,为什么最后模型的表现还是很差?

看到类似的问题,我想这部分朋友可能把重抽样的目的搞错了,重抽样的目的不是为了提高模型表现,重抽样也确实不能提高模型表现!开头我已说过,重抽样技术是为了让模型更好的认识数据而已,这样能够得到更加稳健、无偏的结果,但是对于提高模型表现没有直接的影响哦~

你可以这么理解,如果你不重抽样,可能某次结果的AUC是0.8,再做一次可能就变成0.5了,而你重抽样10次,得到的结果是10次的平均,这样的结果很明显是更加稳健的。

模型表现好不好首先是数据原因,一个牛逼的数据不需要复杂的模型也能有很好的结果,数据预处理对数据影响很大,大家可以参考这篇推文:预测建模常用的数据预处理方法

另外还和模型本身的性质有关,比如模型的超参数、模型本身的上限等,这些会在以后陆续介绍。

为什么要单独划分出一部分数据

通常我们建立模型时,会把数据集A划分为A1和A2两份,A1用来训练模型,A2用来测试模型,在训练模型的过程中,完全不用使用到A2这部分数据。有些人不理解,把这种方法和嵌套重抽样混为一谈。其实这两个有着本质的区别。

嵌套重抽样是在训练模型时使用的,把两份数据集全都用到了,而且两份数据集都会再叠加其他重抽样方法。

我们划分数据的目的是什么呢?我们是为了测试最终的模型表现。临床问题数据很珍贵,通常都只有1份,这种情况下我把这份数据全都用于训练模型,那我用什么测试训练出来的模型好坏呢?

有的人喜欢把训练好的模型作用于用来训练模型的数据上,发现结果竟然很好,这样是不对的,这叫数据泄露,你的数据模型已经学习过了,这不是作弊吗?这样的模型结果能说明什么问题呢?

所以一开始把数据就划分为2份是一个很好的解决方法。如果你有很多个数据集,你完全可以在其中1个数据集中使用各种方法建模。

方法选择建议

以上就是一些常见的重抽样方法,可以看到每种方法都强调一个问题,那就是随机!,只有随机,才能保证模型学习到这个数据集中的更多信息,才能获得稳健的模型表现!

以下是一些方法选择建议:

  1. 没有哪一种方法好,哪一种方法不好!!只有合不合适,没有好不好!
  2. 如果样本量较小,建议选择重复10折交叉验证;
  3. 如果样本量足够大,比如几万,几十万这种,随便选,都可以;
  4. 如果目的不是得到最好的模型表现,而是为了在不同模型间进行选择,建议使用bootstrap;
  5. 如果还不知道怎么选,建议都试一试,喜欢哪个选哪个

参考资料

  1. Applied Predictive Modeling
  2. https://www.cnblogs.com/HuZihu/

面向医学生/医生的实用机器学习教程,往期系列推文:

  1. mlr3:开篇
  2. mlr3:基础使用
  3. mlr3:模型评价
  4. mlr3:模型比较
  5. mlr3:超参数调优
  6. mlr3:嵌套重抽样
  7. mlr3:特征选择
  8. mlr3:pipelines
  9. mlr3:技术细节
  10. mlr3:模型解释
  11. mlr3实战:决策树和xgboost预测房价
  12. 使用mlr3搞定二分类资料的多个模型评价和比较
  13. mlr3的校准曲线也是一样画!
  14. 使用mlr3搞定二分类资料的多个模型评价和比较
  15. 使用tidymodels搞定二分类资料多个模型评价和比较
  16. tidymodels不能画校准曲线?
  17. tidymodels用于机器学习的一些使用细节
  18. tidymodels支持校准曲线了


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 医学和生信笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
HAWQ + MADlib 玩转数据挖掘之(十二)——模型评估之交叉验证
一、交叉验证概述         机器学习技术在应用之前使用“训练+检验”的模式,通常被称作“交叉验证”,如图1所示。 图1 1. 预测模型的稳定性         让我们通过以下几幅图来理解这个问题
用户1148526
2018/01/03
2.6K0
HAWQ + MADlib 玩转数据挖掘之(十二)——模型评估之交叉验证
不均衡数据怎么破?对付它的七种武器!
先问大家一个问题: 银行欺诈识别、市场实时交易、网络入侵检测等领域的数据集,有哪些共通点? 答案是:“关键”事件在数据中的占比经常少于1%(例如:信用卡行骗者、点击广告的用户或被攻破的服务器的网络扫描
AI研习社
2018/03/19
9820
不均衡数据怎么破?对付它的七种武器!
模型评估、过拟合欠拟合以及超参数调优方法
上一篇文章介绍了性能评估标准,但如何进行模型评估呢,如何对数据集进行划分出训练集、验证集和测试集呢?如何应对可能的过拟合和欠拟合问题,还有超参数的调优,如何更好更快找到最优的参数呢?
kbsc13
2019/08/16
1.8K0
logistic校准曲线(测试集)的6种实现方法
关于临床预测模型的基础知识,小编之前已经写过非常详细的教程,包括了临床预测模型的定义、常用评价方法、列线图、ROC曲线、IDI、NRI、校准曲线、决策曲线等。
医学和生信笔记
2023/02/14
1.8K0
logistic校准曲线(测试集)的6种实现方法
机器学习中的特征选择(变量筛选)方法简介
变量选择(特征选择,feature selection) ,是机器学习领域非常重要的问题,到底哪些变量是有用的,哪些是不重要的,可以删除的,怎么选才能提高模型表现,理论非常复杂,实在不是一个临床医生能完全掌握的,以下简单介绍下,感兴趣的自己看书,后续会推一些相关R包的使用教程。
医学和生信笔记
2023/02/14
3.6K0
模型选择评估方法
目录: 留出法(hold-out) 交叉验证法(cross validation) 留一法(Leave-One-Out,LOO) 自助法(bootstrapping) 总结 前提: 总数据集D,数据集大小为n; 训练集S; 测试集T。  1、留出法(hold-out) 直接将数据集D分为两个互斥的集合,其中一个作为训练集S,另一个作为测试集T,即$D=S \cup T,S \cap T= \varnothing $,在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。 需要注意: 训练集和测试集
Echo_fy
2018/06/14
6460
分类模型评估方法
为了能够评估模型的泛化能力,可以通过实验测试对学习器的泛化能力进行评估,进而做出选择。因此需要使用一个 "测试集" 来测试学习器对新样本的判别能力,以测试集上的 "测试误差" 作为泛化误差的近似。
@小森
2024/03/15
1330
分类模型评估方法
机器学习(六)构建机器学习模型
整个过程包括了数据预处理、模型学习、模型验证及模型预测。其中数据预处理包含了对数据的基本处理,包括特征抽取及缩放、特征选择、特征降维和特征抽样;我们将带有类标的原始数据划按照82原则分为训练数据集和测试集。使用训练数据集用于模型学习算法中学习出适合数据集的模型,再用测试数据集用于验证最终得到的模型,将模型得到的类标签和原始数据的类标签进行对比,得到分类的错误率或正确率。
Maynor
2023/11/01
6100
机器学习(六)构建机器学习模型
交叉验证法(​cross validation)
基于一些已知样本,根据其变量(是否出现胸痛、是否有良好的血液循环、是否有闭锁的动脉、体重指标),预测其是否患有心脏病(左侧)。接着,出现一个新来的患者,我们可以测量或询问这些变量,然后基于这些变量预测其是否患有心脏病(右侧)。
王诗翔呀
2020/09/08
3.3K0
为什么要用交叉验证
本文结构: 什么是交叉验证法? 为什么用交叉验证法? 主要有哪些方法?优缺点? 各方法应用举例? ---- 什么是交叉验证法? 它的基本思想就是将原始数据(dataset)进行分组,一部分做为训练集来训练模型,另一部分做为测试集来评价模型。 ---- 为什么用交叉验证法? 交叉验证用于评估模型的预测性能,尤其是训练好的模型在新数据上的表现,可以在一定程度上减小过拟合。 还可以从有限的数据中获取尽可能多的有效信息。 ---- 主要有哪些方法? 1. 留出法 (holdout cross validation)
杨熹
2018/04/03
2.2K0
为什么要用交叉验证
tidymodels用于机器学习的一些使用细节
R语言做机器学习的当红辣子鸡R包:mlr3和tidymodels,之前用十几篇推文详细介绍过mlr3
医学和生信笔记
2022/11/15
1.5K0
tidymodels用于机器学习的一些使用细节
mlr3_重抽样
这里$is_instantiated是false,这表示,我们没有将采样方法设置再数据集中。同时这里默认的采样比例是0.6667,可以通过下面两种方式更改
火星娃统计
2021/02/05
9390
mlr3_重抽样
机器学习之交叉验证
交叉验证(Cross Validation)是在机器学习建立模型和验证模型参数时常用的方法。顾名思义,就是重复的使用数据,把得到的样本数据进行切分,组合为不同的训练集和测试集。用训练集来训练模型,测试集来评估模型的好坏。在此基础上可以得到多组不同的训练集和测试集,某次训练集中的样本,在下次可能成为测试集中的样本,也就是所谓的交叉。
小一
2019/08/14
8540
机器学习之交叉验证
机器学习概述与算法介绍(二)
机器学习概述 机器学习基本概念 机器学习基本流程与工作环节 机器学习中的评估指标 机器学习算法一览 3. 机器学习基本流程与工作环节 3.1 机器学习应用几大环节 预测模型 image 机器学习算法
iOSDevLog
2018/06/06
9020
数学模型的评估方法
最近在学习机器学习的一些相关的算法,在学习过程中新接触到了大量的概念和原理。为了更好地提高学习的效果,于是就把在学习的过程中接触到的新概念和遇到的问题通通写进我的博客,作为学习笔记,以提供给自己和其他朋友进行查阅和参考。
EatRice
2020/06/02
1.3K0
数学模型的评估方法
一个完整的机器学习项目在Python中演练(四)
【磐创AI导读】:本文是一个完整的机器学习项目在python中的演练系列第第四篇。详细介绍了超参数调整与模型在测试集上的评估两个步骤。欢迎大家点击上方蓝字关注我们的公众号:磐创AI。 大家往往会选择一本数据科学相关书籍或者完成一门在线课程来学习和掌握机器学习。但是,实际情况往往是,学完之后反而并不清楚这些技术怎样才能被用在实际的项目流程中。就像你的脑海中已经有了一块块”拼图“(机器学习技术),你却不知道如何讲他们拼起来应用在实际的项目中。如果你也遇见过同样的问题,那么这篇文章应该是你想要的。本系列文章将介绍
磐创AI
2018/07/03
7390
MATLAB中 crossvalind K重交叉验证
官方文档:https://ww2.mathworks.cn/help/bioinfo/ref/crossvalind.html
种花家的奋斗兔
2020/11/13
3K0
MATLAB中  crossvalind K重交叉验证
【机器学习】划分训练集和测试集的方法
在机器学习中,我们的模型建立完成后,通常要根据评估指标来对模型进行评估,以此来判断模型的可用性。而评估指标主要的目的是让模型在未知数据上的预测能力最好。因此,我们在模型训练之前,要对训练集和测试集进行划分。一般数据集划分的方法有四种:留出法、交叉验证法、留一法、自助法。
Twcat_tree
2023/11/20
1.6K0
【机器学习】划分训练集和测试集的方法
用交叉验证改善模型的预测表现-着重k重交叉验证
机器学习技术在应用之前使用“训练+检验”的模式(通常被称作”交叉验证“)。 预测模型为何无法保持稳定? 让我们通过以下几幅图来理解这个问题: 此处我们试图找到尺寸(size)和价格(price)的关系
机器学习AI算法工程
2018/03/14
1.6K0
用交叉验证改善模型的预测表现-着重k重交叉验证
使用mlr3搞定二分类资料的多个模型评价和比较
前面介绍了使用tidymodels进行二分类资料的模型评价和比较,不知道大家学会了没?
医学和生信笔记
2022/11/15
1K0
使用mlr3搞定二分类资料的多个模型评价和比较
相关推荐
HAWQ + MADlib 玩转数据挖掘之(十二)——模型评估之交叉验证
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档