基于协同过滤算法的校园二手商城平台

2024-03-17 13:10

本文主要是介绍基于协同过滤算法的校园二手商城平台,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

👏作者简介:大家好,我是Rockey,不知名企业的不知名Java开发工程师
🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
📝联系方式:he18339193956,加我进群,大家一起学习,一起读书,一起对抗互联网寒冬👀

视频讲解

     最近给之前做的校园二手商城平台加了一个推荐算法,大家可以参考下面的视频以及下面的文字讲解。

基于协同过滤算法的校园二手商城

     经过调查,目前存在的推荐算法 目前,协同过滤、基于内容推荐和混合推荐三种算法在电商领域被广泛应用。本系统采用的是协同过滤算法,协同过滤算法分为基于用户的协同过滤算法以及基于物品的协同过滤算法,这两种的发展是根据实际情况不同逐渐演变的。

协同算法的历史

     协同算法是推荐系统中的一种常见算法,最早应该可以追溯到二十世纪六十年代。在那个时候,社会科学家和心理学家开始研究人们在不同情境下的行为,他们发现人们的决策往往受到周围人的影响。这种现象促使计算机科学家开始思考如何利用用户相似性来进行推荐。
     在1990年代末至2000年代初期,随着互联网的发展,电子商务网站迅速兴起,推荐系统的需求也越来越大,此时协同过滤算法逐渐成为一个研究热点。最具代表性的就是Netflix为了提高自己的推荐效果,发起的"百万美元推荐挑战赛",促进了推荐系统领域的技术突破和发展。之后,深度学习等人工智能技术的崛起,为推荐系统带来了新的可能性,例如使用基于神经网络的推荐算法,其中最具代表性的是Google推出的Wide&Deep模型和YouTube推出的DNN模型。尽管已经有了很多种推荐算法,但协同算法仍然是一个非常好的选择,并且在实践中被广泛应用。

协同过滤算法有那些分类

     协同过滤(Collaborative Filtering)是一种推荐算法,它基于用户行为数据(或收集的其它反馈信息),利用用户之间的相似性或物品之间的相似性来进行推荐。该算法分为两类:基于用户的协同过滤和基于物品的协同过滤。
     基于用户的协同过滤:首先计算用户之间的相似度,然后根据相似用户对物品的评分数据,对指定用户未评分的物品进行预测和排序,最后将预测得分高的物品推荐给该用户。这种方法的缺点是当用户数增加时,计算量会不断增加,而且存在“稀疏”问题,即用户对物品的评分数据往往是稀疏的。
     基于物品的协同过滤:首先计算物品之间的相似度,然后根据用户历史行为数据(如点击、购买、评分等)中涉及到的物品相似性,对用户没行为过的物品进行预测和排序,最后将预测得分高的物品推荐给该用户。这种方法相对于基于用户的协同过滤算法具有更好的稳定性和扩展性,但是需要预先计算物品相似度矩阵,而这个计算过程可能会比较耗时。
     除了以上两种常见的协同过滤算法,还有基于模型的协同过滤算法和混合方法等。基于模型的协同过滤算法通过建立模型来预测用户对物品的评分或行为,例如Matrix Factorization(矩阵分解)等;混合方法则将不同的算法和数据源结合起来进行推荐。

基于用户的协同过滤算法

关键点在于找到相似的用户 ,核心思想是人以群分,来给相似的用户推荐相同的商品,举例如下:
在这里插入图片描述
     从这个图中我们可以看出,用户A喜欢的物品有物品A,物品C;用户B喜欢的物品只有物品B;用户C喜欢的物品有物品A,物品C,物品D。我们可以看出用户A 和用户C的喜好很相似,因为其都购买了物品A以及物品C,这时候我们就可以把物品D推荐给用户A。
站在系统的层面考虑,主要是计算用户之间的相似度,就是如何计算和目标用户相似的人,
这个在下文有方法。

基于物品的协同过滤算法

     关键在于物品的相似,例如你购买了一件科比的篮球鞋科1,那么会为你推荐科比的科比4,根据物品的相似来进行一个推荐,下面是一个例子
![在这里插入图=blog.csdnimg.cn/39336a87972946f0b764d7b2d13f8fb0.png)
     用户A喜欢的有物品A,物品C;用户B喜欢的有物品A,物品B,物品C;用户C喜欢的有物品A;物品A和物品C相似,我们就可以给用户C推荐物品C。

校园二手商城平台采用的是基于用户的协同过滤算法,下面讲解具体过程,基于用户的协同过滤关键点在于找到与你相似的人,下面讲解几种常用的计算相似度的方法

皮尔逊相关系数

计算X与Y的线性相关性:
在这里插入图片描述
     皮尔逊相关系数的取值范围,为[-1,1],其绝对值越接近1相关性越强,绝对值越接近于0,相关性越弱,相关系数小0时说明两个变量之间呈现负相关,大于0,则为正相关,对于相关性强度可以参考下表:
在这里插入图片描述
计算过程:

Cov(X,Y)为协方差,D(X),D(Y)为方差
g.cn/de43d98d078b4e41a31003124b8737fb.png)
有下面四个公式可以进行计算:
在这里插入图片描述
关于公式四,我进行简单的推导,过程如下:
在这里插入图片描述

欧式距离

     欧式距离(Euclidean Distance)是指在数学上欧几里得空间中两点间的距离,也称为欧几里得度量。它是指在多维空间中,两个向量之间的物理距离,是最常见的距离度量方法之一。欧氏距离定义为两个向量之间的欧几里得范数,即两点之间的直线距离。在二维或三维空间中,欧式距离可以直观的理解为两点之间的直线距离。
在这里插入图片描述
欧式距离公式为:
在这里插入图片描述

校园二手商城平台中用户之间相似度的计算是通过皮尔逊相关系数来计算的

系统实现

     上面说了相似度,那么用户的相似度,反应在代码层面就是两个用户都对物品的喜爱,这个喜爱,我们可以通过用户点击商品的详情,收藏商品以及购买商品反应出来。
这里我们建一个recommend表,表中记录用户的userid,商品的commid,以及score,得分就是用户对商品的喜爱度,
在这里插入图片描述
代码中浏览商品详情一次,我会把得分加一,这个也可自己设置
在这里插入图片描述
收藏商品一次,分值会加3
在这里插入图片描述
购买一次会加5分
在这里插入图片描述

这样通过记录用户的历史操作,在表中记录其对物品的喜爱,然后用根据表中其他的用品给其做推荐,推荐其还没购买的商品

用户刚登录或者没有登录的情况下,是猜您喜欢页面中是没有数据的,
在这里插入图片描述
具体的流程如如下所示;
在这里插入图片描述

结语

🔥一个人可以掌握知识,但只有与他人交流才能形成智慧。
🔥One person can acquire knowledge, but wisdom is formed only in the exchange with others.
📝 欢迎大家关注博主公众号 Rockey小何同学 添加博主微信:he18339193956进群,一起学习,一起成长,一起提高认知。
🏆 我坚信人与人之间的差距是表面上是财富的差距,本质上是大脑中认知的差距,

我们下期再见。

这篇关于基于协同过滤算法的校园二手商城平台的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/he1234555/article/details/130470380
http://www.chinasem.cn/article/819047

相关文章

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringIntegration消息路由之Router的条件路由与过滤功能

《SpringIntegration消息路由之Router的条件路由与过滤功能》本文详细介绍了Router的基础概念、条件路由实现、基于消息头的路由、动态路由与路由表、消息过滤与选择性路由以及错误处理... 目录引言一、Router基础概念二、条件路由实现三、基于消息头的路由四、动态路由与路由表五、消息过滤

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

java streamfilter list 过滤的实现

《javastreamfilterlist过滤的实现》JavaStreamAPI中的filter方法是过滤List集合中元素的一个强大工具,可以轻松地根据自定义条件筛选出符合要求的元素,本文就来... 目录1. 创建一个示例List2. 使用Stream的filter方法进行过滤3. 自定义过滤条件1. 定

Redis如何实现刷票过滤

《Redis如何实现刷票过滤》:本文主要介绍Redis如何实现刷票过滤问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录引言一、概述二、技术选型三、搭建开发环境四、使用Redis存储数据四、使用SpringBoot开发应用五、 实现同一IP每天刷票不得超过次数六

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1