03 机器学习开发流程

白尔摩斯 2018-09-23

算法 数据库 测试

上一章《02 机器学习理性认识》让大家对机器学习的相关算法有了一个初步的认识和了解。

笔者的写作思路是先把机器学习的每个大分类,以及大分类下的中小分类做一个总体介绍。当后续对具体的算法模型讲解后,大家再回过头对照今天讲过的这些分类,你们会发现整个文集提供给你们的是一个完整的知识体系。

昨天的内容发布后有些朋友给了反馈,虽然笔者认为已经讲得很通俗易懂,但是很多人希望更细致一些。所以一方面昨天晚上对《02 机器学习理性认识》一文又做了更新,另一方面笔者决定再花一章的时间,对读者们的问题进行解答。

本章内容针对大家提出的问题,对以下知识点进行深入探讨:
1、机器学习的开发流程具体有哪些步骤?
2、不会爬虫的话数据从何而来?
3、遇到某一些特定数据应该做哪些处理?
4、我们如何评价一个模型的好坏?

=== 机器学习开发流程 ===

1、数据收集
机器学习最关键的是数据,有了数据我们才能知道选择什么样的模型,选择什么样的参数,怎么对模型进行调优,得到我们最后想要的结果。因此数据搜集是一件相对比较关键的任务,一般需要我们从企业现有的数据中找出有用的数据。

我们也不能在拿到数据后什么都不做,第一时间就将数据扔给机器进行处理(直接用API对数据进行分析)。这样的处理结果会非常差。一般而言做完数据分析后,工程师需要写一份报告,其中涉及:为什么选这些模型,为什么要选这些数据。所以当我们拿到数据后,首先一定要去阅读这些数据集的数据描述(Data Description)。数据描述会对每一个数据的特征以及目标做一个详细的解释。如果是参加比赛,那么比赛的数据一定会把需要预测的目标Targer告诉你。而在实际的工作中,我们要人为得从繁杂的数据库中找到需要的特征和目标作为最终的预测值。所以如果不读数据描述,连目标都不确定,如何能建立起一个合适的模型?

数据搜集不是简单获取数据的步骤,更重要的是你要了解这批数据。

2、 数据预处理
企业中一般有一些数据库维护的运维人员,他们对于数据的定义和专门做机器学习的人不一样。数据库中的数据往往会存在很多缺失值,甚至是一些逻辑混乱的数据。我们必须对这些数据的异常充分了解后,才能算完成了数据收集的操作。

比如我们设姓别属性,0代表男,1代表女。数据库中有时会出现00或01这样的数据。如果人为得去看,很明显可以识别出00代表男,01代表女。而如果是机器拿来学习,它会以为目标有4个分类(0,1,00,01)。我们要将数据都转化成0和1,再交给机器处理。

3、特征提取
特征提取分为两个步骤:第一、特征选择,第二、特征降维。PS:对于特征的定义在《02 机器学习理性认识》中详细说明过,不再赘述。

特征选择:数据集中可能包含n个特征,从中选出k个我们觉得比较重要的特征。

特征降维:为了彻底说明白这个问题,我绕一个圈。

----- 插入一段高能 ------

假如我们已经获取到了一个造物主公式,对于每一个输入,我们都能够得到一个完美的输出,和实际情况百分百得匹配。

假设这个造物主公式中:y = θ01x1+ … + θnxn;
目标值y = 预测某肥宅少年的一生是否能够迎娶白富美。

在造物主的世界中有无数位肥宅少年,为了预测他们的人生最终是否能够迎娶了白富美,造物主搜集了他们一生的所有的特征。比如:肥宅少年的健康程度、皮囊好看的程度、家境富有的程度等等,甚至连肥宅少年是否喜欢吃榴莲这一微不足道的特征也搜集在内。这些特征就是造物主公式中的 x1,x2…xn

造物主随机取出大量的肥宅少年样本(包含特征值和结果),投入到机器学习的模型中进行分析,最后计算机经过长时间的运算,最终得出了θ0n的值,假设θ12>…>θn ,即条件影响因子逐渐变小,整理每个条件因子对应的特征有了如下的报告:

x1:肥宅少年健康的程度。最重要的考虑因素。
x2:肥宅少年皮囊好看的程度。第二重要的考虑因素。
x3:肥宅少年家境富有的程度。第三重要的考虑因素。
x4:肥宅少年自身才华的程度。第四重要的考虑因素。
...
xn:肥宅少年是否喜欢吃榴莲。最不重要的因素。

虽然机器学习分析出了特征的重要性排序,同时计算出了他们对应的θ值。但是造物主也不确定本次得到的公式是好是坏,于是造物主决定再测试一下。

造物主又从世界中随机取出大量的肥宅少年测试样本(测试集),将他们输入到公式:y = θ01x1+ … + θnxn中,如果输出的结果和他们最终是否赢取了白富美的结果拟合度很高,说明这个公式很成功。

将造物主公式进行泰勒展开可以得到如下的线性特征:
z111x112x2+ … + α1nxn肥宅少年健康的程度
z212x122x2+ … + α2nxn 肥宅少年皮囊好看的程度

znn1x1n2x2+ … + αnnxn 肥宅少年是否喜欢吃榴莲

-----------------------

最后回到特征降维的问题中,显然对于“预测某肥宅少年是否能够赢取白富美”这个模型来说, “肥宅少年是否喜欢吃榴莲” 这个特征对于模型的预测结果可以忽略不计,造物主决定把该特征从分析中删除。
即删除了造物主公式中的 θnxn项 , θn是所有影响因子中最小的值,小到无限趋向于0。
也删除了泰勒展开中的 znn1x1n2x2+ … + αnnxn 这一项。如果将线性代数转化成矩阵来看,就等于少了一维。
这种操作称为降维。

很多企业在特征处理中遇到了一些问题,由于数据量大,其中特征可能有上千个,企业能力有限数据清洗不过来。于是他们将所有的特征全部放入机器中进行学习,这样一来最大的问题就是运算速度会无比缓慢。根据经验,如果跑2000个特征需要跑1~2天,而且处理分类的时候会特别痛苦,估计会花个5天左右。所以要形成一种自己的特征处理风格,这种风格的形成需要靠大量的实战去积累,日后再说。

4、模型构建
模型构建的第一步,是保证输入机器的数据不会报错,否则需要返回数据预处理的步骤。
模型构建这步需要选择合适的算法。重新举一下建造金茂大厦的例子:
算法就是图纸,数据是盖楼的砖,最终模型是建立出来的房子。我们希望建立出来的模型是金茂大厦,如果图纸盖出来的模型是平房,那么我们需要调正图纸的结构,直到盖出来的模型是高楼为止。此后我们就选择这张能够盖出高楼的图纸去建立金茂大厦。

实际工作中最耗时的是数据预处理和特征提取的步骤,也许会占用50%到70%的时间。而模型构建的耗时主要在于你使用API来处理数据的速度,即取决于你对API熟练运用的程度。

5、模型测试
模型构建完成以后,我们要对模型不断得调优。此时的数据在模型训练和模型测试上形成了一个闭环。

如果我们分析的数据来自一个接触AI领域的新兴行业,我们对行业里的数据没有一个大致的认知,这种情况下我们需要尽早得进入这个闭环的步骤。因为我们无法知道会跑出什么样的数据,那么在做了简单的数据预处理及特征提取后,我们就要让数据尽快跑出来形成一个最初的模型,然后交给测试机和模型训练不断调优。

如果我们分析的数据来自一个成熟的行业,比如金融行业,金融行业的风控部门对模型建立得已经相当完善了。当我们入手一组特征数据后,我们对这些特征相当熟悉,我们知道跑出来的结果肯定在95%~97%之间。这种情况下为了让模型更好得调优,就要花更多时间在数据预处理和特征提取这两个环节。

=== 机器学习的数据集 ===

如果不懂得爬虫,又想尽快进入机器学习的研究,那么可以从以下网站中获取数据。

https://tianchi.aliyun.com/datalab/index.htm 天池数据首页。
https://tianchi.aliyun.com/competition/gameList.htm 天池比赛数据。定个小目标,参加3~5次比赛,能进入前10%就算合格了。
https://www.kaggle.com/competition kaggle比赛数据。
https://aws.amazon.com/cn/public-datasets/ 亚马逊数据。
http://www.sogou.com/labs/resource/list_pingce.php 搜狗实验室

重点介绍:
http://archive.ics.uci.edu/ml/dataset.html
加州大学提供的机器学习入门级数据,基本都清洗好了,可以直接放到机器里跑。

Default Tasks:基于目标提出的任务。 其中Classification是做分类的数据(数据是离散的),Regression是做回归的数据(数据是连续的),Clustering是做聚类的数据。对应的是Y值。

Attribute Type:属性特征。其中Categorical是经过分类的数据, Numerical是数值类型数据,Mixed是混合类型数据。对应的是x1,x2…xn的值。

=== 结语 ===

开篇提到的4个问题:
1、机器学习的开发流程具体有哪些步骤?
2、不会爬虫的话数据从何而来?
3、遇到某一些特定数据应该做哪些处理?
4、我们如何评价一个模型的好坏?

本章解答了前两个,后两个留到下一章详细讨论。时间不早了,大家晚安。

登录 后评论
下一篇
云栖号资讯小编
666人浏览
2020-04-07
相关推荐
0
0
0
806