点击上方“AI遇见机器学习”,选择“星标”公众号

重磅干货,第一时间送达

丰色 发自 凹非寺
量子位 报道 | 公众号 QbitAI

还在学师阶段的研究生以及从业新手们,想在机器学习研究中少走弯路吗?

或许下面这篇论文可以帮到你:

《如何避免机器学习研究中的陷阱?一本给学术研究人员的指南》

作者是英国赫瑞-瓦特大学数学与计算机科学学院的副教授,同时也是爱丁堡机器人中心的成员,博士毕业已经十多年,这篇17页的论文主要介绍了机器学习学术研究中的一些常犯错误,以及如何避免。

指南共涵盖了机器学习过程的五大方面:建模前如何准备,如何建出可靠的模型,如何稳健地评估模型,如何公平地比较模型以及如何报告结果。

一位已经从业的机器学习研究员称赞该论文很有价值,因为文中提到的所有错误他在博士学习和工作期间中都遇到很多次。他准备让后面所有新入职的工程师都好好看看。

不少人则认为该指南的意见可能并不受欢迎,因为很多都是研究人员本该知道的基本常识,比如多次重复实验并报告平均值和方差进行严格比较,但他们就是为了方便或者让数据更好看而选择性忽视。

下面就详细看看作者都提了哪些常见错误。

建模前的准备

为了得到符合预期用途的模型、可以顺利发表论文的结果,建模之前你需要做好以下6点准备:

1、确保花时间研究你要用的数据集,来源可靠、质量有保证。

2、但不要查看测试数据,防止先入为主做出某些假设导致最终模型通用性差

3、保证数据量足够大,当然保证不了也是常有的事儿,解决办法:

比如评估模型时交叉验证数据、采用数据扩充技术(数据集中某类数据不够时也可采用)。

但总的来说,数据不够模型就不能设计得太复杂,不然分分钟给你过拟合。

4、要和相关领域专家谈谈,防止研究脱离实际,并且他们也可以帮助你向最合适的期刊/受众发表。

5、搜遍相关文献,虽然发现别人已经研究过了很沮丧,但是写论文时你该怎么解释为什么要覆盖相同的领域

6、一定要提前考虑模型部署的问题:大部分学术研究最终都是要落地吧?好好考虑落地场景的资源、时间限制等问题来设计模型。

如何建出可靠的模型

1、不要让测试数据参与到训练过程中(这点前面也已强调过)。

2、尝试不同的ML模型,别套用,具体问题具体分析找出最适合解决你的问题的那个。

“凑合”的例子包括将期望分类特征的模型应用于由数字特征组成的数据集、将假定变量之间没有依赖关系的模型应用于时间序列数据,或者只相信最新的模型(旧的不一定不合适)。

3、一定要优化模型的超参数。使用某种超参数优化策略比较好,这样在写论文时也好整。除了数据挖掘实践之外,可以使用AutoML技术优化模型及其超参数的配置。

4、在执行超参数优化和特征选择要小心:防止测试集“泄漏”,不要在模型训练开始之前对整个数据集进行特征选择。理想情况下应使用与训练模型所用数据完全相同的数据。

实现这一点的常用技术是嵌套交叉验证(也称为双交叉验证)。

如何稳健地评估模型

对模型进行不公平的评估,很容易让学术研究的水变浑浊

作者一共提了5点:

1、一个模型在训练集上的表现几乎毫无意义,保证测试集与训练集之间的独立

2、在连续迭代多个模型,用前面的数据指导下一个的配置时使用验证集,千万不要让测试集参与进来。可以根据验证集对模型进行测量:当分数开始下降时,停止训练,因为这表明模型开始过拟合。

3、对模型多次评估,防止低估/高估性能。十次交叉验证是最标准的做法,对很小的数据类进行层化也很重要;需要报告多个评估的平均值和标准偏差;也建议保留单个分数记录,以防以后使用统计测试来比较模型。

4、保留一些测试数据以无偏评估最终的模型实例

5、不要对不平衡的数据集使用准确度(accuracy)指标。这个指标常用于分类模型,不平衡数据集应采用kappa系数或马修斯相关系数(MCC)指标。

如何公平地比较模型

这是非常重要的一环,但很惊讶的是很多人都比不对,作者表示一定要确保在同一环境中评估不同的模型,探索多个视角,并正确使用统计测试。

1、一个更大的数字不意味着一个更好的模型。应将每个模型优化到同等程度,进行多次评估,然后使用统计测试确定性能差异是否显著。

2、要想让人相信你的模型好,一定要做统计测试

3、进行多重比较时进行校正:如果你以95%的置信水平做20个成对测试,其中一个可能会给你错误的答案。这被称为多重性效应。最常见的解决方法是Bonferroni校正

4、不要总是相信公共基准测试的结果

使用基准数据集来评估新的ML模型已变得司空见惯,你以为这会让结果更透明,实际上:

如果测试集的访问不受限,你没法确保别人没有在训练过程中使用它;被多次使用的公共测试集上的许多模型可能会与之过度匹配;最终都会导致结果乐观。

5、考虑组合模型。

如何报告结果

学术研究的目的不是自我膨胀,而是一个贡献知识的机会。为了有效地贡献你的想法,你需要提供研究的全貌,包括哪些有效哪些无效。

1、保持你所做所发现的成果透明,这会方便其他人更容易地在你的工作基础上扩展。共享你的代码也会让你在coding的时候更认真。

2、提供多个测试集上的报告,为每个数据集报告多个度量指标(如果你报告F值,请明确这是F1得分还是精度和召回率之间的其他平衡;如果报告AUC,请指出这是ROC曲线下的面积还是PR下的);

3、不要在结果之外泛化,不要夸大,意识到数据的局限性。

4、报告统计显著性时一定要小心:统计人员越来越多地认为,最好不要使用阈值,而只报告p值,让读者来解释这些值。

除了统计意义之外,另一件需要考虑的事是两个模型之间的差异是否真正重要。

5、最后,再回过头完整的看一眼你的模型,除了报告性能指标,看看它能解决多少实际问题。

以上就是所有的内容,作者表示,部分意见可能有争议,内文也并非详尽无遗,因此提供了很多参考链接供大家进一步参考。

另外理论总是落后于实践,我们今天认为正确的东西明天可能不正确,因此大家都要以开放的心态面对机器学习,紧跟最新技术进展,谦虚地接受新知识。

更多意见欢迎在评论区补充。

指南地址:
https://arxiv.org/abs/2108.02497

参考链接:
https://www.reddit.com/r/MachineLearning/comments/ozuphh/r_how_to_avoid_machine_learning_pitfalls_a_guide/

欢迎关注我们,看通俗干货

如何写一篇不水的机器学习论文?这17页指南从建模、评估到写报告,手把手教你...相关推荐

  1. 如何写一篇好的科研课题论文

    写一篇好的科研基金需要花费很大的精力,相信大家在这方面都有所疑惑,接下来我给大家讲解一下. 要点 1. 要写好科研课题论文,必须先养成读英文文章的习惯,争取每天 30-60 分钟.刚开始可以选择以读英 ...

  2. 如何写一篇人工智能领域的期刊论文(SCI论文的固定模式和一些套路)

    一.摘要(Abstract) 1.摘要通常按四个方面来顺序写 目的:研究的范围.目的性.重要性: 方法:研究了什么内容,用了什么东西,做了哪些事情, 结果:通过调研.实验.观察发现获得多种数据和结果, ...

  3. 写一篇关于5G网络的论文

    5G网络是近年来发展最迅速的新技术,它的应用越来越广泛,它不仅可以支持高速数据传输,而且还可以支持虚拟现实.自动驾驶等新技术.本文将从技术层面来分析5G网络的工作原理,以及它为人们提供的更多服务.首先 ...

  4. 软件测试用户故事评审实验报告,手把手教你写用户故事验收标准

    用户故事验收标准的定义 "验收标准"和"满足条件"交替使用,可以清晰的定义价值主张.用户流程或解决方案的特点. 验收标准可作为测试用例的催化剂,应该是可验证的, ...

  5. 吴恩达ex3_吴恩达机器学习 EX3 作业 第一部分多分类逻辑回归 手写数字

    1 多分类逻辑回归 逻辑回归主要用于分类,也可用于one-vs-all分类.如本练习中的数字分类,输入一个训练样本,输出结果可能为0-9共10个数字中的一个数字.一对多分类训练过程使用"一对 ...

  6. 写一篇关于《红楼梦》的论文,比较推荐的角度或者选题有哪些?

    如果老师要你写一篇关于红楼梦的论文,你却不知道写什么,不要慌!让我这个红楼迷来帮助你! 我第一次接触红楼梦是我的10岁生日时长辈们送的生日礼物.读第一遍的时候,年纪小的我因为不感兴趣迟迟没有完成阅读. ...

  7. hecto - 手把手教你写个 文本编辑器

    https://www.philippflenker.com/hecto/ 的阅读笔记. 我是学完[[Rust权威指南]] 之后才看的这个. 手把手教你写个 文本编辑器(1300+行代码). 作者是真 ...

  8. Android 开发之手把手教你写 ButterKnife 框架(三)

    系列文章目录导读: Android开发之手把手教你写ButterKnife框架(一) Android开发之手把手教你写ButterKnife框架(二) Android开发之手把手教你写ButterKn ...

  9. 一文搞定!手把手教你文字识别(识别篇:LSTM+CTC, CRNN, chineseocr方法)

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 文字识别是AI的一个重要应用场景,文字识别过程一般由图像输入.预处理.文本检测.文本识别.结果输出等环节组成.   其中,文本检测. ...

最新文章

  1. ABP官方文档翻译 6.1.2 MVC视图
  2. 《基于张量网络的机器学习入门》学习笔记1
  3. 《dinv into python》开始了解python
  4. python中random函数的使用方法 详解
  5. C++_编写动态链接库
  6. 计算机专业交互式教学课件制作,简易交互式课件的制作
  7. 任天堂如何通过旧技术赢得胜利
  8. Flutter支付宝授权登录
  9. 书籍推荐-docker入门书籍
  10. cesium中实现热力图
  11. 计算机管理 合并分区,硬盘分区进行合并 硬盘分区后怎么合并
  12. 移动通信的主要测量指标及注意事项(转)
  13. 从0基础学习Python(13)[面向对象思想]
  14. 同花顺_代码解析_技术指标_Z_2
  15. python血脉贲张的cosplay小姐姐图片
  16. 几种主流的mosfet驱动电路分析
  17. matlab 三维图 输出,MATLAB三维曲线图绘制并输出到指定文件夹(突出几组不同数据)...
  18. IntelliJ IDEA怎么创建package包下面的子包
  19. 计算机等级应用考试种类是什么,优·计算机等级考试分类练习题.doc
  20. 用互联网思维给DApp算个命

热门文章

  1. 【转载】mysql慢查询
  2. error MSB8008: 指定的平台工具集(v110)未安装或无效
  3. Guid和Int还有Double、Date的ToString方法的常见格式
  4. UVA 11054 Wine trading in Gergovia 葡萄酒交易 贪心+模拟
  5. poj - 1651 Multiplication Puzzle
  6. Lotus的书买回来了
  7. ADO.NET中连接池状态的跟踪
  8. 软件测试理论你知道多少?
  9. 我的世界java1.15.2光影_2.世界摄影简史
  10. 题目:查找数组中的重复数字,要求空间复杂度为O(1)(基于Java实现)