Follow me!百万奖金由你拿 | 精准资助机器学习(三)

原创
2017/02/15 19:50
阅读数 71

通过前面两篇的数据探索,我们对教育精准资助的数据已经有所了解了,接下来我们就要建立模型来进行机器学习了。

一、机器学习之分类概况

大千世界中“人以类聚,物以群分”,就是指具有相同(或相近)特征的事物总是归于一类或者说能聚在一起的事物总是拥有相同(或相近)的特征。

机器学习最基本的研究就是解决分类问题,比如哪些邮件是垃圾邮件,哪些邮件是正常邮件,哪些访问(日志)是正常的,哪些访问是不正常的。对于我们这次教育竞赛来讲就是要分出哪些人需要资助1000,哪些人需要资助1500,哪些人需要资助2000,哪些人不需要资助的问题。

解决这些问题最常规的办法是编写规则条件,满足某个条件是什么类,满足另外的条件是什么类。当问题复杂到一定程度,即不能写出明确的规则或者规则很复杂时就可以考虑用机器学习的方法来解决。

那么机器又是如何学习的呢?看下图:

首先,机器学习是要数据的,而且是两类数据:一类能标识人(和物)的特征数据,如每一人的消费次数,消费总额,单笔最大等等;另一类则是标记了人的分类的答案数据(或标记数据),就是需要人根据经验来告诉机器哪些人是一类的,哪些物是一类的。这样再选择合适的算法,让机器来学习。给的数据越多,机器就学习的越多,机器就会变得越”聪明“。我们把这个机器学习的过程叫做训练,训练的结果就是模型。有了这个模型后,就可以进行预测,看下图:

首先是要预测的数据的格式和特征数据的格式一样,不能添加或减少特征,也不能变更特征的名称和顺序,然后使用模型来预测,最后就会得到预测结果。

整个机器学习的过程就是这样了,还简单吧,下面我们就用教育资助的数据操练起来。

二、机器学习过程

(一)数据准备

精准资助主要集中反映在日常的消费数据中,我们先使用消费数据来构造特征数据和标记数据(答案数据)。

特征数据的一个要求是使用一行来描述一个对象(人或物),对象是不重复的,特征数据均为数字类型,不能出现其他类型,如果是字典类型,如性别男女也应该用0,1表示。

标记数据的要求是和特征数据一一对应,同样一行代表一个人(或物),标记需要使用整数形,一个数代表了一个分类。这里的专业叫法是标称型(变量),取值是有限的整数,不能是小数(分类再多总有个最大值的,小数就不知道是哪一类的了,呵呵)。和标称型对应的是数值型,如果标记的答案是数值型的,那就不是分类问题了,与之相对应的是机器学习的另一类应用回归。

Part one:以同学ID为对象来计算消费特征数据

1、加载一卡通训练数据

2、修改列名

分别修改字段0、1、2、3、4、5、6为id、pos、address、catalog、time、cost、have

3、根据id进行分组,然后根据cost字段计算每个人的消费情况(消费总额,单次最大消费,单词最小消费,消费均值,消费中位数,消费次数),结果保存到df表card_cost。

输入以下统计函数:

cost_sum:sum,cost_max:max,cost_min:min,cost_mean:mean,cost_meidan:median,cost_count:count

4、然后计算卡内余额(最大值,最小值,平均值),结果保存到df表card_have

输入以下统计函数:

have_max:max,have_min:min,have_mean:mean,have_median:median

5、两张合起来,一个人的消费状况就非常清晰了

6、查看关联后的表 

Part two:计算资助金额标记数据

1、加载助学金发放训练数据

2、修改列名。分别修改字段0、1为id、money

由于有资助的不一定有消费,有消费的不一定出现在资助名单中,所以card_money和stn的行不一定是一一对应的,我们一定要确保card_money的数据中没有空值,card_money和stn的行一一对应(数量一致,关连一致)。

可以采用如下方式:

1、还原card_money的index为id列 

2、以资助名单为准关联消费记录

3、用-1填充a的空值

4、选出新的特征数据

5、修改card_money中id列的类型为int

6、设置id列为索引

(二)选择算法

有了特征数据和标记数据,接下来我们就要选择算法了,FEA支持的分类算法有以下几种:

也许你该问了,这么多算法我该使用哪个呢?这就和你的数据息息相关了,这也是经验的问题。

而在实际的工程中,我们往往会使用多种分类器,来比较一下分类的效果再做选择。那你也许又该说了,这么多算法一个一个试下来,不是很麻烦吗。呵呵,FEA想你之所想,在新的版本中FEA将添加自动分类功能,自动进行多种分类器的训练并打分,有你来选择适合你的一款。

本次我们使用gbdt分类器和svm来做下面的实验。

(三)训练模型

训练数据构建模型

1、设置工作区

2、使用迭代决策树分类算法gbdt,构建模型和训练数据,一步完成,模型名称命名为gbdt

3、评估模型,给模型打分,结果保存到DF表score

 4、查看结果

结果的取值在0到1之间,代表预测的准确度,最大为1,准确度100%,千万不要看到1就很开心哦,很多情况下1代表了预测结果和你的数据完全拟合,或者说拟合,当真的有新数据来预测时,反而很不准。可以换一个算法试试。

5、使用向量机分类算法svm构建模型和训练数据,一步完成,模型名称命名为model

6、评估模型,给模型打分,结果保存到DF表score

7、查看结果

(四)机器预测

模型构建训练好后,我们就可以来进行预测了,预测数据和特征数据的计算方法一样,就不在这里详细描述了。

预测数据的文件为match/fund/card_test.csv

预测人员的文件为match/fund/studentID_test.csv

假定预测数据的DF表为card_money1,则预测过程如下:

1、使用gbdt模型预测

2、使用svm模型预测

3、查看结果

是不是很简单?

没错,照上面的步骤玩下来,你就完成了机器学习的基本过程,就对机器学习有了初步的了解。

(五)保存模型

机器学习是不是每次都得经过上述步骤(准备数据、训练模型、预测)才能应用呢?

不是的!

当我们训练好一个模型后,可以将模型保存下来,可以分发和部署到新的环境(机器)中直接进行预测,而不用重复训练过程,具体的语句如下:

1、保存gbdt模型预测

 2、保存svm模型预测

3、查看保存的模型

其中0列存储的就是模型文件的名称,然后就可以到数据目录里下载此模型文件。

发布模型和此相反,先上传模型文件到数据目录,然后加载模型。

三、小结

本文以可视化操作的方式结合教育精准资助数据讲解了机器学习的典型过程,为还在机器学习大门口徘徊的人们点亮了一盏明灯,不要犹豫不要徘徊,机器学习,你可以的!

对于机器学习的一些高级话题,如特征选取,参数设置,过采样等将在后续的系列中进行探讨和交流,教你如何打造一个准确率和召回率等都满足实战的模型。

在此也和大家叮嘱一下,模型的优化是无止境的,要耗费大量的脑力和体力。

FEA准备好了,你准备好了吗?

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部