基于Hadoop的用户购买行为的商品推荐系统

news2024/10/7 14:23:32

目录
一 绪论 1
1.1 编写目的 1
1.2 背景及意义 1
1.3 开发及运行环境 2
二 需求分析 3
2.1 系统概述 3
2.3 系统功能需求 4
2.3.1 收集原始数据 4
2.3.2 计算物品相似度矩阵 4
2.3.3 计算用户购买向量 5
2.3.4 计算推荐向量并去重和排序 5
2.3.4 数据入库 5
2.3.5 作业控制 5
2.3.6商品推荐功能 6
2.4 系统非功能需求 6
三 概要设计 7
3.1系统架构设计 7
3.2系统层次架构设计 8
3.3系统功能模块设计 9
3.3.1 计算物品相似度矩阵 10
3.3.2推荐矩阵(相似度矩阵*向量) 11
3.3.3对推荐向量进行处理 12
3.3.4数据入库 12
3.4系统数据库设计 12
四 详细设计 14
4.1推荐模块程序流程图 14
4.2系统架构图 15
4.3数据预处理层 15
4.4推荐结果生成层 16
4.5推荐系统流程图 17
五 系统实现 17
5.1计算用户购买商品的列表 17
5.2计算商品的共现关系 18
5.3计算用户的购买向量 18
5.4推荐结果 19
5.5数据去重 19
5.6推荐结果入库 20
5.7构建作业流对象 22
六 系统测试 23
6.1计算用户购买商品的列表 23
6.2计算商品的共现次数(共现矩阵) 23
6.3计算用户的购买向量 23
6.4推荐结果 24
6.5数据去重 25
6.6推荐结果入库 25
6.7 web系统推荐商品实现 26
小结 26
参考文献 27
二 需求分析
2.1 系统概述
商品推荐系统是对用户的历史行为进行挖掘,对用户兴趣信息进行建模,并对用户未来行为进行预测,从而建立用户和内容的关系,满足用户对商品的推荐需求的一种智能系统。通过对主要的推荐算法进行比较分析,模拟实现了基于用户行为的智能推荐系统,提高了推荐算法的有效性。商品推荐系统是为了更精准的为用户推荐他们想要的内容,如果一个用户在浏览商品信息的时候,通过对用户数据的记录,和已经存在的其他的用户记录进行分析,从而为用户推荐相应的数据。本次毕业设计是基于Hadoop的商品推荐系统,本此课设通过对用户行为的研究,发现用户购买的偏好波动幅度偏大,如何充分利用这一特征是提高推荐系统精准度的关键。
用户行为数据的处理。商品推荐系统用户、商品行为主要是用户的购买行为。
购买行为包含了丰富的用户购买商品,如何处理这些购买商品是推荐系统实现的关键。
系统必须具有高扩展性。网上购物每时每刻都会有新的数据产生,都会执行新的购物行为,系统的扩展性变得尤为关键。
推荐系统的推荐质量。推荐系统的最终目的是推荐,所以推荐质量是整个系统设计的最终目的。好的推荐系统需要兼顾系统的精准度、覆盖率以及新颖度。
在这里插入图片描述
2.3 系统功能需求
基于Hadoop的商品推荐引擎大致可以分为5部分,分别是:计算用户的购买向量、计算物品的相似度矩阵、计算推荐度及相关处理、数据导入数据库和对于整个项目的全部作业控制。
2.3.1 收集原始数据
推荐系统是基于用户、商品行为数据来进行推荐的,没有用户商品数据的推荐系统是无法进行推荐的。rawdata文件:该文件是收集用户对物品的偏好,形成“用户 物品 偏好”的数据集。数据格式:用户编号 物品编号 偏好值。

package com.cxx.project.grms.step1;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;

import java.io.IOException;

/**
 * @Author: cxx
 * 用户购买列表
 * @Date: 2018/4/9 11:46
 * 原始数据****************
 * 10001	20001	1
 * 10001	20002	1
 * 计算结果****************
 * 10001	20001,20005,20006,20007,20002
 * 10002	20006,20003,20004
 */

public class UserByList extends Configured implements Tool{
    //mapper
    public static class UserByListMapper
            extends Mapper<LongWritable,Text,Text,Text>{
        @Override
        protected void map(LongWritable key,Text value,Context context) throws IOException, InterruptedException {
            String[] strs = value.toString().split("\t");
            context.write(new Text(strs[0].trim()),new Text(strs[1].trim()));
        }
    }
    //reduce
    public static class UserByListReduce extends Reducer<Text,Text,Text,Text> {
        @Override
        protected void reduce(Text key,Iterable<Text> values,Context context) throws IOException, InterruptedException {
            StringBuilder sb = new StringBuilder();
            for (Text value:values){
                sb.append(value.toString()).append(",");
            }
            String result = sb.substring(0,sb.length()-1);
            context.write(key,new Text(result));
        }
    }
    @Override
    public int run(String[] strings) throws Exception {
        Configuration conf = getConf();
        Path input=new Path("/grms/rawdata/matrix.txt");
        Path output=new Path("/grms/rawdata/222");
        Job job = Job.getInstance(conf,this.getClass().getSimpleName());
        job.setJarByClass(this.getClass());

        job.setMapperClass(UserByListMapper.class);
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(Text.class);
        job.setInputFormatClass(TextInputFormat.class);
        TextInputFormat.addInputPath(job,input);

        job.setReducerClass(UserByListReduce.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);
        job.setOutputFormatClass(TextOutputFormat.class);
        TextOutputFormat.setOutputPath(job,output);
        return job.waitForCompletion(true)?0:1;
    }

    public static void main(String[] args) throws Exception {
        System.exit(ToolRunner.run(new UserByList(),args));
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

百数:用报表搭建生产进度看板,让生产更高效

现如今我国已经步入了全新的现代化科技时代&#xff0c;国内各个行业对于数字技术也在进行着不断地应用和研究。目前数字技术在企业生产管理系统的运用中具备较为显著的优势&#xff0c;其中生产进度看板就是数字化管理系统的重要应用之一。 生产进度看板是一种可视化管理系统…

计及电转气协同的含碳捕集与垃圾焚烧虚拟电厂优化调度附Matlab代码和论文复现

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Mysql性能测试主要内容

Mysql性能测试主要内容 相信很多做性能测试的朋友都知道&#xff0c;性能测试并不单单只是看服务器cpu、IO、内存、网络等&#xff0c;我们还需要了解Mysql性能&#xff0c;那么我们看看Mysql性能主要内容有哪些呢&#xff1f; MySql数据库介绍 Mysql相信大家做测试的&#…

领导科学论坛杂志领导科学论坛杂志社领导科学论坛编辑部2022年第10期目录

理论前沿 列宁《怎么办&#xff1f;》中理论斗争思想及其当代价值研究 游玲; 1-7 共青团引领青年思想的百年历程及经验启示 许丽珠; 8-14 新发展格局下推进乡村产业振兴的现实困境与实践进路 杨帆; 15-19 “三治融合”治理体系的内部逻辑与创新策略 皋媛;戢仕铭…

进阶 - Git的Feature分支

本篇文章&#xff0c;是基于我自用Linux系统中的自定义文件夹“test_rep”&#xff0c;当做示例演示 具体Git仓库的目录在&#xff1a;/usr/local/git/test_rep Git的Feature分支 软件开发中&#xff0c;总有无穷无尽的新的功能要不断添加进来。添加一个新功能时&#xff0c;你…

yolov4-tiny通过pytorch导出不带split算子的onnx

前言 最近一直忙于模型移植板端&#xff0c;用了不少厂家的sdk&#xff0c;发现挺多厂家的sdk都处于起步阶段&#xff0c;缺少一些技术支持&#xff0c;比如不支持五维向量&#xff0c;不支持一些onnx算子&#xff0c;不支持过深的模型结构&#xff0c;我最爱的Yolov5,v6,v7等…

阿里云公网部署openyurt集群添加本地边缘节点并支持metrics-server和prometheus

公网部署openyurt集群并支持metrics-server和prometheus删除以前的集群创建虚拟网卡初始化主节点安装kubeadm等初始化安装网络插件flannel根据官方文档调整部署OpenYurt的Control-Plane组件部署openyurt/openyurt组件部署kuboard方便可视化主节点改造使其可以部署metrics-serve…

字节算法中了80%!靠着这份GitHub上的算法小抄,成功斩获字节Offer

最近&#xff0c;GitHub上的算法小抄又火了&#xff01;已经有不少人靠它手撕算法题&#xff0c;拿下了字节、腾讯等大厂offer&#xff01; 不问不知道&#xff0c;这份刷题笔记来自FB高级架构师、ACM金牌选手。 这位大佬在刷题和打ACM比赛中总结出了经验和套路&#xff0c;又…

C#基础知识体系框架图,及起对应我发过的博客

自己工作开发C#上位机总结的&#xff0c;不好勿喷&#xff0c;更多资料去微软官网搜索就好 下面按照从基础到开发使用的顺序&#xff0c;对应我以前发过的链接&#xff08;后面再附上我自己的框架图&#xff09;&#xff1a; C#与C不同的一些基础命令_花开莫与流年错_的博客-…

深入理解Java中的三个修饰符(抽象(abstract)、静态(static)和最终的,不可变(final))【配视频】

&#x1f345;程序员小王的博客&#xff1a;程序员小王的博客 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 如有编辑错误联系作者&#xff0c;如果有比较好的文章欢迎分享给我&#xff0c;我会取其精华去其糟粕 &#x1f345;java自学的学习…

Linux文件系统上的特殊权限

Linux 的文件权限&#xff0c;远不止 rwx 那么简单&#xff0c;还有一些特殊权限是用来打破限制和默认的安全上下文规则的&#xff0c;除了之前介绍过的隐藏属性&#xff0c;还有几个显式的特殊权限。下面就来说说 Linux 文件系统上的 SUID&#xff0c;SGID 和 Sticky 权限。 …

Vue2基础篇-20-生命周期回调函数

1.vue2的生命周期 beforeCreate &#xff1a;在实例初始化之后,进行数据侦听和事件/侦听器的配置之前同步调用&#xff1b; created: 在实例创建完成后被立即同步调用; beforeMount: 在挂载开始之前被调用 mounted : 实例被挂载后调用; beforeUpdate&#xff1a; 在数据发生…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java民生租赁车辆管理信息系统w29s0

如果你自己基础不好或者是小白的情况下那就建议你选择网站、系统类的去做&#xff0c;但是还得问问你们导师&#xff0c;如果你们导师没问题就可以&#xff0c;因为有的导师是不愿意你们选择做网站、系统的&#xff0c;毕竟做的人比较多&#xff0c;重复率调高&#xff0c;选择…

springboot中统一日志管理

Springboot中统一日志管理 一、为什么要用日志&#xff1f; 一般分为两个大类&#xff1a;操作日志和系统日志 **操作日志&#xff1a;**用户在操作软件时记录下来的操作步骤&#xff0c;便于用户自己查看。主要针对的是用户。 **系统日志&#xff1a;**系统日志是记录系统…

zeno封装子图

选中想要封装的节点&#xff0c;点击编辑->简易子图 2. 设置输入输出&#xff08;可以有多个&#xff09; 最后&#xff0c;在main图中测试

CDGA|6大核心环节,详解医疗机构如何做好数据治理

医疗机构进行数据治理的过程&#xff0c;就是对其数据资产进行管理和控制&#xff0c;支撑并保障数据被安全高效地交换与应用的过程。 我们接下来主要从6个核心环节来详解医疗机构如何做好数据治理。 环节一&#xff1a;设立数据治理组织结构 设计健全的数据治理组织结构&…

网络配置(桥接仅主机自定义网络)

目录 一、网络模式简介 1.bridge模式&#xff08;默认桥接模式&#xff09; 总结&#xff1a;桥接模式的特点就在于&#xff0c;它所虚拟的服务器都有独立的IP 初始网络模式 2.host模式&#xff08;仅主机模式&#xff09; 总结&#xff1a;仅主机它不会分配IP&#xff0c…

java计算机毕业设计ssm校园考研互助网站71747(附源码、数据库)

java计算机毕业设计ssm校园考研互助网站71747&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

基于Android的校园二手闲置物品交易系统设计与实现

一、选题背景和意义 随着商品经济的快速发展&#xff0c;人们的生活中出现了大量的闲置物品&#xff0c;这种现象在当代大学生中尤为显著。大多数学生是通过摆地摊的方式来交易闲置物品&#xff0c;这种交易方式效率低下并且信息滞后。还有一部分学生通过BBS论坛来交易闲置物品…

springboot--web开发

使用springboot开发web项目 1&#xff09;、创建SpringBoot应用&#xff0c;选中我们需要的模块&#xff1b; web 2&#xff09;、SpringBoot会默认将这些场景配置好了&#xff0c;只需要在配置文件中指定少量配置就可以将项目运行起来 &#xff1b;/ 3&#xff09;、自己编…