协同过滤之矩阵分解算法问题详解

news2024/9/23 21:18:48

1、矩阵分解出现的原因

传统的协同过滤依赖用户的历史行为来推测用户对未评分商品的评分(潜在兴趣),不需要了解物品的具体属性,也不需要知道用户的具体偏好,只需要历史评分数据就可以进行推荐,存在以下问题:

  • 冷启动:新用户、新商品(没有历史行为信息的用户和商品)进行预测评分时就很难准确,难以做出有效的推荐。
  • 过于稀疏:用户-物品评分矩阵通常是高度稀疏的,这意味着大多数用户并没有对大多数物品进行过评分,这导致基于相似性的推荐算法效果不佳。
  • 计算量变大:随着用户和物品数量的增加,基传统的协同过滤的计算复杂度急剧上升,这限制了其在大规模数据集上的应用。

所以需要优化算法,我们迎来了矩阵分解算法,改进后的矩阵分解算法加强了处理稀疏矩阵的能力,能够理解用户和物品之间的潜在关系,可以预测更多可能性。

那么它是如何做到的?答案是通过隐向量做到的。

问题又来了,用户隐向量和物品隐向量是什么?矩阵分解是如何产生用户和物品隐向量的?为什么它们通过点积操作就可以理解潜在关系并且预测对未评分物品的兴趣,拿到了更多可能?

2、如何产生用户隐向量和物品隐向量?

用户-物品评分矩阵 R 是一个 m×n的矩阵,其中 m 是用户数量,n 是物品数量。矩阵中的每个元素 Rij 代表用户 i对物品 j的评分。如果用户 i 没有对物品 j 进行评分,则该位置是空缺的或标记为 0。

矩阵分解的目标是找到两个低秩矩阵U 和 I,其中 U 是用户隐向量矩阵,I 是物品隐向量矩阵,k 是隐向量的维度,一般远小于用户数 m 或物品数 n,使得 R≈U*(I的转置矩阵)

  • 用户隐向量矩阵U:这是一个 m×k 的矩阵,每一行代表一个用户的偏好向量。
  • 物品隐向量矩阵 I:这是一个 n×k 的矩阵,每一行代表一个物品的特征向量。

通过训练、迭代、更新用户隐向量矩阵U 和物品隐向量矩阵 I ,得到能够较好地近似原始评分矩阵 R的低秩稠密矩阵。

3、用户隐向量和物品隐向量是什么?

这些隐向量通常位于一个低维空间中,上面生成了m个用户隐向量和n个物品隐向量,它们每个隐向量都有k维,每个维度可以看作是一种潜在的特征或兴趣维度,这些隐向量揭示了用户和物品之间的潜在特征(比如用户对该潜在特征的偏好程度,物品该潜在特征的明显程度),尽管这些特征通常是不可解释的。但我们可以认为,每个维度反映了用户对某种类型的偏好以及物品的相应属性。

因为用户隐向量和物品隐向量在同一个坐标系中,所以可以通过计算距离和点积操作确定用户偏好和物品的契合程度,距离越近说明契合程度越高,用户对物品的潜在兴趣就越高。向量的点积操作会得到一个标量(简单来说就是一个常数),表示用户和物品在隐向量空间中的相似度,值越大,说明用户对物品的潜在兴趣就越高。

4、隐向量有什么用处?

降低计算量和复杂度:通过将整个稀疏的评分矩阵分解为低维稠密的用户隐向量矩阵和物品隐向量矩阵,实现了更好处理稀疏矩阵,显著减少计算量和存储需求。

预测未知评分:通过计算用户隐向量和物品隐向量的点积,即使在原始评分矩阵中没有直接的交互,也可以预测用户对未评分物品的潜在兴趣。

捕获潜在关系:即使用户没有对某个物品进行评分,也可以基于用户和物品的隐向量推断出潜在的兴趣,从而提供更准确的推荐。

减轻冷启动带来的影响:并不是指完全消除这一问题,而是设置隐向量初始值,随着新用户和新物品获得更多的交互数据,这些隐向量将变得越来越准确,从而提高推荐的质量。

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

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

相关文章

Query @azure/openai with images?

题意:使用图像与azure/openai进行交互或查询 问题背景: On chat.openai.com I can upload an image and ask chatgpt a question about it, with the existing openai and azure/openai api however there doesnt seem to be a way to do this? The Ch…

QT+ffmpeg环境配置

1.新建一个qt项目 2.下载ffmpeg文件Releases BtbN/FFmpeg-Builds GitHub 3.解压后,打开qt项目地址,将ffmpeg文件复制进qt项目 4.打开新建的qt项目头文件新加入如下内容:(如有需求可按需求添加) INCLUDEPATH $$PWD/i…

【多线程-从零开始-捌】阻塞队列,消费者生产者模型

什么是阻塞队列 阻塞队里是在普通的队列(先进先出队列)基础上,做出了扩充 线程安全 标准库中原有的队列 Queue 和其子类,默认都是线程不安全的 具有阻塞特性 如果队列为空,进行出队列操作,此时就会出现阻…

114套新闻网站源码+采集规则+安装使用教程-网络公司建站资源

运行环境 PHP5.6MYSQL5.6 – 系统版本支持WindowsLinux 源码介绍 1.版权问题 本114套新闻源码均由EYOUCMS系统二次开发而成,因为系统不涉及会员功能,所以没有版权纠纷问题,客户可以一直免费使用。 2.自动采集发布 系统自身集成了网易,新…

odoo17 翻译一个小bug

odoo17 翻译一个小bug 用户界面的没译过来 标红处,但在zh_CN.po中明显已经翻译过来了,采取暴力点的,直接把base下的base.pot删除,再更新一下,可以正常显示了

【区块链+社会公益】腾讯志愿者公益平台 | FISCO BCOS应用案例

由腾讯技术公益团队主导的“公益志愿者平台”,旨在链接公益组织和志愿者。公益组织入驻平台后可以发布公 益活动、征集志愿者,志愿者可以在平台报名参加公益活动、获得公益组织和平台联合颁发的志愿服务证书。 腾讯技术公益采用了微众区块链技术对 “公…

【Linux】网络编程套接字Scoket:UDP网络编程

目录 一、了解UDP协议 二、了解端口和IP地址 三、套接字概述与Socket的概念 四、Socket的类型 五、 Socket的信息数据结构 六、网络字节序与主机字节序的互相转换 七、地址转换函数 八、UDP网络编程流程及相关函数 socket函数 bind函数 recvfrom函数 sendto函数 …

网站开发涉及到的技术内容介绍——后端PHP(2)

网站开发涉及到的技术内容介绍——后端PHP(1)https://blog.csdn.net/xiaochenXIHUA/article/details/141000752?spm=1001.2014.3001.5501 一、PHP的常用函数 1.1、PHP文件夹的常用函数 PHP的目录常用函数 序号目录常用函数说明1$_SERVER[DOCUMENT_ROOT]获取到PHP项目的根目…

C++ -- 负载均衡式在线OJ (一)

一、项目宏观结构 1.项目功能 本项目的功能为一个在线的OJ,实现类似leetcode的题目列表、在线提交、编译、运行等功能。 2.项目结构 该项目一共三个模块: comm : 公共模块compile_server : 编译与运行模块oj_server : 获取题目列表,查看题…

Spring Boot项目缺少配置文件的解决方法:IDEA

本文介绍在IntelliJ IDEA软件中,为Spring Boot项目添加配置文件的操作方法。 最近,在IntelliJ IDEA软件中新创建了一个Spring Boot项目,是通过如下图所示的方法直接新建的。 但是,随后发现这样创建的Spring Boot项目没有配置文件。…

Threejs实现鼠标控制相机+键盘控制模型+点击指定点控制模型移动

1.前言 Threejs实现鼠标控制相机功能,键盘控制模型功能,点击指定点控制模型移动功能 键盘使用WASD控制模型移动效果图: 鼠标移动可控制相机的位置控制模型移动到指定点效果图: 2.功能拆分 根据以上效果图,可以得到以下三个主要实现的功能 鼠标移动可以使相机跟随通过键…

leetcode-121-买卖股票的最佳时机

原理: 核心原理: 如果我们真的在买卖股票,我们肯定会想:如果我是在历史最低点买入就好了!该历史最低点是指卖出当天之前的历史最低点而不是全局最低点。 实现步骤: 1、初始化变量preprices[0]表示历史股…

20240809 每日AI必读资讯

乒乓球AI机器人赢了人类!正反手灵活转换,擦网球高球都能接 - 谷歌发布首个达到人类竞技水平的机器人Agent,挑战乒乓球赛场。 - 机器人通过学习大量乒乓球状态数据,掌握了正手上旋球、反手瞄准等技能,展现出高速运动…

CTFHUB | web进阶 | PHP | Bypass disable_function | bypass iconv 2

开启题目 查看源码,发现可以蚁剑连接 进入之后无发现,使用插件 iconv 上传脚本 进入之后发现多了一个 .antproxy.php,复制文件名重新拼接连接 进入终端,查看根目录之后发现了有两个 flag 文件,之后发现了本题的 flag

STM32CUBEMX+PWM多一个尖峰的问题

问题描述:使用TIM2的通道3产生PWM波形,产生n个数量的波形后,在停止的时候会有一个尖峰。 怀疑是自动重载值临界的时候有问题,对重载值多减一个值,但还是有这个问题。 解决:电路是默认低电平,我…

skynet 连接redis

文章目录 概述main.luaagent.luaredis.lua 小结 概述 之前写过skynet 入门篇,还有skynet实操篇;这2篇,主要写了skynet如何使用,还有些skynet的调用流程之类。 其实,看过skynet的demo之后,发现skynet中没有…

L1-书生·浦语大模型全链路开源体系介绍

视频观看地址:书生浦语大模型全链路开源开放体系_哔哩哔哩_bilibili 本视频介绍了书生葡语大模型的开源开放体系,包括技术发展、性能提升、模型架构、开源生态等。 要点: - 🌟 开源开放体系涵盖数据收集、标注、训练、微调、评测、部署等全…

Ubuntu 系统的部署和基础操作(使用)

​ 大家好,我是程序员小羊! 前言 Ubuntu 是一款基于 Debian 的开源 Linux 操作系统,以其易用性和强大的社区支持而广受欢迎。对于许多初次接触 Linux 的用户来说,Ubuntu 是理想的入门选择。本文将介绍 Ubuntu 系统的基本操作和使用…

cordova打包后请求不到接口(接口请求失败)

原因:CORS跨域问题导致 解决方法: 将根目录下的config.xml打开,添加 preference 即可

10分钟学会docker安装与使用

文章目录 1、docker简介2、docker的基本组成3、docker的安装与配置4、docker的常用命令 1、docker简介 什么是容器? 它是一种虚拟化的方案,是操作系统级别的虚拟化,只能运行相同或相似内核的操作系统,依赖于Linux内核特性&#x…