项目实操

性别预测-机器学习,Hadoop,Hive,MapReduce第五篇

基于手机app用户的性别预测5-模型持久化和集群跑模型

(特此声明,因代码需保密,所以在此仅提供方法做参考,望各位读者见谅)

上一节我们利用ROC曲线和AUC得分看到了我们的梯度提升树模型准确率高,拟合效果很好,下面我们就需要将模型持久化,然后把模型放到Hadoop上跑。

6.模型持久化:

在这里使用joblib进行模型持久生成.pkl文件到本地。

[cc lang=”python”]from sklearn.externals import joblib[/cc] [cc lang=”python”]joblib.dump(模型名称,’filename.pkl’);[/cc]

7.数据抽取:

抽取部分数据,以2018-04-1为结束时间,选取宽度为一年的时间段作为分析预测窗口,及抽取2017-04-01至2018-04-01内所有抽样用户使用APP的日明细数据,总共3179915条记录。记录包含了用户ID,APP名称、使用次数,使用日期4个属性。

8.数据清洗(清洗预测集):

使用Hive对数据进行缺失值分析与异常值分析,清洗掉用户id不等于32位的,任一信息为空的数据,使用次数非数值型的数据,然后导入到另外的表中待用。

1)在Hive中建立一个表,四个字段,分别为user_id,app_name,pv,c_day。加载原始数据集。

2)探索用户ID为空的数据;(使用Hive语句进行查询)探索用户ID不为32位的数据;探索APP名称为空的数据;探索用户使用次数为空的数据;探索用户使用次数不为数字的数据; 以上数据均为脏数据,我们在运行模型之前需要清洗掉。

3)新建表user_app_total_clear,将合规数据导入新表中。

9.数据统计:

因为模型运算需要输入一年的用户使用APP次数,故我们需要将日明细数据按照用户ID和APP名称,统计求和一年的用户使用APP次数。

[cc lang=”sql”]create table user_app_total_result as select user_id,app_name,sum(cast(pv as bigint)) pv from user_app_total_clear group by user_id ,app_name[/cc]

10.运行模型:

使用模型对待预测数据进行预测分为三步:编写Mapper读取待预测数据编写Reducer使用模型对待预测数据进行预测最后编写执行命令进行模型预测程序运行。

1.Mapper:

按行读取数据,分隔符变为’\t’。

2.Reducer:

1)新建一个类Model_Wrapper用于保存模型和app字典表。 2)用sklearn库中的joblib模块加载模型文件。

3)用zeros()方法初始化app列表。

4)for循环按行读取数据,按行读取id并计算概率,当id与上一行的id不同时,就从这行开始算作另一个用户,直到id再次发生变化。

5)如果app在app列表中,则将这个app名称替换为频率,循环结束。

6)输出id+chr(1)分隔符+该id为正样本的概率。

3.运行模型程序:(Hadoop命令)

预测结果为两列,第一列是用户编号,第二列是该用户为正样本的概率。

至此,性别预测的例子我们已经结束完学习了。可见,从数据清洗到最后的结果输出要经过很多步骤,扎实的代码功底是必不可少的,模型的选择也尤为重要。在日后我也会继续分享很多我学到的知识,和大家一起成长。

发表评论

电子邮件地址不会被公开。 必填项已用*标注