互联网资讯 / 人工智能 · 2023年10月27日 0

ML项目中的琐碎任务处理自查清单

在机器学习项目中,涉及多个因素,如数据处理和模型优化。开发者常常会感到困惑,甚至漏掉一些重要环节。为此,这里提供一份任务清单供参考。

任何科研项目都是系统性的,机器学习项目也不例外,涵盖了众多要素与组件,如讨论、准备工作、问题提出、模型构建及优化调整等。因此,开发者容易遗漏关键环节。

在这种情况下,编制一份详尽的任务清单显得尤为重要。有时,开发者可能难以找到良好的起点,而任务清单能帮助他们从可靠的信息源中提取有用数据并建立联系,从而获得深刻见解。

此外,还需对项目中的每项任务进行规划检查,以确保任务完成度。

正如 Atul Gawande 在其著作《清单宣言:如何把事情做对》中所言:

我们所了解的事物数量和复杂度已经超出了我们从中正确、安全或可靠获益的能力。

本文中,网页和数据科学讲师 HaRshIT Tyagi 将以端到端机器学习项目为例,列出常见任务清单。

ML项目中的琐碎任务处理自查清单

接下来,让我们看看 HaRshIT Tyagi 如何逐步创建自己的机器学习项目任务清单。

八步完成 ML 项目检查清单

几乎每个机器学习项目都需执行 8-10 个步骤,其中某些步骤的顺序可以互换。

步骤 1:从高层次定义问题

此步骤旨在明确问题的业务逻辑。你应该了解:

问题的性质(有监督的/无监督的,分类问题/回归问题)。

可以开发的方案类型。

应使用的性能指标。

机器学习是否是解决该问题的正确方法。

手动解决该问题的方法。

该问题的固有假设。

步骤 2:确定数据源并获取数据

通常情况下,如果你已经准备好数据并希望定义与之相关的问题,可以先于步骤 1 执行此步骤。

根据问题定义,确定哪些数据源可以作为数据库或传感器。对于生产应用的部署,这一步应通过开发数据 pipeline 实现自动化,确保输入数据能够流入系统。

具体步骤如下:

列出所需的数据源及数据量;

检查存储空间是否充足;

确认是否有权限使用这些数据;

获取数据并转换为可用格式;

检查数据类型,通常包括文本、分类、数值、时序和图像数据;

保留样本以备最终测试。

步骤 3:初步探索数据

在此步骤中,你需要研究所有影响项目结果/预测/目标的特征。如果数据量较大,可以对数据进行采样以便更易管理。具体步骤如下:

使用 Jupyter Notebook,因为它为数据研究提供了简单直观的界面;

确定目标变量;

明确特征类型(分类、数值、文本等);

分析特征之间的关系;

添加可视化数据,以便更容易解释每个特征对目标变量的影响;

记录你的发现。

步骤 4:探索性数据分析以准备数据

在此步骤中,通过定义数据转换、数据清理、特征选择/工程和扩展的函数来处理前一步的发现。具体如下:

编写数据转换函数,自动处理下一批输入数据;

编写数据清理函数(估算缺失值并处理异常值);

编写选择和工程化特征的函数,包括删除冗余特征、特征格式化及其他数学变换;

特征扩展——标准化特征。

步骤 5:开发基线模型并探索其他模型以选择最佳模型

创建一个基础模型,为其他复杂机器学习模型提供基线。具体步骤如下:

使用默认参数训练一些常用的机器学习模型,如朴素贝叶斯、线性回归、支持向量机(SVM)等;

度量并比较每种模型的性能;

对每个模型进行 N 倍交叉验证,并在 N 倍的基础上计算性能指标的均值和标准差;

研究对目标影响最大的特征;

分析模型在预测过程中出现的错误类型;

用不同方式对特征进行工程化;

重复上述步骤几次,以确保使用正确的特征和格式;

选择基于性能指标的最佳模型。

步骤 6:优化选出的模型并检查相关方法

这是接近最终解决方案的关键步骤之一,具体步骤如下:

用交叉验证优化超参数;

使用随机搜索或网格搜索等自动调整方法找出最佳模型的最佳配置;

测试相关方法,如集成学习等;

使用尽可能多的数据测试模型;

最终确定后,使用开始时保留的未见过测试样本检查模型是否存在过拟合或欠拟合。

步骤 7:保存代码并交流你的方案

交流是提升性能的过程。你需要考虑所有现有或潜在的利益相关者。主要步骤如下:

保存代码并记录整个项目过程及使用的方法;

创建仪表板,如 Voila 或具有自解释可视化的有效演示;

撰写一篇描述特征分析、数据转换测试等的文章/报告,记录学习过程,包括失败经验和有效技术方法;

总结主要结果并规划未来设想(如有)。

步骤 8:将模型投入生产并监测其表现

如果项目需在实时数据上进行测试,应该创建可在所有平台(web、Android、iOS)上使用的网页版应用或 REST API。主要步骤如下:

在 h5 或 pickle 文件中保存最终训练模型;

提供网页版模型应用,使用 Flask 开发网页服务;

关联输入数据源并设置 ETL 路径;

根据扩展需求,使用 pipenv、Docker/Kubernetes 管理依赖;

可以使用亚马逊、Azure 或谷歌云平台部署服务;

在实时数据上监测性能,便于用户轻松使用自己的数据。

最后,在创建任务清单时,应注意根据项目的复杂程度实时调整清单。