梗概
在创建一个机器学习项目时可以通过该清单指导并完成机器学习项目,完成一个机器学习项目通常包括以下八个主要步骤:
1.项目设计与框架搭建
2.获取数据
3.数据的初步分析
4.数据整理
5.模型选择
6.调整模型
7.解决方案的展示
8.发布你的成果
下面将分别对各个步骤进行细分。
项目设计与框架搭建
1 确定研究目的
2 项目将解决的问题
3 目前解决该问题所采用的方案(如果有的话)
4 你将采用什么技术框架来搭建项目(如:有监督/无监督,在线/离线等等)
5 对该项目的评价标准是什么
6 所选用的评价标准是否能满足你的研究目的
7 达到评价标准的最低要求所需的最低性能是?(数据、软件、硬件)
8 是否有类似的项目可以借鉴其模型和代码
9 是否可以应用人类的专业知识(如:专家系统)
10 列出迄今为止的假设(包括你或其他人)
11 尽可能验证假设
获取数据
注意:尽可能让过程自动化,这样就可以轻松的使用新的数据。
1 列出你需要的数据类型和数据量
2 查找并记录你获取数据的数据源
3 检查这些数据需要占多少储存空间
4 检查这些数据的使用是否合法,如需授权的要先获得授权
5 获得数据的使用授权
6 建立一个工作空间(足够的储存空间)
7 获取数据
8 将数据转换成你容易操作的格式(在不改变数据本身的情况下)
9 确保数据中的敏感信息被删除或保护(如匿名化)
10 检查数据的大小和类型(如:时间序列、样本、地理位置等)
11 在数据集中选取一个测试集并单独存放
数据的初步分析
1 创建数据的副本以供研究(将其采样到可管理的大小)
2 创建一个Jupyter notebook记录你的数据分析过程
3 对数据集的每个属性和特征进行分析,包括:
- 数据名字
- 数据类型(分类,int/float,有界/无界,文本,是否被结构化等)
- 缺失数据所占百分比
- 噪声和噪声类型(随机、异常值、舍入误差等)
- 是否对项目有用
- 分布类型(高斯,均匀,对数等)
4 对于监督学习任务,识别其目标属性(输出)
5 数据可视化
6 分析各属性间的关联性
7 确定数据的整理方案
8 确定其他可用的数据
9 记录下你的分析结果
数据整理
注意:
- 处理数据的副本(保持原始数据集完整)。
- 为应用的所有数据转换编写函数,原因有:
1)在下次得到一个新的数据集时可以轻松地准备数据
2)在其他项目可以使用这些代码
3)可以用于清洗和准备测试集
4)在解决方案启动后,清理和准备新的数据实例
5)可以将这次处理作为超参数
1 数据清洗
- 修复或删除异常值(可选)
- 填充空白值(例如:0,均值,中值),或直接删除
2 特征选择(可选)
- 删除无用数据
3 特征工程
- 离散化连续特征
- 分解特性(例如:分类、日期)
- 添加有意义的特性转换(如:log(x),sqrt(x)等)
- 将特征整合成更有效的新特性
4 特性扩展
- 标准化或规范化特性
模型选择
注意:
- 如果数据很大,可以抽样更小的训练集,以便进行训练在合理的时间内使用许多不同的模型(请注意,这不利于复杂性模型,如大型神经网络或随机森林)。
- 尽量使这些步骤自动化
1 使用标准参数快速训练大量的模型(如:线性、朴素贝叶斯、SVM、随机森林、神经网络等)
2 衡量并比较它们的性能
- 对每个模型,使用N次交叉验证并计算其平均偏差和标准偏差
3 分析每种算法最重要的变量
4 分析模型所犯的错误类型及如何避免错误
5 进行一个快速的特征选择和特征工程
6 根据前面五个步骤快速迭代1到2次
7 简短列出三到五个最有前途的模型,选择那些犯了不同类型的错误的模型为宜
调整模型
注意:
- 你将尽可能多的在此步骤中使用数据,尤其是在微调的最后阶段
- 自动化步骤
1 使用交叉验证微调超参数
- 将数据转换和选择视为超参数,特别是对他们不确定时(例如:是否该用0或者中值替换缺失的值或直接删除)
- 除非要研究的超参数值非常少,否则选择随机搜索而不是网格搜索,如果训练时间长,尽可能选择贝叶斯优化
2 试着搭配方法,组合模型通常比单独运行它们效果更好
3 一但段最终模型有信心,可以使用测试集度量它的性能来估计泛化误差(在测试泛化误差后不要调整模型)
解决方案的展示
1 记录你的成果
2 做一个好的展示(PPT)
- 确保显突出整体
3 解释为什么你的工作可以达到研究目的
4 把工作过程中的一些有趣的地方记录下来
- 描述哪些有效,哪些无效
- 列出系统存在的局限性
5 确保你的主要发现是通过漂亮的可视化或容易记住的陈传达的
发布你的成果
1 为生产准备好解决方案(插入生产数据输入,编写单位测试)
2 编写监控代码,检查系统在定期交互时的实时性能并在系统性能下降时触发警报
- 要注意系统可能会缓慢的退化:随着数据量的扩大,模型往往会需要更新
- 绩效衡量可能需要第三方评价
- 监控输入数据的质量
- 定期对模型进行更新