微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将 git 用于数据科学/机器学习项目

如何解决如何将 git 用于数据科学/机器学习项目

我和我的三个同学参加了一个黑客马拉松,有 10 天的时间。我们获得了一个数据集,并且必须预测一个变量。但是,我想知道将 git 用于此类项目的最佳方法是什么。我们有两个主要目录modeldata。作为一个数据科学项目,需要大量的数据预处理。我们将 jupyter notebooks 用于数据清理和模型本身。我们如何在 git-repo-structure 方面有效地清理作为团队工作的数据?我不确定如何正确管理回购。每个人都应该有自己的分支吗?还是大家都在master分支上工作,推送更新的数据集和jupyter notebook是不是更方便?因为没有通常在主分支中的“运行系统”。我们正在对数据和模型进行大量试验。使用 git 甚至有意义吗?很抱歉这个混乱的问题

解决方法

根据我的经验,数据科学和软件开发从根本上是矛盾的。通常数据科学的需求会获胜,因为这些需求与业务需求直接相关,结果(如果你不小心的话)是混乱的、令人困惑的代码,没有人(包括你)可以遵循。

“数据科学”要求您提出很多问题,这意味着您要尽可能快地进行迭代。您编写的大部分代码不会给您想要的答案,因此您最终会得到一堆混乱的一次性脚本。有时很难知道您编写的脚本是否值得提交。

“软件开发”除了实际编写代码之外,还需要文档、规划、测试、重构以保持代码可读等。这需要您放慢速度,而“数据科学”不希望您这样做。显然,这是黑客马拉松,因此“规则”更加宽松,但它们的存在是为了更轻松地开发代码和团队合作,而您正在尝试这样做。

简短回答:是的,您应该使用 git。

在不了解您的项目的情况下,这里有一些更具体的提示:

  • 预先组织 git repo:为 data(用于数据集)、model(可能还有您正在尝试的每个模型的子目录)、{ {1}}(有关清理脚本,见下文),可能还有 cleaningplots,并尽可能将它们分开。如果一个模型因为您正在试验而有大量杂乱的脚本,那么至少可以包含这些噪音。这也让分工变得更加容易,一个目录 = 一项任务。
  • 对数据进行子集化:如果数据集很大,请使用一小部分(例如 10%)并用它进行所有初始开发,然后再进行扩展。 “大规模”是“任何足以让您等待很长时间才能运行的东西。”
  • 尽可能自动化数据清洗:编写一个清洗脚本,然后从模型脚本中调用清洗脚本。如果数据集很大并且脚本需要一个小时来清理,请将输出保存到存储库并提交,然后从模型脚本调用清理过的数据集。这样你就不需要区分一个巨大的 CSV 文件;所有信息都在清理脚本中。
  • 不要使用 jupyter notebooks(除非你真的想要/需要它们):我意识到有一些工具可以帮助 git 和 jupyter 和谐相处,但那些仍然复杂几个数量级比原始脚本。这也是 other reasons 为什么笔记本通常会使编写有组织的代码变得更加困难的原因。
  • 必要时保存模型:一些包会选择性地输出一个模型,您可以保存/提交并在未来加载,而无需再次训练。如果模型需要很长时间运行(在我看来超过几分钟),我只会这样做。否则它只会让 repo 更加混乱。
  • 使用虚拟环境:您没有提到您使用的是哪种语言,但在 Python(一个示例)的情况下,使用 outputpyenv(或您的最喜欢的,因为有几种方法可以做到这一点)。根据我的经验,许多“数据科学”包在更改版本时可能会变化无常(尤其是当您开始进行 GPU 计算和其他有趣的事情时),因此让团队坚持使用一个版本的运行时和相关包可以省去很多麻烦。
  • 不要忘记提交:看起来很明显,但是当您尝试回答问题并且您编写的大部分代码都会失败时,了解原因会有所帮助。人们很容易认为该项目会“保持足够小以至于你会记住”......但它不会。
,

MLOPS 中的概念也可能对您的情况有用;诸如用于数据版本控制的数据版本控制 (DVC) 和用于管理“ML 生命周期,包括实验、再现性、部署和中央模型注册表”的 MLFlow

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。