协同过滤推荐算法(包括传统协同过滤、矩阵分解、NeuralCF)

news2024/9/29 1:27:38

一、什么是协同过滤推荐算法

传统的协同过滤(Collaborative Filtering, CF)是一种推荐系统技术,它基于用户的历史行为数据预测用户对未评分项目的潜在兴趣

协同大家的反馈、评价和意见一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。

传统协同过滤有两种主要的方法:用户-用户协同过滤(User-based Collaborative Filtering, UCF)和项目-项目协同过滤(Item-based Collaborative Filtering, ICF)。

、用户-用户协同过滤

用户-用户协同过滤的基本思路是找到与目标用户兴趣相似的其他用户(即相似用户),然后根据这些相似用户对物品的评分来预测目标用户对未评分物品的兴趣程度。

例子——问题:一是用户相似度到底该怎么定义,二是最后我们预测用户 X 对“电视机”的评价也是负面的,这个负面程度应该有一个分数来衡量,但这个推荐分数该怎么计算呢?

具体步骤如下

  1. 计算相似度:首先,需要计算用户之间的相似度——每个用户向量由该用户对所有物品的评分(从用户-物品评分表中来)组成。常用的相似度计算方法包括皮尔逊相关系数(Pearson correlation coefficient)、余弦相似度(Cosine similarity)、欧式距离等。
  2. 寻找相似用户:根据相似度计算结果,找到与目标用户最相似的一组用户。
  3. 加权评分预测:使用相似用户对未评分物品的评分,根据他们的相似度进行加权平均,来预测目标用户对该物品的评分。

三、项目-项目协同过滤

项目-项目协同过滤与用户-用户协同过滤类似,但其核心思想是找到与目标物品相似的其他物品,然后根据用户对这些相似物品的评分来预测用户对目标物品的评分。

先找出相似的项目(计算相似度),通过用户A对相似项目的评分来推测用户对项目的评分(加权平均)。

共现矩阵则是在项目-项目协同过滤中使用的,用于计算项目之间的相似度。——记录项目之间共同出现频率的矩阵(即两个项目同时被同一个用户评分的次数)。它并不直接参与预测评分,而是用于计算项目之间的相似度,进而帮助预测用户对未评分物品的评分。

优点和局限性
  • 优点:协同过滤方法不需要了解物品的具体属性,也不需要知道用户的具体偏好,只需要历史评分数据就可以进行推荐。
  • 局限性
    • 冷启动问题:新用户或新物品加入系统时,由于缺乏足够的历史数据,很难给出准确的推荐。
    • 稀疏性问题:随着用户和物品数量的增加,评分矩阵变得非常稀疏,这使得计算相似度变得困难。
    • 扩展性问题:当用户和物品的数量很大时,计算相似度和预测评分的计算量会变得非常大。

四、衍生模型——矩阵分解算法Netflix

出现原因:在用户历史行为很少的情况下,寻找相似用户的过程并不准确。矩阵分解算法加强了模型处理稀疏矩阵的能力。——帮助我们理解用户和物品之间的潜在联系,并预测用户对未评分物品的潜在兴趣

可能很稀疏

矩阵分解的主要过程,就是先分解协同过滤生成的共现矩阵,生成用户和物品的隐向量——先人为确定特征数量,然后初始化用户、物品特征矩阵,不断优化,得到隐向量,再通过用户和物品隐向量间的相似性进行推荐。

期望为每一个用户和视频生成一个隐向量,将用户和视频定位到隐向量的表示空间上(如图 2(b) 所示),距离相近的用户和视频表明兴趣特点接近,在推荐过程中,我们就应该把距离相近的视频推荐给目标用户。

五、如何用深度学习改造协同过滤——NeuralCF

传统的协同过滤方法主要依赖于用户-项目交互矩阵,并通过矩阵分解等技术来预测用户对未评分项目的偏好。然而,这些方法通常局限于线性的关系建模,这限制了它们捕捉复杂用户偏好模式的能力。

相比于矩阵分解算法,NeuralCF 用一个多层的神经网络,替代了矩阵分解算法中简单的点积操作,让用户和物品隐向量之间进行充分的交叉。通过改进物品隐向量和用户隐向量互操作层的方法,增强模型的拟合能力。

NeuralCF的模型结构图 (出自论文Neural Collaborative Filtering)

模型的泛化能力(generalization ability)是指模型在未见过的数据上表现的能力。一个好的模型不仅要在训练数据上表现良好,还应该能够在新的、未见过的数据上也表现出色。泛化能力是衡量模型质量的一个重要指标,因为它决定了模型的实际应用价值。

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

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

相关文章

IPD如何通过数字化项目管理平台落地实施?

随着市场竞争的日益激烈,企业对于产品研发的效率和质量逐渐提高,越来越多的企业关注到IPD(Integrated Product Development),希望参考IPD体系的方法理念和实践经验,从而帮助企业快速响应市场变化、缩短产品开发周期、提升产品开发…

step9:设置软件初始状态获取时不发送配置指令

文章目录 文章介绍问题描述效果图 解决办法下拉框控件ComboBox切换开关组件Switch数值微调框控件SpinBox 文章介绍 问题描述 虚拟端口(硬件)发送信号给客户端电脑,会设置此时硬件的各种基础参数, 客户端软件被设置基础参数之后&a…

计算机视觉——凸包计算

现在有一大堆点,然后你要找出一个可以围住这些点且面积最小的凸多边形,这个凸多边形称为凸包。 显而易见,如果要面积最小,那凸包的顶点势必得是这一大堆点的几个点,你也可以想成是用一条橡皮筋把这些点圈起来。 先把各…

什么是云原生?(一)

1. 前言 停下手头的工作,让你的同事定义“云原生”一词。你很可能会得到几个不同的答案。 1.1 让我们从一个简单的定义开始: 云原生架构和技术是一种设计、构建和操作在云中构建并充分利用云计算模型的工作负载的方法。 1.2 云原生计算基金会给出了官方…

easyexcel使用教程--导入导出简单案例

java中操作excel的库是poi,但是poi有很多问题,使用复杂,内存占用大等,阿里开源了一个操作excel的库叫easyexcel,它基于poi做了很多优化,平时读写excel建议使用这个库 文档地址: 关于Easyexcel | Easy Excel 官网 写入excel 在…

操作无法完成错误0x000006ba?教你几种全面解析与解决方案指南

错误代码0x000006ba通常与 Windows 操作系统中的远程过程调用(RPC)服务有关。当你在尝试执行某些操作,如连接到网络共享、运行某些网络服务或使用依赖于 RPC 的应用程序时,可能会遇到这个错误。接下来就和大家聊聊操作无法完成错误…

“揭秘CentosChina爬虫项目:掌握Scrapy框架的必备技巧与数据库设计“

Centoschina 项目要求 爬取centoschina_cn的所有问题,包括文章标题和内容 数据库表设计 库表设计: 数据展示: 项目亮点 低耦合,高内聚。 爬虫专有settings custom_settings custom_settings_for_centoschina_cncustom_settin…

鸿蒙(API 12 Beta2版)媒体开发【使用OHAudio开发音频播放功能(C/C++)】

OHAudio是系统在API version 10中引入的一套C API,此API在设计上实现归一,同时支持普通音频通路和低时延通路。仅支持PCM格式,适用于依赖Native层实现音频输出功能的场景。 使用入门 开发者要使用OHAudio提供的播放或者录制能力&#xff0c…

根据 IP 地址配置子网示例(下挂 hub 接不同 vlan 终端)

我们一般根据端口配置子网比较简单,但是如果换接口,就又要到交换机上重新配置端口所属 vlan 了,紧急情况下,还是比较耽误时间的。但如果根据IP地址配置 vlan,则可以插在交换机上任意端口,排障时比较节省时间…

部分PC制造商不会帮助英特尔第13/14代酷睿延保 对用户来说可能是个问题

早前英特尔已经宣布大部分第 13/14 代酷睿桌面处理器将可以获得延长保修服务,即后续使用出现非人为损坏的问题后,用户都可以联系英特尔换一颗新处理器。然而英特尔承担责任不代表对用户来说就高枕无忧,例如只有盒装版处理器才能直接联系英特尔…

MySQL数据库分区

文章目录 1. 分区的基本概念2. 分区的类型3. 在 MySQL 中实现分区3.1 创建分区表3.2 插入数据3.3 查询数据3.4 修改分区3.5 查看分区信息 4. 具体示例4.1 范围分区 (Range Partitioning)4.2 列表分区 (List Partitioning)4.3 哈希分区 (Hash Partitioning)4.4 键分区 (Key Part…

Win32注册表操作

注册表的概念 注册表是一个存储计算机配置信息的数据库,用于存储计算机上的硬件、安装的软件、系统设置以及用户账户配置等重要信息。对注册表的编辑不当可能会影响计算机的正常运行。应用程序可以调用API函数来对注册表进行增、删等操作。 注册表结构 运行Regedi…

【Redis 进阶】Redis 典型应用 —— 分布式锁

一、什么是分布式锁 在一个分布式的系统中,也会涉及到多个节点访问同一个公共资源的情况,此时就需要通过锁来做互斥控制, 避免出现类似于 “线程安全” 的问题。 而 Java 的 synchronized 或者 C 的 std::mutex,这样的锁都是只能在当前进程…

Embedding技术之Word Embedding

Word Embedding是什么? Word Embedding——词嵌入是将单词映射为数值向量,以捕捉单词间的语义和句法关系,为自然语言处理任务提供有效的特征表示。——自然语言处理——Word2Vec、GloVe、FastText。 Word Embedding属于静态向量&#xff0c…

深度学习入门(四):激活函数与LSTM

激活函数 激活函数在神经网络中扮演着至关重要的角色。它们的主要功能是引入非线性因素,这使得神经网络能够学习和近似任何非线性函数,从而处理复杂的数据模式和决策边界。如果没有激活函数,即使网络拥有很多层,其表达能力仍然只…

青岛国真携手图扑软件共建青岛西海岸区一网统管平台

为深入贯彻关于垃圾分类的重要指示精神,积极响应住房和城乡建设部开展的全国城市生活垃圾分类宣传周活动,5 月 25 - 27 日,以“发挥行业协会新动能 助力垃圾分类新时尚”为主题的“ 2023 垃圾分类高峰论坛”在青岛西海岸成功举办。 青岛国真智…

使用影子凭证进行域权限维持

本文来源无问社区,更对实战内容,渗透思路可前往查看http://wwlib.cn/index.php/artread/artid/15293.html Microsoft 推出了 Windows Hello 企业版 (WHfB),以使用基于密钥的信任模型替换传统的基于密码的身份验证。此…

【Material-UI】按钮组:尺寸与颜色详解

文章目录 一、按钮组概述1. 组件介绍2. 基本用法 二、按钮组的尺寸(Sizes)1. 小尺寸(Small)2. 中等尺寸(Medium)3. 大尺寸(Large) 三、按钮组的颜色(Colors)1…

gitea docker 快捷安装部署

前言 在前一篇博文(什么是 Gitea?)中,我们详细介绍了gitea的功能特性,以及其与其它git服务器之间的特性多维度对比。 在本文中,我们将详细介绍gitea的快捷安装部署,docker方式! 1…

qt客户端与服务端通信

服务器要一处于监听状态 客户端主动连接服务器 服务器的ui界面 客户端的ui界面 很简陋 服务端listen 按钮的槽函数 QHostAddress::Any,port 监听任何端口 void MainWindow::on_listen_clicked() {if(ui->lineEdit->text().isEmpty()){return ;}int port ui->li…