【机器学习300问】50、什么是基于用户的协同过滤算法?

news2024/11/18 7:29:31

一、 基于用户的协同过滤算法直观感受

        假设你在一家大型书店,店主不仅知道你过去的购买记录,还了解其他所有顾客的购买行为。当你要寻找下一本喜欢的书籍时,店主不是根据书籍本身的属性来推荐(比如作者、类型),而是参考了那些与你有着相似购书品味的“好友”。

        如果你和另一位用户都喜欢科幻小说A、B和C,并且他还喜欢D,而你还没有读过D,那么基于你们相似的阅读口味,系统就可能推荐科幻小说D给你。

        在这里例子中,书店的店主会收集用户的行为数据(例如你的购买行为),协同过滤算法会比较每位用户与其他用户之间的喜好相似度。例如,通过计算两用户对共同看过电影的评级差异程度来量化他们的相似偏好。

        一旦找到与你喜好最接近的“邻居”用户又叫做“好友”,系统就会查看这些“邻居”的评价记录中哪些是你还没接触过的,并且他们给予高分的项目,把这些项目推荐给你。

二、 基于用户的协同过滤算法定义

        基于用户的协同过滤(User-based Collaborative Filtering, UBCF)是一种推荐系统算法,它可以被形象地比喻成一种“好友建议模式”。这里的“好友”不一定是你真的好朋友,而是指算法计算出你和他具有高度相似性。

图书推荐场景

        让我们用一个图书推荐的场景来详细介绍UBCF,有三个用户分别是Alice、Bob和Carol,还有五本小说A,B,C,D,E。如果用户购买了,就标记为1,如果未购买就标记为0。

用户小说A小说B小说C小说D小说E推荐
Alice11100小说D
Bob10110
Carol11111

三、基于用户的协同过滤算法的步骤

(1)收集用户行为数据

        创建一个用户-物品评分矩阵,这里虽然没有具体评分数值,但可以将购买行为视为高分1,没有购买视为低分0,就是上面这个表格。

(2)计算用户相似度

        这里用余弦相似度为例来计算书籍购买记录中顾客Alice和顾客Carol之间的相似度。余弦值越接近1,表示两个顾客的购买行为越相似。他们两个的购买记录向量在表中可以查到

  • 顾客Alice的购买记录向量:Alice = [1, 1, 1, 0, 0]
  • 顾客Carol的购买记录向量:Carol = [1, 1, 1, 1, 1]

余弦相似度公式

\text{Similarity}= \frac{A \cdot C}{\|A\| \cdot \|C\|}

计算点积 (A · C),也就是分子部分,对应相乘相加:

1*1 + 1*1 + 1*1 + 0*1 + 0*1 = 3

计算向量A和向量C的欧几里得范数(向量长度):

\|A\| = \sqrt{1^2 + 1^2 + 1^2 + 0^2 + 0^2} = \sqrt{3}

\|C\| = \sqrt{1^2 + 1^2 + 1^2 + 1^2 + 1^2} = \sqrt{5}

带入公式得到:

\text{Similarity} = \frac{3}{\sqrt{3} * \sqrt{5}}\approx 0.7746

(3)选择相似用户【检索】

        同理,可以把其他用户与Alice的相似度全部计算出来。本例中我们只需要再计算Bob和Alice的余弦相似度就好,让我们再一步步计算一下:

  • 第一步、计算Alice和Bob购书记录向量的点积 (A · B)

1*1 + 1*0 + 1*1 + 0*1 + 0*0 = 2

  • 第二步、计算向量A和向量B的欧几里得范数(向量长度)

\|A\| = \sqrt{1^2 + 1^2 + 1^2 + 0^2 + 0^2} = \sqrt{3}

\|B\| = \sqrt{1^2 + 0^2 + 1^2 + 1^2 + 0^2} = \sqrt{3}

  • 第三步、带入余弦相似度的计算公式

\text{Similarity} = \frac{A \cdot B}{\|A\| \cdot \|B\|}\approx 0.6667 

用户与Alice的相似度
Carol0.7746
Bob0.6667

(4)生成推荐列表【排序】

        对于目标用户Alice,检索其最相似用户的购买记录,找出他们购买了而目标用户未购买的物品。本例中最相似的用户是Carol,它有两本书D和E是Alice没看过的。给定一个阈值或者按照相似用户对该书的喜爱程度加权排序,确定推荐顺序。这里关于加权排序不展开说了,只需要知道小说D被更多的人喜欢,所以排在前面。

推荐物品
小说D
小说E

        由于Alice没有购买D和E,而Carol购买了全部且与Alice有较多的交集,因此推荐的排序就是小说D和E

(5)进行推荐

        将最终推荐列表展示给目标用户Alice,如果只推荐1本书的话,就告知Alice系统推荐他尝试购买小说D。

三、基于用户的协同过滤算法有什么缺点?

  • 数据稀疏性问题:在实际的用户-物品交互数据集中,往往大部分用户只对一小部分物品有过行为(如评分、购买等),这导致用户间的相似度计算基础不足,数据稀疏性会降低推荐的准确性。

  • 冷启动问题:对于新加入系统的用户,由于没有足够的历史行为数据,算法无法为其找到足够相似的用户来进行有效推荐。同样,对于系统中新添加的物品,也难以快速获得推荐。

  • 可扩展性受限:随着用户数量的增长,计算用户之间的相似度矩阵变得越来越耗时,内存占用也会大幅度增加。当用户基数庞大时,实时更新和计算用户相似度矩阵成为一项挑战。

  • 流行度偏见和同质化问题倾向于推荐那些已经被很多用户评分或购买的流行物品,而那些较少人知道的物品很难被推荐。用户容易被推荐总是相似的物品,从而降低了推荐多样性,可能会导致用户感到厌倦或失去探索新内容的机会。

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

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

相关文章

RPC 快速入门

一、What 1)小故事 张三和李四都在同一个家公司负责商品交易的模块,两个人平时开发甚是紧密。 🙋🏻‍♂️ 张三:“李四,我这边一个商品下单了,但是付款数额不对,你帮我查下支付有没…

【应用笔记】LAT1305+使用STM32+TT类型IO的注意事项

1. 概述 在 STM32 系列 MCU 中, 除了一些特殊管脚外,绝大多数管脚都可以分类为 FT (兼容5V 信号)或 TT(兼容 3V3 信号)类型的 IO,由于 MCU 内部设计的不同, TT IO 相比 5V IO 有更多的限制,下面…

【机器学习】包裹式特征选择之序列前向选择法

🎈个人主页:豌豆射手^ 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进…

Jenkins中使用Generic Webhook Trigger插件实现持续集成

项目环境 宝塔Linux面板DockerJenkinsgitee 目的 实现每次push推送dev分支到gitee上,Jenkins自动构建项目;push其它分支时,不运行。 实现方法 1.在Jenkins上安装Generic Webhook Trigger插件 在“系统设置–插件管理–可选插件”界面搜…

1-Flume中agent的source

Flume(1.11.0版本) 简介 概述 Flume本身是由Cloudera公司开发的后来贡献给了Apache的一套针对日志数据进行收集(collecting)、汇聚(aggregating)和传输(moving)的机制 Flume本身提供了简单且灵活的结构来完成日志数据的传输 Flume有两大版本&#x…

有道翻译实现接口加密解密

文章目录 目标简单逆向分析源码深度逆向分析参考文献目标 实现对网易有道 sign 等参数的加密 及 返回的密文数据解密实现 简单逆向分析 首先在右上角提前登录好账号信息。 输入中文:你好 要求翻译成:英文 全局搜索:你好 或 hello,结果没有发现什么。 切换 Fetch/XHR …

JAVA毕业设计131—基于Java+Springboot+Vue的餐厅点餐系统(源代码+数据库+4000字文档)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的餐厅点餐系统(源代码数据库4000字文档)131 一、系统介绍 本项目前后端分离,分为管理员、用户两种角色 1、用户: 注册、登录、点餐…

移动0【双指针】

移动零 cur每次走一步&#xff0c;dest走不走取决于cur有没有找到非0值&#xff0c;一旦找打非0值&#xff0c;交换。不是非0值&#xff0c;dest不动。》【非零&#xff0c;dest】【dest&#xff0c;0】 class Solution { public:void moveZeroes(vector<int>& num…

电脑不能读取移动硬盘,但是可以读取U盘解决方法

找到此电脑 右键设备管理器&#xff0c;找到其中的通用串行总线控制器。 注意&#xff0c;凡是插入到电脑当中不能读取的U盘或者移动硬盘&#xff0c;都会在通用串行总线控制器当中显示为USB大容量存储设备 鼠标选中“USB大容量存储设备”&#xff0c;右键卸载它。此时&#x…

[项目前置]websocket协议

websocket协议介绍 WebSocket 协议是一种在单个 TCP 连接上进行全双工通讯的协议。 WebSocket 使得客户端和服务器之间的数据交换变得更简单&#xff0c;允许服务器主动向客户端推送数据。它在 2011 年成为国际标准&#xff0c;现在被所有现代浏览器支持。WebSocket 设计用于…

【蓝桥杯选拔赛真题72】python找路线 第十四届青少年组蓝桥杯python选拔赛真题 算法思维真题解析

目录 python找路线 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python找路线 第十四届蓝桥杯青少年组python比赛选拔赛真题 一、题目要求 …

mysql基础2多表查询

多表查询 多表关系: 一对多 案例: 部门 与 员工的关系 关系: 一个部门对应多个员工&#xff0c;一个员工对应一个部门 实现: 在多的一方建立外键&#xff0c;指向一的一方的主键 多对多 案例: 学生 与 课程的关系 关系: 一个学生可以选修多门课程&#xff0c;一门课程也可以…

鸿蒙实战开发:【7日天气预报】

先来看一下效果 本项目界面搭建基于ArkUI中TS扩展的声明式开发范式&#xff0c; 数据接口是[和风&#xff08;天气预报&#xff09;]&#xff0c; 使用ArkUI自带的网络请求调用接口。 我想要实现的一个功能是&#xff0c;查询当前城市的实时天气&#xff0c; 目前已实现的功…

阿里云服务器价格表2024,最新报价2核2G/2核4G/4核8G/8核16G/16核32G

2024年腾讯云服务器优惠价格表&#xff0c;一张表整理阿里云服务器最新报价&#xff0c;阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单&#xff0c;大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…

【嵌入式学习】Qtday03.24

一、思维导图 二、练习 QMovie *mv new QMovie(":/Logo/giphy (2).gif");ui->label_5->setMovie(mv);ui->label_5->setScaledContents(true);mv->start();this->setWindowIcon(QIcon(":/Logo/bdf48b5198c8417da0e4fef6b72c5657.png"));/…

mysql 存储引擎 基本介绍

目录 一 存储引擎概念介绍 &#xff08;一&#xff09;存储引擎概念 &#xff08;二&#xff09;MySQL常用的存储引擎 &#xff08;三&#xff09;存储引擎运作方式 二 MyISAM 存储引擎介绍 &#xff08;一&#xff09; MyISAM 存储引擎特点 1&#xff0c;不支持…

WorkPlus AI助理,为企业提供智能化客户服务,助力企业发展与竞争力

在当今竞争激烈的商业环境中&#xff0c;提供优质高效的客户服务是企业取得成功的关键。而AI智能客服的崛起&#xff0c;以其卓越的性能和功能&#xff0c;助力企业提升客户服务体验。WorkPlus AI助理作为一款领先的解决方案&#xff0c;能够实现智能化客户服务&#xff0c;满足…

SVN的branch分支合并完要不要删除

在 SVN 中&#xff0c;当一个分支&#xff08;branch&#xff09;的工作已经完成并成功合并回主干&#xff08;trunk&#xff09;后&#xff0c;通常不需要立即删除该分支。保留分支可以有一些好处&#xff0c;例如&#xff1a; 历史记录和追溯&#xff1a;保留分支可以帮助团…

蓝桥杯练习04学生成绩统计

学生成绩统计 介绍 随着大数据的发展&#xff0c;数据统计在很多应用中显得不可或缺&#xff0c;echarts作为一款基于JavaScript的数据可视化图表库&#xff0c;也成为了前端开发的必备技能&#xff0c;下面我们一起来用echarts开发一个学生数据统计的柱形图。 准备 开始答…

性能调优专题并发编程专题(持续更新)

一、性能调优专题 MySQL相关 一、深入理解MySQL索引底层数据结构与算法 索引概念&#xff1a;索引是帮助MySQL高效获取数据的排好序的数据结构 索引数据结构&#xff1a; 1、二叉树 缺点&#xff1a;当索引字段有序的时候&#xff0c;不会自动平衡二叉树&#xff0c;数据…