文档章节

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

openfea
 openfea
发布于 2017/02/15 19:50
字数 2232
阅读 58
收藏 0

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

一、机器学习之分类概况

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

机器学习最基本的研究就是解决分类问题,比如哪些邮件是垃圾邮件,哪些邮件是正常邮件,哪些访问(日志)是正常的,哪些访问是不正常的。对于我们这次教育竞赛来讲就是要分出哪些人需要资助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准备好了,你准备好了吗?

© 著作权归作者所有

openfea
粉丝 18
博文 86
码字总数 95615
作品 1
杭州
其他
私信 提问
“撒币”狂欢在直播,如何成为稳定的大“撒币”平台? | 产品经理说第1篇

时隔十年后的撒币狂欢 2008年一部《贫民窟的百万富翁》把丹尼·博伊尔推到了电影殿堂的最高峰奥斯卡最佳外语片大奖,电影中把来自贫民窟的印度街头少年贾马勒刻画成靠知识走向成功殿堂的楷模...

OneAPM蓝海讯通
2018/01/24
21
0
Mozilla 拨款100万美元资助全球开源软件项目

火狐浏览器的母公司 Mozilla 昨日宣布,将拨款一百万美元用于资助全球范围内的免费开源软件项目。 Mozilla 负责人 Mitchell Baker 在 blog 上表示,他们将成立名为 Mozilla Open Source Supp...

oschina
2015/10/25
2.5K
22
论马云在中国的影响力!

模仿秀啥时候变成模仿马云的潮流了,WORD天!小伙整成马云脸引关注!一个深圳叫黄建的90后小伙称自费百万去韩国整容将自己整成了马云脸,并表示现在大马云,小马云都有了,我就是那个中马云。...

linuxCool
2016/12/13
27
0
百万英雄类答题游戏的程序员打开方式

最近知识答题类的app应用和网站 都很火 所以机器人多了,,百度度秘、搜狗小汪等 Python发挥了很大作用 《百万英雄》《冲顶大会》《头脑王者》《一站到底》《芝士超人》《黄金十秒》《百万赢...

English0523
2018/01/12
0
0
汪仔重出江湖开挂撒币大战 引画风突变

  【IT168 资讯】“撒币”、“瓜分百万奖金”、“直播答题”……2018 刚开年,互联网行业又出现一个新玩法,短短十几天内,四五个直播答题软件相继火了:王思聪投资的 “冲顶大会”,映客推...

it168网站
2018/01/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.5K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部