hands on machine learning with sklearn and tensorflow 附录B 翻译与整理(1)概要

引言

(略),该书最出色的地方在于总结了一套非常实用的机器学习项目checklist(检查表),该检查表几乎覆盖了一个机器学习项目的所有过程,具有典型意义。所以本人拟将其翻译并与文中详细内容整合。希望对浏览者本人提供帮助。


目录:

1.将问题框架化,在宏观大局上思考问题(look at the big picture)。

2.获取数据

3.初步处理数据,发掘数据潜在意义

4.进一步处理数据,以便更好地发现数据的潜在模式,为机器学习算法做准备

5.利用数据,尝试实用相当多数量的模型,分析各个模型的优劣。最后简短地列出几个最好的模型。

6.将最终选中的数据,进行模型参数微调(finetune),达到一个满意的状态后,将模型组合获取最优解(可选)。

7.展示结果。
8.上线,监测并维护算法模型系统。


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.对每一个列属性查看其如下特征:
(1)名称
(2)数据类型(标签类,整数/浮点数,有界的/无界的,文本类,结构化数据)
(3)数据丢失量%
(4)是否包含噪声及包含那种噪声(随机,奇异值,舍入误差等)
(5)是否对这个任务真的有用
(6)分布类型(高斯分布,均匀分布,对数分布)
4.对于监督学习任务,检验其目标值属性(标签属性)
5.将数据可视化
6.研究数据维度与维度之间的相关性
7.研究你如何人工解决该项任务
8.确认你将要对数据做出的转化
9.确认是否要用额外的数据(如果需要,转到第二步)
10.记录你已经根据上述步骤知道了的信息

4.准备数据

注意:
请在复制的数据上进行操作(保存原始数据完好无损)
一定要尽量编写函数自动化转换(处理)数据,以下有五点理由:
-当获取新数据时,更容易地进行处理
-可以更方便地处理后续任务
-更方便地处理test set(测试集)
-在线学习时更方便地处理新样本
-编写函数集中了数据处理超参数,可以更方便地调整数据预处理超参数

1.数据清理
-调整或移除异常值(可选)
-补全缺失值(例如用0,平均值,中值等等(跟数据分布有关?)),或者直接删除该列属性

2.特征选取(可选)
删除对当前任务不提供任何有用信息的属性列

3.特征工程(合适的话):
-连续特征离散化
-分解特征(?)
-添加可能的变换特征(例如取对数,取根,取平方)
-将特征组合成新特征

4.特征标准化:取平均,标准化 等

5.选取几个可能的模型

注意:
-如果数据量很大,那么可以将数据分成更小的训练集,这样便可以根据不同的训练集在合理的时间内训练很多不同的模型(注意,这种做法可能对复杂模型不够友好,例如神经网络模型以及随机森林模型)
-同样,尽可能地编写函数,抽象模型的生成与训练过程,以便对新数据,新任务有同样的适用性

1.应用标准参数训练很多快速的初步的隶属与不同类别的模型(线性,朴素贝叶斯,支持向量机,随机森林,神经网络等)
2.计算并对比模型的表现:
-对每个模型,应用N折交叉验证,计算N折上测量误差的平均值与标准差。根据该项数据,评估模型
3.对每个模型,分析最重要的变量
4.分析每个模型的误差种类
-
5.再快速进行一波特征选取与特征工程
6.再进行1到2次上述五步的迭代
7.选取并列出表现最优的三到五个模型,最好模型有不同的误差种类。

6.微调模型

注意:
-用到手边尽可能多的数据,尤其到模型微调要结束的时刻。
-尽量用抽象函数代替操作过程。
1.利用交叉验证微调超参数。
-将数据的转换当作是超参数的一部分,尤其当你对这种转换并没有信心的时候。(例如,我到底是该在缺失值填入0还是中值还是直接删掉这一列)
-除非有非常少的超参数去调整,我们更倾向于用随机的gird search,去寻找更好的参数。如果训练的过程实在太长,那么就应该去寻找一条贝叶斯优化路径(例如用高斯过程优先)。
2.尝试利用集成方法,组合手头上最优的模型,一般来说这样做都会比单独实用模型更优。
3.一旦你对最终的模型抱有信心了,那就可以用测试集去查看模型的表现,并评估其泛化误差。
**注意,在评估完泛化误差后,就不要再动模型了,不然就会开始根据测试集而过拟合。





  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值