为了让我们的工作能够更顺利地进行下去,工作计划、工作进程、任务清单等都是我们的辅助工具,如果没有这些,我们的工作将难以推进。机器学习也是如此,任何一个机器学习项目,都离不开任务清单,让每个人都知道该做什么事,什么时候完成,我们需要处理项目中的许多事情(例如准备工作、可能出现的问题、模型创建、模型微调等等)。
在本文中,我列出来的几个步骤,可以帮助大家完成机器学习项目,并检查每个任务是否已成功执行。
正如阿图尔·加万德在他的书《清单宣言》中所说,
我们所知东西的数量和复杂性已经超过了我们个人正确、安全或可靠地提供其收益的能力。
下面这份简洁明了的项目行动任务清单将减少你的工作量,提高你的产出。
每个ML项目中,我们都要执行8-10个步骤。其中有一些步骤可以按顺序交替执行。
1、从高层次的角度定义问题
这是为了理解和阐明问题的业务逻辑。它应该告诉你:
- 问题的性质(有监督/无监督、分类/回归)
- 可开发的解决方案类型
- 应该使用什么指标来衡量绩效?
- 机器学习是解决这个问题的正确方法吗?
- 手动解决问题的方法
- 问题的内在假设
2、识别数据源并获取数据
在这一步中,我们可以先用这个步骤来定义问题。
根据问题的定义,我们需要确定数据的来源,可以是数据库、数据存储库、审查程序等。对于要在生产中部署的应用程序,应通过开发数据管道来自动执行此步骤,以保持传入数据流入系统。
- 列出所需数据的来源和数量。
- 检查空间是否会成为一个问题。
- 检查你是否有权将数据用于个人目的。
- 获取数据并将其转换为可操作的格式。
- 检查数据类型(文本、分类、数字、时间序列、图像)
- 取一个样品做最后的测试。
3、数据的初步探索
这是你研究影响结果/预测/目标的所有特征的步骤。如果你有一个庞大的数据库,在这个步骤中对它进行抽样,使分析更易于管理。
应遵循的步骤:
- 使用 jupyter notebooks,因为它们提供了一个简单直观的界面来研究数据。
- 确定目标变量
- 识别特征类型(分类、数字、文本等)
- 分析特征之间的相关性。
- 添加一些数据可视化,以便于解释每个特性对目标变量的影响。
- 记录发现。
4、探索性数据分析以便准备数据
接下来,我们将通过定义数据转换、清理、特征选择/工程和缩放功能来执行上一步的发现。
- 编写函数来转换数据并自动处理即将到来的数据批处理过程。
- 编写清除数据的函数(输入缺失值并处理异常值)
- 编写函数来选择和设计功能-删除冗余功能、功能的格式转换和其他数学转换。
- 特征缩放-标准化功能。
5、开发基准模型,然后探索其他模型以便筛选出最佳模型
创建一个非常基本的模型,作为其他复杂机器学习模型的基准。主要步骤包括:
- 使用默认参数训练一些常用的机器学习模型,如naivebayes、线性回归、SVM等。
- 测量并比较每个模型与基线和所有其他模型的性能。
- 对每个模型采用N倍交叉验证,并计算N个折叠上性能指标的平均值和标准差。
- 研究对目标影响最大的特征。
- 在预测误差的同时分析模型的类型。
- 以不同的方式设计功能。
- 重复上述步骤几次(反复试验),以确保我们使用了正确格式的正确功能。
- 根据模型的表现情况,筛选出最优模型。
6、微调入选模型并检查整体方法
这将是我们接近最终解决方案的关键步骤之一。 主要步骤应包括:
- 使用交叉验证进行超参数调整。
- 使用诸如随机搜索或网格搜索之类的自动调整方法,为我们的最佳模型找出最佳配置。
- 测试整体方法,例如投票分类器等。
- 用尽可能多的数据测试模型。
- 最终确定后,请使用我们在一开始就保留的看不见的测试样本来检查过拟合或欠拟合。
7、记录代码并传达你的解决方案
沟通的过程是多方面的。 我们需要牢记所有现有和潜在的利益相关者。 因此,主要步骤包括:
- 记录代码以及整个项目的方法和过程。
- 创建仪表板,例如voila或具有自我解释的可视化效果的演示文稿。
- 写博客/报告,记录您如何分析功能,测试不同的转换等。记录你的学习成功(失败的方法和有效的技术)
- 总结主要结果和未来的应用范围(如有)
8、在开发环境中部署监视器模型--Monitor!
如果你的项目需要在实时数据上进行测试和部署,则应创建一个Web应用程序或 REST API,在所有平台(Web,Android,iOS)上使用。 主要步骤(会因项目而异)包括:
- 将最终训练好的模型保存到h5或pickle文件中。
- 使用Web服务为模型服务,你可以使用Flask开发这些Web服务。
- 连接输入数据源并设置ETL管道。
- 使用Pipenv,Docker / Kubernetes管理依赖项(基于扩展要求)
- 你可以使用AWS,Azure或Google Cloud Platform部署服务。
- 监控实时数据的性能,或仅供人们使用你的模型和数据。
注意:可以根据项目的复杂性来调整清单。