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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

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

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

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

来自苏格兰赫瑞瓦特大学数学与计算机科学学院的 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

—— 完 ——

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: 机器学习