机器学习项目必备:端到端机器学习项目开发过程的任务表
本文转载自公众号“读芯术”(ID:AI_Discovery)。
在创建具有重大意义的项目时,我会记录所有在其他人身上学到的以及自己在工作中领悟到的东西。这对我来说是必须的,因为需要处理一个项目中的许多内容(争论、准备、问题、模型、微调等等),这容易让人忘记一些事情。
任务列表能指导开发人员完成下一步,促使你检查每个任务是否已成功执行。有时候,我们很难找到出发点,任务表也可帮助开发人员从正确的来源中获取正确的信息(数据),以便建立关系并揭示相关的见解。
最好的做法是让项目的每一部分都经过检查。正如阿图·葛文德在其《清单革命》(The Checklist Manifesto)中所说:“我们所知事物的数量和其复杂性已经超过了我们能正确、安全、可靠地传达其优点的能力范畴。”
所以,看看这个简洁明了的项目任务表,它将帮你减少工作量,提高产出!
机器学习项目清单
在几乎每个机器学习项目中都必须执行8-10个步骤,其中一些步骤可以按顺序交替执行。
1. 从高层次的角度定义问题
为了理解和阐明问题的业务逻辑,任务表应该告知:
- 问题的性质(有监督/无监督、分类/回归)。
- 可开发的解决方案类型。
- 应该使用哪些指标来衡量性能?
- 机器学习是解决这个问题的正确方法吗?
- 人工解决问题的方法。
- 问题的固有假设。
2. 识别数据源并获取数据
在大多数情况下,如果拥有数据,并且希望定义相关问题以更好地利用传入的数据,可以在第一步之前执行此步骤。
基于问题的定义,我们需要确定数据的来源,可以是数据库、数据存储库、传感器等。对于要在生产中部署的应用程序,需通过开发数据管道来自动执行此步骤,以保持传入数据流入系统。
- 列出所需数据的来源和数量。
- 检查空间是否会成为一个问题。
- 检查你在使用数据上是否被授权。
- 获取数据并将其转换为可行的格式。
- 检查数据类型(文本、分类、数字、时间序列、图像)。
- 取一个样本用于最终测试。
图源:unsplash
3. 数据的初步探索
在这一步骤中会发现所有对研究结果、预测以及目标有影响的数据特征。如果你有一个巨大的数据块,在该步骤中对其进行抽样,使分析更易于管理。应遵循以下步骤:
- 使用jupyter notebook,因为它们为研究数据提供了一个简单直观的界面。
- 确定目标变量。
- 识别特征类型(分类、数字、文本等)。
- 分析特征之间的相关性。
- 添加一些数据可视化,以便于解释每个特征对目标变量的影响。
- 记录发现。
4. 探索性数据分析,以准备数据
是时候通过定义用于数据转换、清理、特征选择/设计和缩放的函数来执行前一步的发现了。
- 编写函数,以转换数据,自动化处理即将出现的大批量数据。
- 编写函数,以清理数据(输入缺失值和处理异常值)。
- 编写函数,以选择并设计特征——删除冗余的特征、特征的格式转换以及和其他数学转换。
- 特征缩放——标准化特征。
5. 开发一个基准模型并探索其他模型以筛选最佳模型
创建一个非常基础的模型,作为所有其他复杂机器学习模型的基线。按照以下步骤:
- 使用默认参数,训练一些常用的机器学习模型,如朴素贝叶斯、线性回归、支持向量机(SVM)等。
- 利用基线和其他模型,测量并比较每个模型的性能。
- 每个模型部署N折交叉验证(N-fold cross-validation),并计算N个折叠上性能指标的平均值和标准差。
- 研究对目标影响最大的特征。
- 分析模型在预测时出错的类型。
- 以不同的方式设计特征。
- 多次重复上述步骤(反复试验),确保以正确的格式使用正确的特征。
- 基于性能衡量标准列出最佳模型。
6. 微调入围模型,检查集成方法
这是关键步骤之一,在此步骤中将更接近最终解决方案。主要步骤应包括:
- 使用交叉验证进行超参数调整。
- 使用自动调整方法,如随机搜索或网格搜索,为最佳模型找到最佳配置。
- 测试集成方法,如投票分类器等。
- 用尽可能多的数据测试模型。
- 完成后,使用一开始抛之一侧的测试样本,来检查是否过拟合或欠拟合。
7. 记录代码并传达解决方案
沟通的过程是多方面的,请时刻牢记所有现有的和潜在的利益相关者。主要步骤包括:
- 记录代码以及整个项目的完成方法和过程。
- 创建一个简明的仪板或一个具有深刻见解的演示文稿,其应具有接近自我解释的可视化效果。
- 撰写博客/报告,记录如何分析特征、测试不同的转换等,记录学习成果(失败和有效的技巧)。
- 总结主要成果和未来蓝图(如有)。
8. 在生产中部署模型和监视器
如果项目需要在实时数据上测试部署,应该创建一个web应用程序或REST API,以便在所有平台(web、android、iOS)上使用。主要步骤(因项目而异)包括:
- 将最终训练的模型保存到h5或pickle文件中。
- 使用web服务为模型服务,可以使用Flask开发这些web服务。
- 连接输入数据源并设置ETL管道。
- 使用pipenv、docker/Kubernetes(基于扩展需求)管理依赖关系。
- 可以使用AWS、Azure或Google云平台来部署服务。
- 监控实时数据的性能,或让人们将你的模型与他们的数据一起使用。