机器学习项目流程清单

标签:#数据挖掘##机器学习# 时间:2018/03/16 21:54:33 作者:somTian

[TOC]

翻译自 《Hands On Machine Learning with Scikit Learn and TensorFlow》的APPENDIX B: Machine Learning Project Checklist 翻译过程根据笔者的习惯进行了文字的调整,如果不当请指出


这份列表可以知道你部署自己的机器学习项目。总共有八个步骤:

  1. 首先你要有一个要解决的问题
  2. 获取解决问题需要的数据
  3. 探索数据,对数据有一个清楚的理解
  4. 预处理数据以便更好地输入给机器学习算法
  5. 探索不同的模型并且找到最好的那个
  6. 调整你的模型参数,并将这些参数组合成一个更好的解决方案
  7. 展示你的结果
  8. 对你的系统进行上线、监控和维护

1 规范化问题:Frame the Problem and Look at the Big Picture

  1. 用商业术语来定义你的目标
  2. 您的解决方案将如何使用?
  3. 如果有的话,目前的解决方案/方法是什么?
  4. 你如何规范化这个问题(有监督/无监督,在线/离线)?
  5. 模型的效果如何测量?
  6. 模型测量的指标是否与业务目标(原文为business objective)保持一致?
  7. 达到业务目标所需的最低模型性能是多少?
  8. 类似的问题有哪些? 你可以重复使用他们的经验或工具吗?
  9. 是不是人类专长的问题?
  10. 你如何人工手动解决这个问题?
  11. 列出目前为止,你或其他人所做出的假设
  12. 如果可能的话,验证假设

2 获取数据:Get the Data

注意:尽可能自动化获取数据,这样您可以轻松获取最新的数据

  1. 列出你需要的数据和你需要的数据量
  2. 查找并记录可以获取该数据的位置
  3. 检查这些数据需要多少空间
  4. 检查法律义务,并在必要时获得授权
  5. 获取访问权限
  6. 创建一个有足够的存储空间的工作区(可以简单理解为计算机上的文件夹)
  7. 获取数据
  8. 将数据转换为您可以轻松操作的格式(不要更改数据本身)
  9. 确保删除或保护敏感信息(例如:使用匿名)
  10. 检查数据的大小和类型(时间序列,样本,地理信息等)
  11. 抽样出一个测试集,放在一边,不要管它

3 探索数据:Explore the Data

注意:尝试从领域专家那里获取这些步骤的见解

  1. 为探索数据创建一份数据副本(如果需要,可将其抽样为可管理的大小)
  2. 在Jupyter notebook上以记录您的数据探索过程
  3. 研究每个属性及其特征
    • 名字
    • 类型:分类,int / float,有界/无界,文本,结构化等
    • 丢失数据的百分比
    • 噪音和噪音类型(随机,异常值,舍入误差等)
    • 对任务的有用性
    • 数据分布的类型(高斯分布,均匀分布,对数分布等)
  4. 对于有监督学习任务,确定标签值
  5. 可视化数据
  6. 研究样本属性之间的关系
  7. 思考如何手动解决这个问题
  8. 确定您可能想要应用的数据转换
  9. 确认可能有用的额外数据
  10. 将你学到的东西记录下来

4 数据预处理:Prepare the Data

注意:

  • 在数据副本上进行处理(保持原始数据集的完整)
  • 对所有数据转换的函数编写代码,原因有五:
    • 可以在下次获取新数据集时轻松处理数据
    • 可以在未来的项目中应用这些转换
    • 对测试集进行预处理
    • 在解决方案生效后清理并准备新的数据实例
    • 轻松地将预处理选择作为超参数来处理
  1. 数据清理
    • 根据需要,修复或删除异常值
    • 补全异常值(利用零、均值、中位数等)或者删掉此行(或者列)
  2. 特征选择
    • 删除对任务无用的属性
  3. 适当的特征工程
    • 对连续特征离散化处理
    • 分解特征(例如,分类,日期/时间等)
    • 添加有希望的特征转换(例如,log(x),sqrt(x),x ^ 2等)
    • 将特征聚合成新的特征
  4. 特征缩放:对特征进行归一化或标准化处理

5 列出可能的模型:Short-List Promising Models

注意:

  • 如果数据很大,您可能需要抽取较小的训练集,以便在合理的时间内训练不同的模型(在复杂模型中要特别注意,如大型神经网络或随机森林)。
  • 再次尝试,尽可能自动执行这些步骤
  1. 使用标准参数训练不同类别的快速模型(例如,线性,朴素贝叶斯,SVM,随机森林,神经网络等)
  2. 测量并比较他们的性能
    • 对于每个模型,使用N折交叉验证并计算N折性能的均值和标准差
  3. 分析每种算法的重要变量
  4. 分析模型产生的错误类型
    • 人们用什么数据来避免这些错误?
  5. 快速进行特征选择和特征工程
  6. 对前面五个步骤进行一两次更快的迭代
  7. 简短列出前三到五个最有希望的模型,特别是不同类型的错误的模型

6 模型调整:Fine-Tune the System

注意:

  • 在此步骤,您需要使用尽可能多的数据,特别是在您微调结束的时候
  • 一如既往地自动化你所能做的事
  1. 使用交叉验证对超参数进行微调
    • 将数据转换选择视为超参数,特别是当您不确定转换是否合适时(例如,是否应该用零或中位数替换缺失的值?或者只是删除指定行?)
    • 当探索的超参数值很少,首选利用网格搜索上进行随机搜索。 如果训练时间很长,您可能更喜欢贝叶斯优化方法(例如,使用高斯过程先验,请参考[Practical Bayesian optimization of machine learning algorithms)。
  2. 尝试集成方法。 结合你最好的几个模型往往会比单独更好
  3. 一旦你对你的最终模型充满信心,在测试集上运行以检测泛化误差

7 展示你的方案:Present Your Solution

  1. 记录下你所做的事情
  2. 创建一个不错的演示
    • 确保首先突出重点。
  3. 解释您的解决方案为何能够达到业务目标
  4. 不要忘记提出你一路注意到的有趣观点
    • 描述什么工作是有效的,什么没效
    • 列出您的假设和模型系统的局限性
  5. 确保您关键的研究结果通过美观的可视化或易于记忆的陈述进行传达(例如,“收入中位数是房价的头号预测指标”)

8 上线:Launch!

  1. 准备好生产环境下的解决方案(插入数据输入,编写单元测试等)
  2. 编写监控代码,定期检查系统的实时性能,并在性能下降时时触发警报
    • 小心模型缓慢的退化:随着数据的发展,模型往往会“腐烂”。
    • 衡量吸能可能需要人工流程(例如,通过众包服务)。
    • 同时监控您输入的数据质量(例如发送随机值的故障传感器,或其他团队的输出过时)。 这对于在线学习系统尤为重要。
  3. 定期在新的数据上模型重新训练(尽可能自动化)