学术科研无从下手?27 条机器学习避坑指南,让你的论文发表少走弯路

news2024/11/17 10:45:52

内容一览:如果你刚接触机器学习不久,并且未来希望在该领域开展学术研究,那么这份为你量身打造的「避坑指南」可千万不要错过了。

关键词:机器学习 科研规范 学术研究

机器学习学术小白,如何优雅避坑坑、让自己的论文顺利发表?

来自苏格兰赫瑞瓦特大学数学与计算机科学学院的 Michael A. Lones 副教授,曾在 2021 年专门发表了一篇论文–「How to avoid machine learning pitfalls: a guide for academic researchers」, 对此进行了详细论述。

阅读完整论文 (V2):

Michael A. Lones 主要研究方向包括优化、机器学习
数据科学、复杂系统和非标准计算
以及在生物学、医学、机器人和安全问题中的应用
Michael A. Lones 主要研究方向包括优化、机器学习
数据科学、复杂系统和非标准计算
以及在生物学、医学、机器人和安全问题中的应用

在这篇论文中,作者从学术研究的视角出发,结合自己的科研经历及教学经验,收录了在使用机器学习技术的完整链路中,频繁出现、需要特别关注的 5 大问题,并提出了相应的解决办法。

适用人群:

对 ML 领域比较陌生,只具备基础 ML 知识的同学或学者

温馨提示:本文聚焦学术界普遍关注的问题,如:如何严格评估和比较模型,使得论文能顺利发表

接下来,我们将遵循 ML 模型训练的完整流程,分阶段展开叙述。

阶段 1:创建模型前

很多同学一上来就急着训练和评估模型,往往忽略了更重要的「做功课」,这些「功课」包括:

  • 项目的目标是什么
  • 实现这一目标,需要怎样的数据
  • 数据会不会有局限性,如果有如何解决
  • 这一领域的研发进展如何,已经做了什么

这些前置工作没有做好,光着急跑模型,那么最终很可能出现模型无法证明预期结论、科研工作无法发表等尴尬局面。

1.1 了解并分析数据

数据来源可靠、收集方法科学且数据质量高,会对论文发表大有裨益。这里需要注意,**被广泛使用的数据集不一定都质量好,也有可能是因为它容易获取。**选取数据前先进行一些探索性的数据分析,排除数据的局限性。

1.2 不要查看全部数据,开始前就把测试数据区分出来

测试集的信息泄漏到训练过程,是机器学习模型不能泛化的一个常见原因。 为此,数据探索性分析阶段,不要过于细致地查看测试数据,避免有意或无意地做出无法测试的假设,限制模型的通用性。

温馨提示:做出假设是可以的,但是这些假设应该只被纳入模型的训练 (training) 中,而非测试 (testing) 中。

1.3 准备充足的数据

数据不够可能降低模型的概括性和通用性,这取决于数据集的信噪比 (Signal-to-Noise Ratio, SNR)。在机器学习研究领域中,一个常见的问题是数据量不够,这时可以通过交叉验证、数据增强等技术,提高现有数据的可用性。

1.4 积极向该领域专家请教

领域专家具备丰富的科研经验,可以帮助我们明确需要解决的问题、最合适的特征集和机器学习模型,以及指导我们研究成果的发布, 起到事半功倍的效果。

1.5 做好文献调研

学术进步是一个迭代的过程,每一项研究都提供了可以指导下一项研究的信息。 **忽视以前的研究,很可能会让自己错过有价值的信息。**与其写论文的时候,才绞尽脑汁地解释为什么研究同样的课题、为什么不在现有的成果上开始研究,不如在开始工作前就做一个文献综述。

1.6 提前思考模型的部署问题

如果学术研究的最终目标,是创建一个可以在现实世界中部署的机器学习模型,则需要尽早考虑部署问题, 如环境限制对模型复杂度的影响、是否有时间限制、如何与软件系统结合等等。

阶段 2:可靠地创建模型

以一种有组织的方式创建模型非常重要,这使我们可以正确地使用数据,并充分考虑模型的选择。

2.1 测试数据不能参与到模型训练过程中

一但测试数据参与到了模型的配置、训练或选择中,会极大影响数据的可靠性和通用性,这也是已发布的机器学习模型经常不能通用于现实世界数据的一个常见原因。

❎ 错误示例(注意规避):

  • 数据准备期间,用整个数据集变量的均值和范围信息进行 variable scaling(正确做法是只在训练数据中进行)

  • 在分割数据之前进行特征选择

  • 使用相同的测试数据评估多个模型的通用性

  • 在分割测试数据之前应用数据增强

为了避免以上问题出现,最好的办法就是在项目开始前,就划分出一个数据子集, 并且在项目结束时只使用这个独立的测试集来测试单一模型的通用性。

温馨提示:时间序列数据的处理要特别小心,因为数据的随机拆分很容易造成泄漏和过拟合。

2.2 尝试多个不同模型

世界上不存在放之四海皆通用的机器学习模型,我们的研究工作就是要找到适用于特定问题的机器学习模型。Python、R、Julia 等现代机器学习库, 只需对代码进行少量修改,就可以尝试多种模型,找到最有效的模型。

温馨提示:

  • 不要使用不合适的模型,使用验证集而非测试集来评估模型
  • 比较模型时,要优化模型的超参数,并进行多次评估,并在发布结果时纠正多重比较。

2.3 不要使用不合适的模型

现代机器学习库降低了机器学习的实施门槛,同时也使得我们很容易选用不合适的模型,如将适用于 categorical feature 的模型应用于包含 numerical feature 的数据集,或者在该使用回归模型的时候使用分类模型。在选择模型时,应尽可能选用适合用例的模型。

2.4 深度学习有些时候并不是最优解

虽然深度神经网络 (DNN) 在某些任务上表现出色,但并不意味着 DNN 适用于所有问题, 尤其是当数据有限、 underlying pattern 相当简单,或模型需要可解释的时候,DNN 的表现可能并不如某些 old fashioned 机器学习模型,如随机森林、SVM。

2.5 优化模型的超参数

超参数对模型的性能影响巨大,且通常需要与特定数据集相匹配。无目的地进行测试,可能并不是找到合适超参数的最佳方法。推荐使用超参数优化策略,如 random search 和 grid search。

温馨提示:对于超参数数量巨大或训练成本较高的模型而言,这些策略并不适用,可以借助 AutoML、数据挖掘 pipeline 等技术来优化模型的选择及其超参数。

2.6 优化超参数及选择 feature 时需要额外细心

超参数优化和特征选择是模型训练的一部分,不要在模型训练开始前,对整个数据集进行特征选择,这会使得信息从测试集泄露到训练过程中。优化模型的超参数或特征,最好使用与训练模型完全相同的数据,一种常见的技术是嵌套交叉验证(也称双重交叉验证。

阶段 3:稳健地评估模型

不合理的模型评估非常普遍,这会阻碍学术研究的进展。因此,需要谨慎思考如何在实验中使用数据、衡量模型的真实性能并进行报告。

3.1 使用恰当的测试集

使用测试集来衡量机器学习模型的通用性,并确保测试集的数据是合适的。 测试集不应与训练集重叠,且需要涵盖更广泛的条件,如一个物体的摄影数据集,如果训练集和测试集都是在晴天的室外收集的,测试集就不是独立的,因为没有捕捉到更广泛的天气条件。

3.2 分割数据前不要进行数据增强

数据增强有利于平衡数据集和提高机器学习模型的通用性和稳健性,需要注意的是数据增强应该只应用于训练集,不涉及测试集,以防出现过拟合。

3.3 使用验证集

使用一个单独的验证集来衡量模型性能,这包含一组不直接用于训练,而是用于指导训练的样本。验证集的另一个好处是可以进行 early stopping。

3.4 对模型进行多次评估

模型的单一评估并不可靠,可能低估或高估了模型的真正性能, 为此,需要对模型进行多次评估,大多涉及到使用不同的训练数据子集对模型进行多次训练。交叉验证 (Cross-Validation) 是一种特别流行且种类众多的方法,如 Ten-fold Cross-Validation。

温馨提示:报告多次评估的均值和标准差的同时,建议保留单个分数记录,以备后续使用统计检验 (statistical tests) 对模型进行比较。

3.5 保留一些数据来评估最终的模型实例

对模型实例的通用性进行可靠评估的最佳方法,可能就是使用另一个测试集。 所以,如果数据量足够大,最好先保留一些,并用其对最终选定的模型实例进行无偏差 (unbisded) 的评估。

3.6 不要对非平衡数据集使用准确率

谨慎选择评估机器学习模型的指标,例如,分类模型最常用的指标是准确率 (accuracy),如果是平衡数据集(每个类别在数据集中都有类似数量的样本代表)效果就会很好;如果是非平衡数据集,准确率则可能是一个非常具有误导性的指标。

在这种情况下,最好使用 F1 score、科恩卡帕系数 (κ) 或马修斯相关系数 (MCC) 等对 class size imbalance 不敏感的指标。

阶段 4:公平地比较模型

对模型进行比较是学术研究的基础,但如果以不公平的方式进行比较,并且发表,就会带偏其他研究人员。所以,需要确保在同一条件下评估不同模型,并正确使用统计检验 (statistical tests)。

4.1 对于模型而言,并不是数字越高性能越好

论文中常出现这种表述「此前研究中的准确率是 94%,本文模型准确率高达 95%,因此更好」。各种原因表明,更高的数字不等同于更好的模型, 如果模型是在同一个数据集的不同分区上训练或评估的,可能性能差异教小;如果是用了完全不同的数据集则可能性能差异巨大。没有进行相同数量的超参数优化也会影响模型性能差异。

因此,要想对两个模型科学地进行性能比较,应该将模型优化到相同程度,并进行多次评估,然后用统计测试的方法确定性能差异是否显著。

4.2 用统计检验比较模型

推荐用统计检验 (statistical tests) 比较两个模型的性能差异。广义上讲,比较机器学习模型的 test 分为两类:第一类用于比较同类模型实例, 如比较两个训练好的决策树时,可以选用 McNemar 检验;第二类适用于更通用的模型比较, 如比较决策树和神经网络哪个更适合时,选用曼-惠特尼 U 检验。

4.3 对多重比较进行校正

用统计检验比较两个以上模型有些复杂,multiple pairwise test 类似多次使用测试集,这可能导致对显著性 (significance) 过于乐观 (overly-optimistic) 的解释。

推荐使用多重检验 (multiple test) 校正来解决这个问题,如邦费罗尼校正 (Bonferroni correction)。

4.4 不要过于相信社区基准的结果

对于某些领域的问题,很多人会选用基准数据集来评估新机器学习模型的性能,因为大家都是使用相同的数据来训练和测试模型,那么比较起来就会更加直观。这种方法有一些主要缺点。

首先,如果测试集的访问不受限,则不能保证别人没有把它作为训练过程的一部分,这会导致对于结果的过度乐观。此外,即使每个使用数据的人只使用了一次测试集,但总体而言,测试集被社区使用了很多次,这也会导致模型过拟合的发生。为此,应该谨慎地解读基准数据集的结果,对性能的提高进行合理研判。

阶段 5:报告结果

学术研究需要对知识有贡献,这要求报告研究工作的整体情况,包括哪些工作成功、哪些失败。 机器学习通常和 trade-offs 相关,一个模型在所有方面都比另一个模型好是很少见的。所以在报告结果时需要体现这一点。

5.1 报告需要透明

把所有研究工作都透明地分享出来, 这利于其他人重复这项实验,也方便人们比较模型。清晰地记录实验及写出整洁的代码,对自己和他人都有好处。机器学习社区越来越注重实验的可复现,工作流程记录不充分,可能会影响后续发表。

5.2 多种方式报告性能

在评估模型性能时,一个更严谨的方法是使用多个数据集, 这能帮助克服与单个数据集相关的任何缺陷,并给出模型性能的全面描述。为每个数据集报告多个指标是很好的做法,因为不同指标能呈现不同的结果,增加工作的透明度。

5.3 只针对数据进行归纳

不要提出无效结论,这会把其他研究人员带入歧途。一个常见的错误是,发表训练和评估模型的数据不支持的概括结论。模型在一个数据集上表现很好,不意味着在其他数据集上也做得好。虽然可以通过使用多个数据集获得可靠的 insights,但从实验中研究和推断出的东西总是有限的。不要夸大发现,意识到局限性。

5.4 谨慎报告显著性差异

上文探讨的统计检验,可以帮助检验模型间的差异。但统计检验并不完美,可能会低估或高估模型的显著性,出现假阳或假阴的问题。此外越来越多的统计学家主张放弃使用置信度阈值 (confidence threshold)、直接报告 p 值来测定模型显著性。

除了统计显著性,另一个要考虑的问题,是两个模型间的差异是否真的重要。因为只要样本足够,总是能找到显著的差异,哪怕实际性能差异微乎其微。所以在判断重要性时,可以衡量效应值 (effect size),方法包括 Cohen’s d statistic(更普遍)、Kolmogorov Smirnov(效果更好,推荐)等。

5.5 关注模型运行原理

训练过的模型包含众多有效信息,但很多作者只报告模型的性能指标,对模型原理不作解释。 研究的目的不是获得比别人稍高的准确率,而是总结知识并分享给研究社区,进而增加工作成果发表的可能性,如,对于决策树一类的简单模型,提供模型可视化;对于深度神经网络一类的复杂模型,考虑使用 XAI(可解释人工智能)技术提取相关信息。

以上就是「避坑指南」的完整内容,期待每位刚接触机器学习的同学,都能收好这份宝典、常读常新,顺利找到研究方向、选好课题,并早日顺利发表论文!

期待各位的好消息~

原文链接
参考链接:[How to avoid machine learning pitfalls: a guide for academic researchers]
https://arxiv.org/pdf/2108.02497.pdf

—— 完 ——

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

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

相关文章

力扣sql简单篇练习(九)

力扣sql简单篇练习(九) 1 合作过至少三次的演员和导演 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT actor_id,director_id FROM ActorDirector GROUP BY actor_id,director_id HAVING count(timestamp)>31.3 运行截图 2 患某种疾病的患…

结构体内存对齐;内存优化

结构体需要根据数据类型进行内存对齐。 所有数据类型占据空间的大小,一定是它基础类型的倍数。 首先按照最大的数据类型格式来作为最小分割单元。 最大整数倍 struct stu {char gender;unsigned int age; }student1;int main() {printf("sizeof this struct i…

SpringCloud Config分布式配置中心

目录 一、概述 二、Config服务端配置与测试 配置读取规则 三、Config客户端配置与测试 bootstrasp.yml 四、Config客户端之动态刷新 一、概述 官网:Spring Cloud Config 微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对…

【Java】IDEA调试线上服务

目录IEDA打开线上服务对应的代码,Edit Configuration创建与远程服务的连接复制黄匡生成的参数,添加到服务器启动命令中服务器的服务重新启动,并注意调试端口5005是否被防火墙拦截本地IDEA启动,控制台打印如图即成功代码上加断点&a…

Linux做选择题时的要点

1.线程独有:栈,寄存器,信号屏蔽字,errno...等信息,因此各个线程各自有各自的栈区,但是堆区共用。 2.用户态线程的切换在用户态实现,不需要内核支持。 3.每个线程在进程虚拟地址空间中会分配拥…

部署在Docker中的iServer进行服务迁移

目录前言一:备份与恢复1.备份2.恢复二:迁移配置文件作者:kxj 前言 Linux 容器虚拟技术(LXC,Linux Container)是一种轻量级的虚拟化手段,它利用内核虚拟化技术提供轻量级的虚拟化,来…

【八大数据排序法】希尔排序法的图形理解和案例实现 | C++

第十七章 希尔排序法 目录 第十七章 希尔排序法 ●前言 ●认识排序 ●一、希尔排序法是什么? 1.简要介绍 2.图形理解 3.算法分析 ●二、案例实现 1.案例一 ●总结 前言 排序算法是我们在程序设计中经常见到和使用的一种算法,它主要是将一…

C++引用(特性+使用场景+常引用)

文章目录1. 概念2. 关于别名的理解3. 引用的特性1.引用必须在定义时初始化2.一个变量可以有多个别名3.引用一旦引用一个实体,再不能引用其他实体4.使用场景1. 引用做参数2. 引用做返回值1. 传值返回是否为n直接返回临时变量作为返回值2. 传引用返回编译器傻瓜式判断…

11、循环语句

目录 一、while语句 二、do…while语句 三、for语句 一、while语句 使用while语句可以执行循环结构,其一般形式如下: while语句的执行流程图: while语句首先检验一个条件,也就是括号中的表达式。当条件为真时,就执…

跟同事杠上了,用雪花算法生成的id做主键对MySQL性能有影响?

公司最近开发了一个新项目,设计表时由于有些字段需要对外展示,所以使用了雪花算法生成的id做主键。 不过有位同事对此提出了异议,认为雪花算法生成的id不是顺序递增的,会对MySQL的性能造成影响。 经过交流,发现持有这…

【Linux 系统运维基础】Linux目录 以及重要配置文件

Linux目录 以及重要配置文件 文本讲述了Linux中目录含义 以及我们工作中常用到的路径 1. 目录含义 2. 常用路径地址 2.1 网卡配置文件 /etc/sysconfig/network-scripts但是网卡的名称是有区别的,使用不同服务器生产商的名称是不同的。如下图: 网卡配置…

Window10下FFMPEG的安装与使用

文章目录一.FFMPEG介绍FFMPEG组成二.Windows10下FFMPEG安装三.FFMPEG的使用1.关键指令一.FFMPEG介绍 FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它…

字节前端面试题目2

1.为什么通常在发送数据埋点请求的时候使用的是 1x1 像素的透明 gif 图片? 1. 没有跨域问题,一般这种上报数据,代码要写通用的;(排除 ajax) 2. 不会阻塞页面加载,影响用户的体验,只…

基于SSM的图书购物商城设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

【C++】三大特性之继承

目录 一、继承的概念及定义 1.继承的概念 2. 继承定义 2.1定义格式 2.2继承关系和访问限定符 2.3继承基类成员访问方式的变化 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、友元与继承 六、继承与静态成员 七、复杂的菱形继承及菱…

机器学习中的数学原理——线性不可分

这个专栏主要是用来分享一下我在 机器学习中的 学习笔记及一些感悟,也希望对你的学习有帮助哦!感兴趣的小伙伴欢迎 私信或者评论区留言!这一篇就更新一下《 白话机器学习中的数学——线性不可分》! 目录 一、什么是线性不可分 二…

用125行C语言编写一个简单的16位虚拟机

改博文用图文代码的方式详细描述了实现的具体过程,包含每一条指令的含义。 虚拟机 在计算领域,VM(虚拟机)是一个术语,指的是模拟/虚拟化计算机系统/架构的系统。 从广义上讲,有两类虚拟机: 系统…

每日一练11——最近公共祖先求最大连续bit数

文章目录最近公共祖先思路:代码:求最大连续bit数思路:代码:最近公共祖先 题目链接 思路: 题目所描述的满二叉树如下: 上述树中子节点与父节点之间的关系为root child / 2 所以如果a ! b&a…

递归算法整理

一、概述:递归算法是一种直接或者间接调用自身函数或者方法的算法。说简单了就是程序自身的调用。类似于数列,通过前几项的值推出后几项 二、递归算法的使用条件1.大问题可以拆分为若干小问题2.原问题与子问题除数据规模不同,求解思路完全相同…

自助Active Directory组订阅

在任何基于Windows的企业的身份与访问管理(IAM)战略中,Active Directory组扮演了至关重要的角色,因为它们用来控制对几个资源(包括电子邮件通讯组)的用户访问。反复地添加用户到组中和从组中移除用户构成了IT管理员工作的有机组成…