[机器学习] End-to-End流程

Reference: Hands-on Machine Learning with Scikit-Learn and Tensorflow

1. 确定需求和问题:
- 项目目标是什么?
- 在产品中如何实现?
- 是否有现行的模型或方法,如果有的话,是什么,效果怎么样?
- 要求是batch-learning还是online learning?
- 用哪些指标来衡量模型好坏?指标合理吗?
- 模型的最差结果应该比什么好(eg.现有的、盲猜等)
- 是否有可以迁移学习的模型?(之前碰到过NLP相关的,那doc2vec是否可以利用原先train好的)
- 列一下assumptions? 确认这些assumption是否正确

2. 数据提取:

  • 确定需要什么数据(一般需要一些行业经验做支撑),确认这些数据是否都可以拿到(数据库中是否有这些变量,是否有权限得到这些数据,数据库中的这些变量是否可信)
  • 确认用户敏感数据做了加密处理
  • 确认数据量
  • 确认建模环境
  • 把数据进行一些格式上的整理(例如时间、空间变量的格式转变)

3. 数据探索:

  • 如果数据量很大的话,sample一部分进行数据探索(尤其是画图的时候)
  • Data Exploration的结果最好可以保留,跟建模的码分开放
  • 数据质量检查:
    • 变量类型:numeric/categorical/order/text or other unstructured data...
    • 缺失值:是否有缺失值?缺失值占比多少?导致数据缺失的原因有哪些?
    • 异常值: 是否有明显的outlier(例如违背了行业逻辑的值)
    • 画变量的distribution,看大概像什么分布
  • 如果是有监督学习,确认target variable
  • 对连续变量做相关性分析 ->(新想到的是是否可以用互信息代替相关性分析,因为互信息的话对discrete的变量也能做,只是个人想法)
  • Visualizetion 探究变量和target variable之间的关系
  • 确定需不需要进行transformation

4. 数据准备:

  • 数据清洗:异常值处理、缺失值处理(缺失量小的话可以drop,或者用mean/median代替,离散变量的话也可新建一个类别叫unk
  • Feature Selection:
  • Feature Engineering:
    • 离散化连续变量
    • transformation
    • feature整合
  • Feature Scaling: 标准化/中心化

5. 确定一些待用模型(此步骤不调参):

  • 尝试一些不同的模型,确定每个模型的待调参数有哪些
  • 用CV来评估不同模型的优劣性, 分析每个模型中最重要的变量有哪些?
  • 分析模型为什么会犯错,然后进行模型的调整
  • 根据以上结果再做feature selection 和 feature engineering
  • 循环以上步骤,确定3个比较好的模型

6.确认模型:

  • 用CV对模型进行调参,用randomgridsearch
  • 尝试一些emsemble
  • 确定模型后进行评估

7. Presentation:

你可能感兴趣的:([机器学习] End-to-End流程)