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

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

推荐系统数据处理首先是将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.mzph.cn/news/231646.shtml

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

相关文章

【经典LeetCode算法题目专栏分类】【第5期】贪心算法:分发饼干、跳跃游戏、模拟行走机器人

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 分发饼干 class Solutio…

【Qt之Quick模块】1. 概述及Quick应用程序创建流程

概述 Qt的Quick模块是用于创建现代化、动态和响应式用户界面的工具集。它是基于QML&#xff08;Qt Meta-Object Language&#xff09;和JavaScript的。 QML是一种声明性的语言&#xff0c;用于描述用户界面的结构和行为。它使用层叠样式表&#xff08;CSS&#xff09;的语法来…

Apache Flume(5):多个agent模型

可以将多个Flume agent 程序连接在一起&#xff0c;其中一个agent的sink将数据发送到另一个agent的source。Avro文件格式是使用Flume通过网络发送数据的标准方法。 从多个Web服务器收集日志&#xff0c;发送到一个或多个集中处理的agent&#xff0c;之后再发往日志存储中心&…

电脑操作系统深度剖析:Windows、macOS和Linux的独特特性及应用场景

导言 电脑操作系统是计算机硬件和应用软件之间的桥梁&#xff0c;不同的操作系统在用户体验、性能和安全性方面有着独特的特色。电脑操作系统是计算机系统中的核心组件&#xff0c;不同的操作系统在设计理念、用户体验和应用领域上存在显著差异。本文将深入探讨几种常见的电脑操…

安全芯片是什么?为什么可以应用在加密卡上?

安全芯片是指芯片内带有微处理器CPU、随机数发生器、硬件密码算法、存储单元&#xff08;包括随机存储器RAM、程序存储器ROM&#xff08;FLASH&#xff09;、用户数据存储器EEPROM&#xff09;以及芯片操作系统COS的智能芯片&#xff0c;相当于一台微型计算机&#xff0c;不仅具…

【经典LeetCode算法题目专栏分类】【第6期】二分查找系列:x的平方根、有效完全平方数、搜索二位矩阵、寻找旋转排序数组最小值

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; X的平方根 class Soluti…

【Image】图像处理

计算机视觉 CV Perception 如自动驾驶领域。 只要是从所谓的图像当中去抽取信息的过程&#xff0c;我们都叫做Perception。 视觉检测可以涵盖二维检测&#xff0c;如车辆、人和信号灯的检测。另外&#xff0c;还可以控制三维信息&#xff0c;直接在三维空间中操作数据。 SL…

鸿蒙OS:打破界限的操作系统新星

导言 鸿蒙OS&#xff08;HarmonyOS&#xff09;是华为公司为应对技术封锁而推出的分布式操作系统&#xff0c;其背后蕴含着华为构建全球数字生活愿景的雄心。本文将深入剖析鸿蒙OS的起源、核心特性&#xff0c;并展望其未来在数字生态中的角色。 1. 背景与起源 华为的…

【基础篇】1.2 认识STM32(二)

3.3 VREF/VREF-引脚 VREF和VREF-是STM32中用于提供参考电压的引脚。如下图&#xff1a; VREF引脚可以连接一个单独的外部参考电压&#xff0c;范围在2.0V&#xff5e;VDDA&#xff0c;但不能超过VDDA&#xff0c;否则就超过了模拟器件的最大供电电压。在100引脚的封装中&#…

智慧养老:创新科技让老年生活更美好

智慧养老&#xff1a;创新科技让老年生活更美好 随着人口老龄化的加剧&#xff0c;智慧养老成为了关注焦点。智慧养老以创新科技为核心&#xff0c;旨在改善老年人的生活品质、促进健康、增强安全感和社会融入感。本文将详细介绍智慧养老的关键技术和应用场景&#xff0c;带您了…

SiLM5350MDBCA-DG车规级隔离驱动芯片,我们能为汽车智能提供什么?

SiLM5350MDBCA-DG是一款适用于IGBT、MOSFET的单通道 隔离门极驱动器&#xff0c;具有10A拉电流和10A灌电流驱动能 力。提供内部钳位功能&#xff0c;可单独控制 上升时间和下降时间。 在 SOP8 封 装 中 具 有 3000VRMS 隔 离 耐 压 &#xff08; 符 合 UL1577&#xff09;。 与…

Vue 项目中使用 debugger 在 chrome 谷歌浏览器中失效以及 console.log 指向去了 vue.js 代码

问题 今天在代码里面输出 console.log 信息直接指向了 vue.js&#xff0c;并且代码里面写了 debgger 也不生效 解决 f12 找到浏览器的这个设置图标 找到这个 ignore list 的 custom exclusion rules 取消掉 /node_modules/|/bower_components/ 这样就正常了

思幻二次元风格的工作室个人引导页源码

思幻工作室个人引导页源码已经完成开发&#xff01;该源码支持三端自适应&#xff0c;并且具备赞助功能。我们选择了当前点赞量最高的配色方案&#xff0c;打造了一个独特的二次元风格引导页。经过在美国服务器上进行的测试&#xff0c;效果令人满意&#xff0c;网页加载速度达…

【Spring】03 容器

文章目录 1. 定义2. BeanFactory1&#xff09;惰性加载2&#xff09;基本的容器功能3&#xff09;XML配置 3. ApplicationContext1&#xff09;主动加载2&#xff09;AOP支持3&#xff09;事件发布与监听4&#xff09;国际化支持5&#xff09;注解支持 4. Spring容器的生命周期…

万兆网络之线路测速

网络测速有很多种方式&#xff0c;建议使用开源的iperf搭建测试 官方&#xff1a;iperf3&#xff08;技术网站一般不被和谐&#xff0c;有部分可能被污染&#xff09; Windows下载后解压即可运行 小技巧&#xff1a;如果你用的笔记本只有一个C盘&#xff0c;最好将免安装的软…

数据库sql语句查询补充

数据库sql语句查询补充 0.前言1.Like谓语2.带有Having当中的分组查询eg. 例题:错题重做: 3.内连接例题 0.前言 数据库期末复习,对自己做错的题进行知识总结和梳理 1.Like谓语 like谓语主要有两个操作 %:百分号,表示任意长度的字符串_:下划线,表示任意单个字符 like谓语的语…

Python学习之复习MySQL-Day8(事务)

目录 文章声明⭐⭐⭐让我们开始今天的学习吧&#xff01;事务简介事务操作模拟转账操作开启事务提交事务回滚事务查看/设置事务提交方法实例演示 事务四大特性并发事务问题分类 事务隔离级别分类查看/设置事务隔离级别实例演示 文章声明⭐⭐⭐ 该文章为我&#xff08;有编程语…

TrustZone之顶层软件架构

在处理器中的TrustZone和系统架构中,我们探讨了硬件中的TrustZone支持,包括Arm处理器和更广泛的内存系统。本主题关注TrustZone系统中发现的软件架构。 一、顶层软件架构 下图显示了启用TrustZone的系统的典型软件栈: 【注意】:为简单起见,该图不包括管理程序,尽管它们可…

福德植保无人机工厂:创新科技与绿色农业的完美结合

亲爱的读者们&#xff0c;欢迎来到福德植保无人机工厂的世界。这里&#xff0c;科技与农业的完美结合为我们描绘出一幅未来农业的新篇章。福德植保无人机工厂作为行业的领军者&#xff0c;以其领先的无人机技术&#xff0c;创新的理念&#xff0c;为我们展示了一种全新的农业服…

【Filament】绘制矩形

1 前言 Filament环境搭建中介绍了 Filament 的 Windows 和 Android 环境搭&#xff0c;绘制三角形中介绍了绘制纯色和彩色三角形&#xff0c;本文将使用 Filament 绘制纯色和彩色矩形。 2 绘制矩形 本文项目结构如下&#xff0c;完整代码资源 → Filament绘制矩形。 2.1 自定义…