测试集准确率不变_这个医疗AI准确率突破天际,招来了铺天盖地的质疑

caf9575fdc788e8600f5b4eb91453892.gif

转自 | 量子位
f1c1cd1426c5dfa0c551f8a60c790ae2.png只要输入一次心跳的波谱。就能判断一个人有没有发生心力衰竭 (CHF) ,准确率100%。这是英国华威大学领衔的团队,用机器学习方法做出的新成果。还登上了影响因子2.943的Biomedical Signal Processing and Control期刊。准确率眼看就要突破天际,高得反常识,招来了铺天盖地的质疑:主要的疑点有两个:疑似过拟合 (没有规律硬拗出规律) ,疑似数据泄漏 (训练集和测试集有重叠) 。一日之间,话题在Reddit论坛的热度已经超过了400:27bfe71914c6af7a2d1328668e00e5cf.png那么,来看看到底发生了什么。

怎样的研究

这项研究,是依靠心电图 (ECG) 来推测,人有没有出现充血性心力衰竭 (CHF) ,也就是人们常说的心力衰竭:指的是心脏没能推送足够的血量,维持身体所需。来自华威大学、佛罗伦萨大学以及萨里大学的科学家们,想让AI去看看心力衰竭的心电图波形有没有规律可寻。于是,团队设计了一维的卷积神经网络 (CNN) ,用公开的心电图数据集,训练它给心电图做二分类:正常 vs 心衰。6b7b141a996bab6cf2025afdfebbbf4e.png训练完成后,团队用490,505次心跳的数据集测试了模型,结果训练集上的分类准确率达到了99.9%:faa36c20b260874428aa3d8ff425826e.png论文还写到,重要的是模型发现了心衰的心电图,有非常突出的形态特征可以用于诊断:008e07d9a058d8f4cf2f5c1e17ea0b08.png不过,研究用的数据集受到了质疑,准确率受到了质疑,连AI发现的重要特征也受到了质疑。

实验的漏洞

乍一看,论文的样本数量似乎很大,论文作者采集了275,974正常的ECG心跳样本和214,531个心脏衰竭患者的样本,总数量达到了49万个。但仔细一看,其实样本的数量是非常少的,总共也只有33个人,一个人多个的心跳不是独立样本。168a277f265708706dde1c0ef30617dd.png心衰患者的数据来自BIDMC数据集,每秒采样250个样本;正常人的数据来自MIT-BIH,每秒采样128个样本。当采用两个不同数据集时,需要对其中一组数据进行下采样,匹配另一组数据的频率。不过研究人员已经注意到这一点,在训练前做了预处理,大漏洞不在这里。但之后的训练过程,就令人产生了数据泄漏 (Data Leakage) 的质疑。首先,数据集被随机分成三个较小的子集,分别进行训练、验证和测试(相当于总数据的50%、25%和25%)。每个人的心跳数据只包含在了一个数据集中,没有在多个数据集里重复出现。因为作者知道,如果一个人的心跳数据,在训练集和测试集都出现,存在交叉验证的可能性。41617db3a1e3dcfb3471f4fc1d59add2.png但是这又带来一个问题,测试集中只有少数几个人的数据,这就相当于拿训练后的模型在个别样本上进行验证,结果的可靠性也大打折扣。为了保证结果在更多的数据上进行测试,作者又想到了另一种方法,将样本做10次随机分割,分别进行10次训练和评估,以减少分类结果带来的差异性。虽然一开始的方法避免了单次实验的交叉验证,但是多次实验取平均,等于又把交叉验证的问题带了回来,造成了数据泄露(Data Leakage)。然后,作者一个只有33个样本的数据上,用了三个1D卷积神经网络层进行拟合,准确率近乎100%,难免不让人觉得是过拟合。10c632a844d426c9f7a3629fd0cdd1ab.png在训练集上避免过拟合,本来是“炼丹”过程的常识,却被作者作为一项优点来宣传。难怪有网友在吐槽:这是一篇门外汉写的机器学习论文。100%对于非机器学习领域的人来说是一件令人惊叹的事情,而专业人士看到只会说“什么鬼”。f479b5a65537f0f430e883986b18d80a.png这篇论文还被发表在正式期刊上,有网友感叹:审稿人的水平哪去了,这个问题看不出来?另外,Hacker News上还有人 (@Cass) 说,AI总结出的两类心电图 (正常vs心衰),根本就有问题:
看图4 (下图) ,正常心电图的“平均”波形,压根不是这样。P太平了,Q太大了,R太钝了,S和T之间也不应该有那个额外的波。如果,提取的正常人平均值都能这么混乱,得出怎样的结果都不奇怪了。
008e07d9a058d8f4cf2f5c1e17ea0b08.png

一直被滥用

这篇论文在Reddit上引起了激烈讨论。随着机器学习大热,很多其他领域的研究者,也开始用机器学习模型,来执行自己领域的任务。而跨学科的研究人员,如果对机器学习的理解不足,很容易出现大问题。3034696dc5ed51b007f1ded72dc01933.png比如,数据泄漏的问题,让人想起了去年8月在Nature发表的一篇预测余震的论文,来自谷歌和哈佛。今年,一位名叫Rajiv Shah的数据科学家用自己的实验证明,这篇文章是“深度学习的错误用法”。他一共提出了三个致命缺陷:最大的缺陷就是数据泄漏。算法在测试集上的表现,远远超过训练集。查看数据集发现,测试集和训练集,包含许多相同的地震。把重叠部分去掉之后,模型的表现下降到了传统方法的水平。9b12dce60c560384222ed7e0f82d45b8.png第二个缺陷是,用随机森林这样的简单方法,也得出了相似的表现和结论。能用简单的方法,却用了复杂的方法,这就是消融实验 (Ablation Studies) 没做好。34a48a32cbe50ead7206fbd9c8abcdc5.png第三个缺陷是,论文中训练用了470万行数据,而Shah用1500行数据,就得到了几乎一样的表现。Shah认为,能用少量的数据解决问题,就不该用成千上万倍的数据量。这次重大的质疑,引起了业内的巨大关注,甚至有许多同行都来一起找Bug:10月2日,Nature又刊登了一篇质疑这项余震预测的论文,证明一个神经元的预测效果比一个六层的网络还要好,相当于否定了一年前的研究成果。83758c411f085a3341a8c048c88e9dc5.png这篇后发的论文指出,仅使用两个参数的逻辑回归模型,可以达到与深度学习方法相同的预测能力。机器学习是个好工具,但在使用它们的时候,需要充分了解它的特性、使用方法和局限性,而不是一味地套用,简单粗暴地进行数据拟合。目前机器学习还处在技术曲线的顶峰,等到热潮褪去,才能知道谁是真正的干货。新闻报道:https://www.surrey.ac.uk/news/new-ai-neural-network-approach-detects-heart-failure-single-heartbeat-100-accuracyhttps://www.forbes.com/sites/nicholasfearn/2019/09/12/artificial-intelligence-detects-heart-failure-from-one-heartbeat-with-100-accuracy/#228e5a067ac9论文地址:https://www.sciencedirect.com/science/article/pii/S1746809419301776完—为您推荐

从6万用户评论中,选出23门全世界最好的CS免费课

GRE作文用AI打分,已经20周年了:AI给中国考生的分数,远高于人类打分

这位90后学霸,即将任教麻省理工南京大学「自然指数」超越清华北大,位列全国高校第一、世界第七,突显学术实力【微软】AI-神经网络基本原理简明教程de0c7f4ef95e18e0a4e20e2f13cc880b.gif

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

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

相关文章

JavaFX自定义控件– Nest Thermostat第1部分

几周前,由于Hendrik Ebbers的出色文章 ,我决定花一些时间观看有关JavaFX的JavaOne讨论。 我不得不说我已经学到了很多东西,只是看这些视频(即使我还没有完成)! Gerrit的“使用力,路克”或使用J…

PHP涉及的所有英文单词

PHP涉及的所有英文单词拦路虎 PHP再火,也会让一部同学心生畏惧,因为看到编辑器中那一串串英文单词,担心自己英文不好,从而对能学会PHP的决心产生动摇。其实大可不必,英文在学习PHP过程中真的连级别都够不上&#xff0c…

java 不编译咋办_java – 为什么JVM不编译整个程序,而不是逐个编译?

他所说的是,在运行时将所有字节码编译成机器语言是不切实际的.您可以预先编译所有内容,但这并不是JIT所采用的方法.一方面,不知道程序有多大.人们在30分钟的启动时会相当不高兴,因为它编译了可以找到的每个库(给定的Java程序不在一个文件中,它可以访问类路径中的所有内容)对于另…

mysql .pdb是什么文件_计算广告算法到底要做什么?

这个话题在这个专栏开篇就该去讲。恰逢今天公司业务和财务培训(20190216)之后,也有一些思索,索性就都汇总写下来。本文杂述,不尽完备,但是值得不断完善。我喜欢一句话“革命不是请客吃饭,不是做文章,不是绘…

浅析inline-block--使用inline-block创建布局

inline-block前端程序猿们肯定不陌生,它是display属性的一个取值。 之所以称之为inline-block。是因为它兼具行内元素(inline-element)和块级元素(block-element)的特征。 块级元素(block elements),来源于CSS盒子模型。块级元素包含width h…

Cookie和Session版的登录验证

URL : from django.conf.urls import url from app01 import viewsurlpatterns [url(r^login/, views.login),url(r^home/, views.home),url(r^index/, views.index), ] 前端 : <form action"" method"post">{% csrf_token %}<input type"t…

Java 8 Friday Goodies:java.io终于成功了!

在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 我们已经写了一些关于Java 8好东西的博客 &#xff0c;现在我们觉得是时候开始一个新的博客系列了…

ASP.NET获取客户端、服务器端基础信息

1. 在ASP.NET中专用属性&#xff1a;获取服务器电脑名&#xff1a;Page.Server.ManchineName获取用户信息&#xff1a;Page.User获取客户端电脑名&#xff1a;Page.Request.UserHostName获取客户端电脑IP&#xff1a;Page.Request.UserHostAddress2. 在网络编程中的通用方法&am…

java json decode 中文_关于json_decode乱码及NULL的解决方法

写接口的同学应该会经常遇到数据格式的转换&#xff0c;这时候必不可少的两个函数就是json_encode()和json_decode()。这两个函数使用的时候有很多的主要事项&#xff0c;在这里我来说一下json_decode()。json_decode():对JSON 格式的字符串进行解码,接受一个JSON 格式的字符串…

syslog可能引起得问题_牙齿经常有问题?可能是这4个坏习惯引起的,要改正

很多人明明很年轻&#xff0c;却得了很多牙齿疾病&#xff0c;甚至到了换牙的地步。牙齿虽然是最为坚硬的身体器官&#xff0c;但是即使再坚硬也是容易受到伤害的&#xff0c;日常生活中有很多小事都会造成对牙齿的伤害&#xff0c;想要保护牙齿&#xff0c;一定要改正一下这几…

jq实现前端文件上传

FormData FormData是XMLHttpRequest Level 2 新增的一个接口。 使用FormData可以实现各种文件上传。 使用 // 创建FormData的实例 var formdata new FormData();// 用append()为实例添加键和值 formdata.append(键名, 键值); 注意 使用jq的$.ajax()方法来进行文件上传时&am…

使用JUnitParams进行参数化的JUnit测试

参数化的单元测试用于在不同条件下测试相同的代码。 借助参数化的单元测试&#xff0c;我们可以建立一种测试方法&#xff0c;该方法从某些数据源中检索数据。 该数据源可以是测试数据对象&#xff0c;外部文件甚至数据库的集合。 一般的想法是使使用相同的单元测试方法测试不同…

js webpack 解决跨域问题_webpack-dev-server 作代理解决跨域,让你的本地开发飞起来...

最近在接到一个需求是做一个可视化的监控系统&#xff0c;mock数据来开发的话实在不太方便&#xff0c;况且数据量之大。查了一下资料&#xff0c;可以用webpack-dev-server作为代理&#xff0c;直接请求线上&#xff0c;哈哈哈&#xff0c;是不是很方便。### 目前我用的是webp…

代码片段 欢迎补充 一起共享

python&#xff1a; https://github.com/Lj-github/pythonTool转载于:https://www.cnblogs.com/liujiang04/p/9787486.html

实现用户操作指引功能

主要是通过定位找到需要指引的目标元素&#xff0c;然后再在蒙版上画一个div&#xff0c;设置为白色&#xff0c;定位到目标元素位置。思路大概就是这样。 图一&#xff1a; ![](https://img2018.cnblogs.com/blog/1354858/201811/1354858-20181105141942044-1763163359.png) 图…

扩展Guava缓存溢出到磁盘

缓存使您可以轻松地显着加速应用程序。 Java平台的两种出色的缓存实现是Guava缓存和Ehcache 。 尽管Ehcache功能丰富得多&#xff08;例如其Searchable API &#xff0c;将缓存持久化到磁盘或溢出到大内存的可能性&#xff09;&#xff0c;但与Guava相比&#xff0c;它也带来了…

磁盘

我们现在计算机的瓶颈在磁盘上 CPU运算速率已达到5.0GHz 1GHz10亿次每秒&#xff08;计算速度&#xff09; 硬盘 MB 软盘——>碟片&#xff08;100MB&#xff09;——>芯片ssd&#xff08;500MB~2000MB&#xff09; 存储程序的方式&#xff1a; 磁盘与内存想比较 能够用…

java gson fromjson,Gson的fromJson()方法

Gson提供了fromJson()方法来实现从Json相关对象到java实体的方法。在日常应用中&#xff0c;我们一般都会碰到两种情况&#xff0c;转成单一实体对象和转换成对象列表或者其他结构。先来看第一种&#xff1a;比如json字符串为&#xff1a;[{“name”:”name0”,”age”:0}]Pers…

python文件的读取与写入_python中文件的读取与写入以及os模块

1.文件读取的三部曲&#xff1a;打开 ---> 操作 ----> 关闭r(默认参数)&#xff1a;-只能读&#xff0c;不能写-读取文件不存在 会报错FileNotFoundError: [Errno 2] No such file or directory: /tmp/westosw(д)-write only-文件不存在的时候&#xff0c;会自动创建新的…

vue2.0 element-ui中的el-select选择器无法显示选中的内容

我使用的是element-ui V2.2.3。代码如下&#xff0c;当我选择值得时候&#xff0c;el-select选择器无法显示选中的内容&#xff0c;但是能触发change方法&#xff0c;并且能输出选择的值。 select.vue文件 <template><div><div class"row" v-for&quo…