每天净瞎搞

关注:AI/CS/数学/自我提升等

0%

机器学习项目清单

1.框出问题并看整体

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

2.获取数据

  • 注意:尽可能地自动化,以便你可以轻松地获取新数据
  • 1.列出所需的数据以及你需要多少数据。
  • 2.查找并记录可从何处获取该数据。
  • 3.检查将占用多少空间。
  • 4.检查法律义务,并在必要时获得授权。
  • 5.获取访问授权。
  • 6.创建一个工作空间(具有足够的存储空间)。
  • 7.获取数据。
  • 8.将数据转换为可以轻松操作的格式(无须更改数据本身)。
  • 9.确保敏感信息被删除或受保护(例如匿名)。
  • 10.检查数据的大小和类型(时间序列、样本、地理等)。
  • 11.抽样一个测试集,将其放在一边,再也不要看它(无数据监听!)。

3.研究数据

  • 注意:请尝试从现场专家那里获取有关这些步骤的见解。
  • 1.创建数据副本来进行研究(必要时将其采样到可以管理的大小)。
  • 2.创建Jupyter notebook以记录你的数据研究。
  • 3.研究每个属性及其特征:
    • 名称
    • 类型(分类、整数/浮点型、有界/无界、文本、结构化等)
    • 缺失值的百分比
    • 噪声和噪声类型(随机、异常值、舍入误差等)
    • 任务的实用性
    • 分布类型(高斯分布、均匀分布、对数分布等)
  • 4.对于有监督学习任务,请确定目标属性。
  • 5.可视化数据。
  • 6.研究属性之间的相关性。
  • 7.研究如何手动解决问题。
  • 8.确定你可能希望使用的转变。
  • 9.确定有用的额外数据。
  • 10.记录所学的知识。

4.准备数据

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

5.列出有前途的模型

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

6.微调系统

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

7.演示你的解决方案

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

8.启动!

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