机器学习项目清单
该清单可以指导你完成机器学习项目。主要有8个步骤:
- 框出问题并看整体。
- 获取数据。
- 研究数据并获得深刻见解。
- 准备数据以便更好的将潜在的数据模式提供给机器学习算法。
- 探索许多不同的模型,并列出最佳模型。
- 微调模型,并将它们组合成一个很好的解决方案。
- 演示你的解决方案。
- 启动、监视和维护你的系统。
B.1 框出问题并看整体
- 用业务术语定义目标。
- 你的解决方案将如何使用。
- 当前有什么解决方案/解决方法(如果有)。
- 你应该如何阐述这个问题(有监督/无监督,在线/离线 等)
- 应该如何衡量性能?
- 性能指标是否符合业务目标?
- 达到业务目标所需的最低性能是多少?
- 有没有一些相似的问题:你可以重用经验或工具吗?
- 有没有相关有经验的人?
- 你会如何手动解决问题?
- 列出你(或其他人)到目前为止所作的假设。
-
B.2 获取数据
注意:尽可能的自动化,以便你可以轻松地获取新数据。
列出所需的数据以及你需要多少数据。
- 查找并记录可从何处获取该数据。
- 检查将占用多少空间。
- 检查法律业务,并在必要是获得授权。
- 获取访问授权。
- 创建一个工作空间(具有足够的存储空间)。
- 获取数据。
- 将数据转换为可以轻松操作的格式(无需更改数据本身)。
- 确保敏感信息被删除或受保护(例如匿名)。
- 检查数据的大小和类型(时间序列、样本、地理等)。
抽样一个测试集,将其放在一边,再也不要看它(无数据监听!)。
B.3 研究数据
注意:请尝试从现场专家那里获取有关这些步骤的见解。
创建数据副本来进行研究(必要时将其采样到可以管理的大小)。
- 创建Jupyter notebook以记录你的数据研究。
- 研究每个属性及其特征:
- 名称
- 类型(分类、整数/浮点型、有界/无界、文本、结构化等)
- 缺失的百分比
- 噪声和噪声类型(随机、异常值、舍入误差等)
- 任务的实用性
- 分布类型(高斯分布、均匀分布、对数分布等)
- 对于有监督学习任务,请确定目标属性。
- 可视化数据。
- 研究属性之间的相关性。
- 研究如何手动解决问题。
- 确定你可能希望使用的转变。
- 确定有用的额外数据。
- 记录所学的知识。
B.4 准备数据
注意:
- 在准备数据副本上工作(保持原始数据完整)。
- 为你应用的所有数据转换编写函数,原因有5个:
- 下次获取新的数据集时,你可以轻松准备数据。
- 可以在未来的项目中应用这些转换。
- 清理并准备测试集。
- 解决方案上线后清理并准备新的数据实列。
- 使你轻松地将准备选择视为超参数。
- 数据清理:
- 修复或删除异常值(可选)
- 填写缺失值(例如,零、均值、中位数)或删除期行(或列)。
- 特征选择(可选):
- 删除没有为任务提供有用信息的属性。
- 特征工程(如果适用):
- 离散化连续特征。
- 分解特征(例如分类、日期/时间等)。
- 添加有希望的特征转换(例如
、
、
等)。
- 将特征聚会为有希望的新特征。
- 特征缩放:
- 如果数据量巨大,则可能需要采样为较小的 训练集,以便可以在合理的时间内训练许多不同的模型(请注意,这会对诸如大型神经网络或随机森林之类的复杂模型造成不利影响)。
- 尽可能自动化地执行这些步骤。
- 使用标准参数训练来自不同类别(例如线性、朴素贝叶斯、SVM、随机森林、神经网络等)的许多快速和粗糙的模型。
- 衡量并比较其性能。
- 对于每个模型,使用N折交叉验证,在N折上计算性能度量的均值和标准差。
- 分析每种算法的最重要的变量。
- 分析模型所犯错误的类型。
- 人类将使用什么数据来避免这些错误?
- 快速进行特征选择和特征工程。
- 在前面5个步骤中执行一两个以上的快速迭代。
- 筛选出前三到五个最有希望的模型,优先选择会产生不同类型错误的模型。
B.6 微调系统
注意:
- 你将需要在此步骤中使用尽可能多的数据,尤其是在微调结束时。
- 与往常一样,尽可能做到自动化。
- 使用交叉验证微调超参数:
- 将你的数据转换选择视为超参数,尤其时当你对它们不确定时(例如如果不确定是否用零或中位数替换缺失值,或者只是删除行)。
- 除非要研究的超参数值很少,否则应优先选择随机搜索而不是网格搜索。如果训练时间很长,你可能更喜欢贝叶斯优化方法(如Jasper Snoek等人所述使用高斯过程先验)。
- 尝试使用集成方法。组合最好的模型通常会比单独运行有更好的性能。
- 一旦对最终模型有信心,就可以在测试集中测量其性能,以估计泛化误差。
注意在测量了泛化误差之后,请不要对模型进行调整:否则你将会开始过拟合测试集。
B.7 演示你的解决方案
- 记录你所做的事情。
- 创建一个不错的演示文稿。
- 确保先突出大的蓝图。
- 说明你的解决方案为何可以实现业务目标。
- 别忘了介绍你一路上注意到的有趣观点。
- 描述什么有效,什么无效。
- 列出你的假设和系统的局限性。
去报通过精美的可视化效果或易于记忆的陈述来传达你的主要发现(例如,“中等收入是房价的第一大预测指标”)。
B.8 启动!
使你的解决方案准备投入生产环境(插入生产数据输入,编写单元测试等)。
- 编写监控代码,以定期检查系统的实时性能,并在系统故障时触发警报。
- 当心缓慢的退化:随着数据的发展,模型往往会“腐烂”。
- 评估性能可能需要人工流水线(例如通过众包服务)。
- 监视你的输入的质量(例如,传感器出现故障,发送了随机值,或者另一个团队的输出变得过时)。这对于在线学习系统尤其重要。
- 定期根据新数据重新训练模型(尽可能自动进行)。
