对于机器学习项目而言,项目布局至关重要,就像对于软件开发项目一样。我认为这就像语言。项目布局可以组织思路,并为您提供想法的背景,就像知道事物的名称一样,为您提供思考的基础。
在这篇文章中,我想重点介绍布局和管理您的机器学习项目的一些考虑因素。这与项目和科学可重现性的目标非常相关。没有“最佳”方法,您需要选择并采用最符合您的偏好和项目要求的实践。
工作流程的驱动问题
Jeromy Anglim 于 2010 年在墨尔本 R 用户组上就 R 的项目布局发表了演讲。视频有点晃动,但对这个主题进行了很好的讨论。
我非常喜欢 Jeromy 演讲中的驱动问题
- 将项目划分为文件和文件夹?
- 将 R 分析纳入报告?
- 将默认 R 输出转换为高质量的表格、图形和文本?
- 构建最终产品?
- 对分析进行排序?
- 将代码划分为函数?
您可以在Jeromy 的博客上查看演讲摘要,PDF 演示幻灯片以及YouTube 上的演讲视频。
项目工作流的目标
David Smith 在题为《R 的工作流程》的文章中总结了他认为的良好项目工作流的目标。我认为这些都非常出色,在设计您自己的项目布局时应该牢记在心。
- 透明性:项目布局逻辑清晰,对读者来说直观易懂。
- 可维护性:使用标准的文件和目录名称,易于修改项目。
- 模块化:将离散任务分成单独的脚本,每个脚本只负责一项功能。
- 可移植性:易于将项目迁移到其他系统(相对路径和已知依赖项)。
- 可重现性:您在未来或其他人可以轻松运行并创建相同的工件。
- 效率:在元项目细节(如工具)上花费的思考更少,而将更多精力投入到您正在解决的问题上。
ProjectTemplate
John Myles White 有一个名为ProjectTemplate的 R 项目,旨在为统计分析项目自动创建一个定义良好的布局。它提供了用于自动加载和清理数据的约定和实用程序。
ProjectTemplate 的标志,一个用于布局您的 R 统计分析项目的项目。
该项目的布局比我想要的要大,但它为组织项目提供了一种高度结构化的方式。
- cache:预处理后的数据集,无需在每次进行分析时重新生成。
- config:项目的配置设置。
- data:原始数据文件。
- munge:预处理数据清理代码,其输出放入 cache。
- src:统计分析脚本。
- diagnostics:用于诊断数据集损坏或异常值的脚本。
- doc:关于分析的文档。
- graphs:从分析生成的图形。
- lib:辅助库函数,但不是核心统计分析。
- logs:脚本的输出和任何自动日志记录。
- profiling:用于基准测试代码执行时间的脚本。
- reports:输出报告和可能包含在报告中的内容,例如表格。
- tests:代码的单元测试和回归套件。
- README:用于向新项目参与者介绍项目的说明。
- TODO:您计划进行的未来改进和错误修复列表。
您可以在ProjectTemplate 主页、John 网站上的博客文章、用于开发的GitHub 页面以及用于分发的CRAN 页面上了解更多信息。
数据管理
Software Carpentry 提供了一个简短的演示文稿,题为“数据管理”。数据管理的方法受到了 William Stafford Noble 题为《计算生物学项目组织快速指南》的文章的启发。
该演示文稿描述了在磁盘或版本控制中维护多个数据版本的问题。它指出了数据归档的主要要求,并提出了一种使用带日期目录名和数据文件元数据文件(这些文件本身在版本控制中进行管理)的方法。这是一种有趣的方法。
您可以在此处查看演示文稿的视频和幻灯片。
最佳实践
在问答网站上有很多关于数据分析项目项目布局和代码组织最佳实践的讨论。例如,一些流行的例子包括
一个很好的例子是关于“如何高效管理统计分析项目?”的问题,该问题已成为一个社区维基,其中描述了最佳实践。总而言之,这些实践分为以下几部分
- 数据管理:使用目录结构,切勿直接修改原始数据,检查数据一致性,使用 GNU make。
- 编码:将代码组织成功能单元,记录所有内容,将自定义函数放在专用文件中。
- 分析:记录随机种子,将参数分离到配置文件中,使用多元图。
- 版本控制:使用版本控制,备份所有内容,使用问题跟踪器。
- 编辑/报告:结合代码和报告,并使用正式的报告生成器。
更多实践
我试图在每个项目中优化我的项目布局。这很困难,因为项目因数据和目标而异,语言和工具也各不相同。我尝试过所有编译代码和所有脚本语言版本。我发现的一些好技巧包括
- 遵循POSIX 文件系统布局(var、etc、bin、lib 等)。
- 将所有命令放入脚本。
- 通过 GNU make 目标调用所有脚本。
- 设置创建环境并下载公共数据集的 make 目标。
- 创建配方,让基础设施在每次运行时检查并创建任何缺失的输出产品。
最后这一点改变了游戏规则。它允许您对工作流程进行流水线化,并为数据分析、预处理、模型配置、特征选择等任务随意定义配方。该框架知道如何执行配方,并为您生成结果以供审查。我以前谈过这种方法。
您如何布局和组织您的机器学习项目?请留下您的评论。
你好,
我被分配了我们组织里的一个机器学习项目。但我对机器学习一无所知。这个项目的主要目标是,我们需要生成与我们组织相关的报告,例如,当前和未来的公司标准、员工招聘状况等。
他给了我需要学习的不同技术,例如:机器学习、大数据、NLP、数据可视化……。
现在我需要理清所有这些技术是如何集成的,以及它们的流程。我的意思是,哪种技术先出现,哪种后出现,依此类推。
我希望能在论坛上或通过我的电子邮件收到回复。
谢谢你
这个流程可能有助于您解决问题。
https://machinelearning.org.cn/start-here/#process
感谢分享!尽管我还在开发一个框架或方法来应对新的机器学习项目,但一个对我帮助很大的做法是,每天记录我执行的活动、我尝试过的事情以及我获得的结果。我过去发现自己一遍又一遍地重复相同的步骤,这当然是宝贵时间的巨大浪费。
很好。很像这样
https://machinelearning.org.cn/plan-run-machine-learning-experiments-systematically/
感谢 Jason 的分享。
你能否详细说明一下“设置创建环境并下载公共数据集的 make 目标”这一点?
我的意思是(在 makefile 中)“make”目标,它将下载/安装所需的库,以及下载数据集的其他目标。
这有帮助吗?
感谢分享!
我正在寻求一些帮助。如果我们使用卷积神经网络进行特征提取,使用决策树进行分类,并且该项目在后期和应用中显示出预测能力的逐渐下降,我们应该如何维护该项目?我希望得到回复。非常感谢。
问题究竟是什么?
你好
感谢分享宝贵的知识。
我正在做一个 ML 项目(基本上是我的大四专业项目),通过摄像头捕捉的人脸进行性别识别。我已经完成了编码部分,但我不知道如何展示它。是选择网页还是 Web 应用,还是您建议的任何其他方式?
也许展示的细节并不重要?