机器学习项目清单

该清单可以指导你完成机器学习项目。主要有8个步骤:

  1. 框出问题并看整体。
  2. 获取数据。
  3. 研究数据并获得深刻见解。
  4. 准备数据以便更好的将潜在的数据模式提供给机器学习算法。
  5. 探索许多不同的模型,并列出最佳模型。
  6. 微调模型,并将它们组合成一个很好的解决方案。
  7. 演示你的解决方案。
  8. 启动、监视和维护你的系统。

显然,应该根据自己的需要随意调整此清单。

B.1 框出问题并看整体

  1. 用业务术语定义目标。
  2. 你的解决方案将如何使用。
  3. 当前有什么解决方案/解决方法(如果有)。
  4. 你应该如何阐述这个问题(有监督/无监督,在线/离线 等)
  5. 应该如何衡量性能?
  6. 性能指标是否符合业务目标?
  7. 达到业务目标所需的最低性能是多少?
  8. 有没有一些相似的问题:你可以重用经验或工具吗?
  9. 有没有相关有经验的人?
  10. 你会如何手动解决问题?
  11. 列出你(或其他人)到目前为止所作的假设。
  12. 如果可能,请验证假设。

    B.2 获取数据

    注意:尽可能的自动化,以便你可以轻松地获取新数据。

  13. 列出所需的数据以及你需要多少数据。

  14. 查找并记录可从何处获取该数据。
  15. 检查将占用多少空间。
  16. 检查法律业务,并在必要是获得授权。
  17. 获取访问授权。
  18. 创建一个工作空间(具有足够的存储空间)。
  19. 获取数据。
  20. 将数据转换为可以轻松操作的格式(无需更改数据本身)。
  21. 确保敏感信息被删除或受保护(例如匿名)。
  22. 检查数据的大小和类型(时间序列、样本、地理等)。
  23. 抽样一个测试集,将其放在一边,再也不要看它(无数据监听!)。

    B.3 研究数据

    注意:请尝试从现场专家那里获取有关这些步骤的见解。

  24. 创建数据副本来进行研究(必要时将其采样到可以管理的大小)。

  25. 创建Jupyter notebook以记录你的数据研究。
  26. 研究每个属性及其特征:
    1. 名称
    2. 类型(分类、整数/浮点型、有界/无界、文本、结构化等)
    3. 缺失的百分比
    4. 噪声和噪声类型(随机、异常值、舍入误差等)
    5. 任务的实用性
    6. 分布类型(高斯分布、均匀分布、对数分布等)
  27. 对于有监督学习任务,请确定目标属性。
  28. 可视化数据。
  29. 研究属性之间的相关性。
  30. 研究如何手动解决问题。
  31. 确定你可能希望使用的转变。
  32. 确定有用的额外数据。
  33. 记录所学的知识。

    B.4 准备数据

    注意:
  • 在准备数据副本上工作(保持原始数据完整)。
  • 为你应用的所有数据转换编写函数,原因有5个:
    • 下次获取新的数据集时,你可以轻松准备数据。
    • 可以在未来的项目中应用这些转换。
    • 清理并准备测试集。
    • 解决方案上线后清理并准备新的数据实列。
    • 使你轻松地将准备选择视为超参数。
  1. 数据清理:
    1. 修复或删除异常值(可选)
    2. 填写缺失值(例如,零、均值、中位数)或删除期行(或列)。
  2. 特征选择(可选):
    1. 删除没有为任务提供有用信息的属性。
  3. 特征工程(如果适用):
    1. 离散化连续特征。
    2. 分解特征(例如分类、日期/时间等)。
    3. 添加有希望的特征转换(例如附录B-机器学习项目清单 - 图1附录B-机器学习项目清单 - 图2附录B-机器学习项目清单 - 图3等)。
    4. 将特征聚会为有希望的新特征。
  4. 特征缩放:
    1. 标准化或归一化特征。

      B.5 列出有前途的模型

      注意:
  • 如果数据量巨大,则可能需要采样为较小的 训练集,以便可以在合理的时间内训练许多不同的模型(请注意,这会对诸如大型神经网络或随机森林之类的复杂模型造成不利影响)。
  • 尽可能自动化地执行这些步骤。
  1. 使用标准参数训练来自不同类别(例如线性、朴素贝叶斯、SVM、随机森林、神经网络等)的许多快速和粗糙的模型。
  2. 衡量并比较其性能。
    1. 对于每个模型,使用N折交叉验证,在N折上计算性能度量的均值和标准差。
  3. 分析每种算法的最重要的变量。
  4. 分析模型所犯错误的类型。
    1. 人类将使用什么数据来避免这些错误?
  5. 快速进行特征选择和特征工程。
  6. 在前面5个步骤中执行一两个以上的快速迭代。
  7. 筛选出前三到五个最有希望的模型,优先选择会产生不同类型错误的模型。

    B.6 微调系统

    注意:
  • 你将需要在此步骤中使用尽可能多的数据,尤其是在微调结束时。
  • 与往常一样,尽可能做到自动化。
  1. 使用交叉验证微调超参数:
    1. 将你的数据转换选择视为超参数,尤其时当你对它们不确定时(例如如果不确定是否用零或中位数替换缺失值,或者只是删除行)。
    2. 除非要研究的超参数值很少,否则应优先选择随机搜索而不是网格搜索。如果训练时间很长,你可能更喜欢贝叶斯优化方法(如Jasper Snoek等人所述使用高斯过程先验)。
  2. 尝试使用集成方法。组合最好的模型通常会比单独运行有更好的性能。
  3. 一旦对最终模型有信心,就可以在测试集中测量其性能,以估计泛化误差。

注意在测量了泛化误差之后,请不要对模型进行调整:否则你将会开始过拟合测试集。

B.7 演示你的解决方案

  1. 记录你所做的事情。
  2. 创建一个不错的演示文稿。
    1. 确保先突出大的蓝图。
  3. 说明你的解决方案为何可以实现业务目标。
  4. 别忘了介绍你一路上注意到的有趣观点。
    1. 描述什么有效,什么无效。
    2. 列出你的假设和系统的局限性。
  5. 去报通过精美的可视化效果或易于记忆的陈述来传达你的主要发现(例如,“中等收入是房价的第一大预测指标”)。

    B.8 启动!

  6. 使你的解决方案准备投入生产环境(插入生产数据输入,编写单元测试等)。

  7. 编写监控代码,以定期检查系统的实时性能,并在系统故障时触发警报。
    1. 当心缓慢的退化:随着数据的发展,模型往往会“腐烂”。
    2. 评估性能可能需要人工流水线(例如通过众包服务)。
    3. 监视你的输入的质量(例如,传感器出现故障,发送了随机值,或者另一个团队的输出变得过时)。这对于在线学习系统尤其重要。
  8. 定期根据新数据重新训练模型(尽可能自动进行)。