机器学习---推荐系统案例(一)

一、推荐系统-数据处理流程

推荐系统数据处理首先是将Hive中的用户app历史下载表与app浏览信息表按照设备id进行关联,然后将关联数据使用python文件进行处理,将数据预处理为label和feature两列的临时数据,后期经过处理转换成逻辑回归 模型的训练集,进而得到模型文件。

二、Hive构建训练数据

1、创建临时表

创建处理数据时所需要的临时表

1.CREATE TABLE IF NOT EXISTS tmp_dw_rcm_hitop_prepare2train_dm 
2.(
3.device_id STRING,
4.label STRING,
5.hitop_id STRING,
6.screen STRING,
7.ch_name STRING,
8.author STRING,
9.sversion STRING,
10.mnc STRING,
11.interface STRING,
12.designer STRING,
13.is_safe INT,
14.icon_count INT,
15.update_date STRING,
16.stars DOUBLE,
17.comment_num INT,
18.font STRING,
19.price INT,
20.file_size INT,
21.ischarge SMALLINT,
22.dlnum INT,
23.idlist STRING,
24.device_name STRING,
25.pay_ability STRING
26.)row format delimited fields terminated by '\t';

最终保存训练集的表

1.CREATE TABLE IF NOT EXISTS dw_rcm_hitop_prepare2train_dm 
2.(
3.label STRING,
4.features STRING
5.)row format delimited fields terminated by '\t';

2、训练数据预处理过程

首先将数据从正负例样本和用户历史下载表数据加载到临时表中:

1.INSERT OVERWRITE TABLE tmp_dw_rcm_hitop_prepare2train_dm
2.  SELECT
3.    t2.device_id,
4.    t2.label,
5.    t2.hitop_id,
6.    t2.screen,
7.    t2.ch_name,
8.    t2.author,
9.    t2.sversion,
10.    t2.mnc,
11.    t2.interface,
12.    t2.designer,
13.    t2.is_safe,
14.    t2.icon_count,
15.    to_date(t2.update_time),
16.    t2.stars,
17.    t2.comment_num,
18.    t2.font,
19.    t2.price,
20.    t2.file_size,
21.    t2.ischarge,
22.    t2.dlnum,
23.    t1.devid_applist,
24.    t1.device_name,
25.    t1.pay_ability
26.FROM
27.  (
28.    SELECT
29.      device_id,
30.      devid_applist,
31.      device_name,
32.      pay_ability
33.    FROM
34.      dw_rcm_hitop_userapps_dm
35.  ) t1
36.  RIGHT OUTER JOIN 
37.  (
38.    SELECT
39.      device_id,
40.      label,
41.      hitop_id,
42.      screen,
43.      ch_name,
44.      author,
45.      sversion,
46.      IF (mnc IN ('00','01','02','03','04','05','06','07'), mnc,'x') AS mnc,
47.      interface,
48.      designer,
49.      is_safe,
50.      IF (icon_count <= 5,icon_count,6) AS icon_count,
51.      update_time,
52.      stars,
53.      IF ( comment_num IS NULL,0,
54.       IF ( comment_num <= 10,comment_num,11)) AS comment_num,
55.      font,
56.      price,
57.      IF (file_size <= 2*1024*1024,2,
58.       IF (file_size <= 4*1024*1024,4,
59.        IF (file_size <= 6*1024*1024,6,
60.         IF (file_size <= 8*1024*1024,8,
61.          IF (file_size <= 10*1024*1024,10,
62.           IF (file_size <= 12*1024*1024,12,
63.            IF (file_size <= 14*1024*1024,14,
64.             IF (file_size <= 16*1024*1024,16,
65.              IF (file_size <= 18*1024*1024,18,
66.               IF (file_size <= 20*1024*1024,20,21)))))))))) AS file_size,
67.      ischarge,
68.      IF (dlnum IS NULL,0,
69.       IF (dlnum <= 50,50,
70.        IF (dlnum <= 100,100,
71.         IF (dlnum <= 500,500,
72.          IF (dlnum <= 1000,1000,
73.           IF (dlnum <= 5000,5000,
74.            IF (dlnum <= 10000,10000,
75.             IF (dlnum <= 20000,20000,20001)))))))) AS dlnum
76.    FROM
77.      dw_rcm_hitop_sample2learn_dm
78.  ) t2
79.ON (t1.device_id = t2.device_id);

三、python文件处理数据

1、python文件预处理数据

针对Hive中“tmp_dw_rcm_hitop_prepare2train_dm”数据,可以使用Hive自定义函数进行预处理,得到逻辑回归模型的训练集,这种方式需要编写代码,并且打包上传集群处理数据。这里,我们也可以在Hive中直接使用python对Hive中的数据进行预处理。

将python文件加载到Hive中:

1.ADD FILE /opt/sxt/recommender/script/dw_rcm_hitop_prepare2train_dm.py;

可以通过list files;查看是不是python文件加载到了hive:

在hive中使用python脚本处理数据的原理:Hive会以输出流的形式将数据交给python脚本,python脚本以输入流的形式来接受数据,接受来数据以后,在python中就可以一行行做一系列的数据处理,处理完毕后,又以输出流的形式交给Hive,交给了hive就说明了就处理后的数据成功保存到hive表中。

2、python脚本内容

1.import sys
2.
3.if __name__ == "__main__":
4.    # random.seed(time.time())
5.    for l in sys.stdin:
6.        d = l.strip().split('\t')
7.        if len(d) != 21:
8.        continue
9.        # Extract data from the line
10.        label = d.pop(0)
11.        hitop_id = d.pop(0)
12.        screen = d.pop(0)
13.        ch_name = d.pop(0)
14.        author = d.pop(0)
15.        sversion = d.pop(0)
16.        mnc = d.pop(0)
17.        interface = d.pop(0)
18.        designer = d.pop(0)
19.        icon_count = d.pop(0)
20.        update_date = d.pop(0)
21.        stars = d.pop(0)
22.        comment_num = d.pop(0)
23.        font = d.pop(0)
24.        price = d.pop(0)
25.        file_size = d.pop(0)
26.        ischarge = d.pop(0)
27.        dlnum = d.pop(0)
28.
29.        hitopids = d.pop(0)
30.        device_name = d.pop(0)
31.        pay_ability = d.pop(0)
32.
33.        # Construct feature vector
34.        features = []
35.        features.append(("Item.id,%s" % hitop_id, 1))
36.        features.append(("Item.screen,%s" % screen, 1))
37.        features.append(("Item.name,%s" % ch_name, 1))
38.        features.append(("Item.author,%s" % author, 1))
39.        features.append(("Item.sversion,%s" % sversion, 1))
40.        features.append(("Item.network,%s" % mnc, 1))
41.        features.append(("Item.dgner,%s" % designer, 1))
42.        features.append(("Item.icount,%s" % icon_count, 1))
43.        features.append(("Item.stars,%s" % stars, 1))
44.        features.append(("Item.comNum,%s" % comment_num,1))
45.        features.append(("Item.font,%s" % font,1))
46.        features.append(("Item.price,%s" % price,1))
47.        features.append(("Item.fsize,%s" % file_size,1))
48.        features.append(("Item.ischarge,%s" % ischarge,1))
49.        features.append(("Item.downNum,%s" % dlnum,1))
50.
51.        #User.Item and User.Item*Item
52.        idlist = hitopids.split(',')
53.        flag = 0;
54.        for id in idlist:
55.            features.append(("User.Item*Item,%s" % id +'*'+hitop_id, 1))
56.            flag += 1
57.            if flag >= 3:
58.            break;
59.
60.        # Output
61.
62.        output = "%s\t%s" % (label, ";".join([ "%s:%d" % (f, v) for f, v in features ]))
63.        print(output)

3、python预处理数据使用

1.INSERT OVERWRITE TABLE dw_rcm_hitop_prepare2train_dm
2.  SELECT
3.    TRANSFORM (t.*)
4.    USING 'python dw_rcm_hitop_prepare2train_dm.py'
5.    AS (label,features)
6.  FROM
7.    (
8.      SELECT 
9.        label,
10.        hitop_id,
11.        screen,
12.        ch_name,
13.        author,
14.        sversion,
15.        mnc,
16.        interface,
17.        designer,
18.        icon_count,
19.        update_date,
20.        stars,
21.        comment_num,
22.        font,
23.        price,
24.        file_size,
25.        ischarge,
26.        dlnum,
27.        idlist,
28.        device_name,
29.        pay_ability
30.      FROM 
31.        tmp_dw_rcm_hitop_prepare2train_dm
32.    ) t;

4、导出数据

将“dw_rcm_hitop_prepare2train_dm”表中的数据导入到本地处理,这里可以直接在集群中使用SparkMLlib直接处理,为了方便演示,将数据导入到本地处理。

1.insert overwrite local directory '/opt/data/traindata' row format delimited fields terminated by '\t' select * from dw_rcm_hitop_prepare2train_dm;

注:这里是将数据导出到本地,方便后面再本地模式跑数据,导出模型数据。这里是方便演示真正的生产环境是直接用脚本提交spark任务,从Hive中获取数据经过Spark处理得到模型文件,将模型数据写往Redis中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/220235.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

任务十六:主备备份型防火墙双机热备

目录 目的 器材 拓扑 步骤 一、基本配置 配置各路由器接口的IP地址【省略】 1、配置BGP协议实现Internet路由器之间互联 2、防火墙FW1和FW2接口IP配置与区域划分 3、配置区域间转发策略 4、配置NAPT和默认路由 5、配置VRRP组&#xff0c;并加入Active/standby VGMP管…

MATLAB图解傅里叶变换(初学者也可以理解)

1、概述 相信很多人对于傅里叶变换可能觉得比较复杂和有点难懂&#xff0c;其实不难&#xff0c;它只是一种积分变换。 傅里叶变换&#xff0c;表示能将满足一定条件的某个函数表示成三角函数&#xff08;正弦和/或余弦函数&#xff09;或者它们的积分的线性组合。也就是说&qu…

Acrel-1000DP分布式光伏系统在某重工企业18MW分布式光伏中应用——安科瑞 顾烊宇

摘 要&#xff1a;分布式光伏发电特指在用户场地附近建设&#xff0c;运行方式以用户侧自发自用、余电上网&#xff0c;且在配电系统平衡调节为特征的光伏发电设施&#xff0c;是一种新型的、具有广阔发展前景的发电和能源综合利用方式&#xff0c;它倡导就近发电&#xff0c;就…

枚举enum(学习推荐版,通俗易懂)

定义及特点 第一行的列举名称&#xff08;都是常量&#xff09;&#xff0c;代表每个枚举的对象&#xff08;因为枚举不能创建对象&#xff0c;只能依靠罗列名称确定可使用枚举对象个数&#xff09;&#xff0c;这些名称代表的对象可以使用所在枚举类的所有成员变量、成员方法、…

4.配置系统时钟思路及方法

前言&#xff1a; 比起之前用过的三星的猎户座4412芯片&#xff0c;STM32F4的系统时钟可以说是小巫见大巫&#xff0c;首先我们需要清晰时钟产生的原理&#xff1a;几乎大多数的芯片都是由晶振产生一个比较低频的频率&#xff0c;然后通过若干个PLL得到单片机能承受的频率&…

每日一题:LeetCode-LCR 016. 无重复字符的最长子串

每日一题系列&#xff08;day 15&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

Spring Cloud + Vue前后端分离-第6章 通用代码生成器开发

Spring Cloud Vue前后端分离-第6章 通用代码生成器开发 6-1 代码生成器原理介绍 1.增加generator模块&#xff0c;用于代码生成 2.集成freemarker 通用代码生成器开发 FreeMarker 是一款模版引擎&#xff0c;通过模板生成文件&#xff0c;包括html页面&#xff0c;excel …

第7章 排序

前言 在这一章&#xff0c;我们讨论数组元素的排序问题。为简单起见&#xff0c;假设在我们的例子中数组只包含整数&#xff0c;虽然更复杂的结构显然也是可能的。对于本章的大部分内容&#xff0c;我们还假设整个排序工作能够在主存中完成&#xff0c;因此&#xff0c;元素的个…

前端检测字符串中是否含有特殊字符,并返回该特殊字符

一、判断字符串中是否含有特殊字符 const hasSpecicalCharacter (str) > {var regex /[!#$%^&*(),.?":{}|<>]/return regex.test(str) } //含有特殊字符返回true, 没有特殊字符返回false 二、判断字符串中是否含有特殊字符&#xff0c;并返回该特殊字符…

传统软件集成AI大模型——Function Calling

传统软件和AI大模型的胶水——Function Calling 浅谈GPT对传统软件的影响Function Calling做了什么&#xff0c;为什么选择Function CallingFunction Calling简单例子&#xff0c;如何使用使用场景 浅谈GPT对传统软件的影响 目前为止好多人对chatGPT的使用才停留在OpenAI自己提…

20、WEB攻防——PHP特性缺陷对比函数CTF考点CMS审计实例

文章目录 一、PHP常用过滤函数&#xff1a;1.1 与1.2 md51.3 intval1.4 strpos1.5 in_array1.6 preg_match1.7 str_replace CTFshow演示三、参考资料 一、PHP常用过滤函数&#xff1a; 1.1 与 &#xff1a;弱类型对比&#xff08;不考虑数据类型&#xff09;&#xff0c;甚至…

pytorch文本分类(三)模型框架(DNNtextCNN)

pytorch文本分类&#xff08;三&#xff09;模型框架&#xff08;DNN&textCNN&#xff09; 原任务链接 目录 pytorch文本分类&#xff08;三&#xff09;模型框架&#xff08;DNN&textCNN&#xff09;1. 背景知识深度学习 2. DNN2.1 从感知器到神经网络2.2 DNN的基本…

机器视觉【1】相机的成像(畸变)模型

零、前言 很久没写文章&#xff0c;简单唠一唠。 不知道巧合还是蜀道同归&#xff0c;部门领导设定了些研究课题&#xff0c;用于公司部门员工的超前发展&#xff0c;该课题是“2D to 3D的三维重建”&#xff0c;这一块刚好是我个人看中的一个大方向&#xff0c;所以就有了这…

智能优化算法应用:基于黑猩猩算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于黑猩猩算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于黑猩猩算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黑猩猩算法4.实验参数设定5.算法结果6.参考文…

早期的OCR是怎么识别图片上的文字的?

现在的OCR技术融合了人工智能技术&#xff0c;通过深度学习&#xff0c;无论是识别的准确率还是效果都非常不错&#xff0c;那您知道在早期的OCR是通过什么技术来实现的吗&#xff1f;如果您不知道&#xff0c;那么&#xff0c;就让我来告诉您&#xff1a;它主要是基于字符的几…

matlab中Signal Builder模块的用法总结

目录 前言方法一方法二参考文章 前言 今天在用matlab中Signal Builder的模块时&#xff0c;不知道怎么去得到想要的信号源&#xff0c;于是上网查了一下&#xff0c;并记录一下 方法一 如图所示&#xff0c;打开自定义 上面一行是横坐标&#xff0c;下面一行是纵坐标 [0,1…

【uniapp小程序-上拉加载】

在需要上拉加载的页面的page.json上添加红框框里面的 onReachBottom() {if(this.commentCurrent<this.commentTotal){this.commentCurrent 1; this.commentList();this.status loading;}else{this.status ;} }, methods:{commentList(){let params {courseid:this.cour…

Android-----AndroidManifests.xml 之meta-data

一、概念 meta-data&#xff1a;元数据、文件元数据。主要用来定义一些组件相关的配置值。 metadata是一组供父组件使用的名值对&#xff08;name-value pair&#xff09;&#xff0c;一个组件元素可以包含任意数量的meta-data子元素。这些子元素的值存放在一个 Bundle 对象中…

加速数据采集:用OkHttp和Kotlin构建Amazon图片爬虫

引言 曾想过轻松获取亚马逊上的商品图片用于项目或研究吗&#xff1f;是否曾面对网络速度慢或被网站反爬虫机制拦截而无法完成数据采集任务&#xff1f;如果是&#xff0c;那么本文将为您介绍如何用OkHttp和Kotlin构建一个高效的Amazon图片爬虫解决方案。 背景介绍 亚马逊&a…

【九】python模板方法模式

文章目录 9.1 模板方法模式概述9.2 代码示例9.3 模板方法模式的UML图9.4 模板方法模式的优点和缺点9.4.1 模板方法模式提供以下优点:9.4.2 模板方法模式的缺点如下: 9.1 模板方法模式概述 模板方法模式是一种行为设计模式&#xff0c;它使用一个抽象的基类定义了一个操作中的算…