机器学习之完整工程所需的步骤

2,693 阅读5分钟

最近在看Hands-On Machine Learning with Scikit-Learn and TensorFlow,其中提到机器学习处理解决一个完成的任务需要的步骤,做个简单记录

机器学习完整工程大概有以下8个步骤:

  1. 总览问题和目标,希望得到什么结果
  2. 获取数据
  3. 探索数据,进一步获取更深层次的信心。
  4. 准备,预处理数据,以便模型训练最合适的数据。
  5. 选择不同的模型加以训练,得到最好的一个或几个。
  6. 微调模型(超参数), 有必要时进行模型组合。
  7. 演示,部署模型
  8. 启动,监视和维护模型。

最后,根据需求进行调节选择。

下面针对每一步做个大概说明:

总览问题, 目标

  1. 用机器学习的术语定义目标
  2. 如何使用解决方案
  3. 目前的解决方案/变通方案(如果有的话)是什么?
  4. 判断是什么类型的问题,监督非监督,在线离线等等
  5. 怎么进行性能评估
  6. 有类似的问题吗?是否可以重用解决方案和工具
  7. 列出所有可能的假设
  8. 如果可能的话,确认这些假设。

获取数据

尽量做到自动化,这样可以更方便得到新的数据。

  1. 列出所需要的数据
  2. 找到并记录可以在哪获取这些数据
  3. 检查需要占用的空间
  4. 有必要的话,检查法律,获取授权
  5. 新建一个工作目录,要有足够的空间
  6. 获取数据
  7. 对数据进行格式转换,以便维护(不能修改数据)
  8. 确认是否需要隐藏部分信息
  9. 检查数据的大小和类型,比如时间序列,样本,和地理位置。
  10. 随机(分层)抽样出一个测试集,用于最后测试,不能做数据分析。

探索数据

  1. 创建数据集的一个副本。如有必要,取样到适合大小。
  2. 创建jupyter文件,保存数据探索的过程。
  3. 研究每个属性及其特征
  • 名称
  • 类型(数值型,类别型,文本等)
  • 缺失值的百分比(很重要)
  • 噪声和噪声类型(随机、异常值、舍弃误差等)
  • 分布类型,高斯?正态?均匀?对数?
  1. 如果是监督问题,确定标记出目标值。
  2. 可视化数据
  3. 研究不同属性间的相关性(corr)
  4. 研究通常怎么解决该问题
  5. 确定您可能想要应用的有希望的转换。
  6. 记录所得到的结果

准备数据

注意: 处理副本数据(保持原数据集的完整性) 将可能应用到的转换写成函数,优点如下:

  • 下次得到新的数据时可以方便的进行转换。
  • 在以后应用这些转换
  • 清理和准备测试集数据
  • 方案上线后,可以方便的清理和准备新数据
  1. 数据清洗
  • 修复或删除异常值(可选)
  • 填充缺失值(0, 平均数,中位数),或者删除该特征或对应的实例
  1. 特征选择(可选)
  • 移除哪些对该任务无用的信息
  1. 在适当的地方进行特征工程
  • 离散化连续性特征
  • 分解特征(例如,分类、日期/时间等)
  • 对特征值进行转换,取对数,开发,平方等。
  • 对不同的特征尝试组合成新的特征
  1. 特征缩放,标准化或者归一化

得到较合适的模型

注意:

  • 如果数据过大,可以将抽样出一个小的数据集来训练不同的模型,节省时间。不过对神经网络和随机森林可能会有较大的影响
  • 再提醒,应尽量自动化这些步骤
  1. 使用标准参数,从不同的类别(例如线性、朴素贝叶斯、SVM、随机森林、神经网络等)快速训练基本的模型。
  2. 度量,比较不同模型之间的性能
  • 对于不同模型,使用n folds进行交叉验证,计算平均值和方差。
  1. 分析对每个算法最重要的特征
  2. 分析模型所犯的错误类型,通常怎么处理
  3. 快速进行特征工程和特征选择
  4. 再次快速对以上步骤进行一两次迭代
  5. 列出最优的3到5个模型,尤其是有不同类型错误的模型

微调模型

注意:
希望在此步骤中使用尽可能多的数据,尤其是在接近微调的末尾时。
自动化处理。

  1. 使用交叉验证微调超参数
  • 将数据转换也视为超参数,特别是不那么确定时。(比如是用0还是平均值填充缺失值,还是都删掉)
  • 除非可以探索的超参数比较少,否则都首先使用随机搜索而不是网格搜索。(如果训练时间过长,可能需要使用贝叶斯优化方法)
  1. 尝试集成方法,对表现最好的模型进行组合,通常比单独的模型要好。
  2. 一旦确信这就是最终的模型,接着在测试集测量性能,估计泛化错误。

演示解决方案

  1. 记录已经完成的工作
  2. 做一个好的演讲,首先确保突出目标
  3. 解释为什么该方案实现了目标
  4. 不要忘记展示有趣的点
  5. 确保你的关键发现是通过漂亮的可视化或容易记住的陈述来传达。

启动

  1. 为生产环境准备解决方案
  2. 编写监控代码,检查系统的实时性能,并在它下降时触发警报。 3.随着新数据的加入定期重新训练模型(自动化)