一文搞懂基于用户的协同过滤推荐算法

2023-11-03

        本文针对无上下文信息的隐性反馈数据集(每一条行为记录仅仅包含用户ID和物品ID),介绍基于用户的协同过滤算法原理。
        基于用户的协同过滤推荐算法本质:找到和待推荐用户相似的用户群,推进该用户群感兴趣且待推荐用户没购买过的物品。例如下图中, 用户a购买过物品A、C,用户c购买过物品A、C、D ,则用户a和用户c比较相似,可以考虑把物品D推荐给用户a。
在这里插入图片描述
基本步骤

  1. 找到和待推荐用户相似的用户群;
  2. 找到这个用户群中用户感兴趣的,且待推荐用户没购买过的物品。

为便于理解,本文后面示例的计算中使用下面数据: 第一列为索引,userId是用户标识,itemsId表是用户购买过的物品ID。
在这里插入图片描述

1. 用户相似度计算

        给定用户 u u u和用户 v v v,令 N ( u ) N(u) N(u)表示用户 u u u点击过的物品集合,令 N ( v ) N(v) N(v)为用户 v v v点击过的物品集合

余弦相似度
W u , v = ∣ N ( u ) ⋂ N ( v ) ∣ ∣ N ( u ) ∣ ∣ N ( v ) ∣ W_{u,v} = \frac{|N(u) \bigcap N(v)|} {\sqrt{|N(u)| | N(v)|}} Wu,v=N(u)N(v) N(u)N(v)        其中 ∣ ∗ ∣ |*| 表示取模,即物品的个数。

Jaccard公式
W u , v = ∣ N ( u ) ⋂ N ( v ) ∣ ∣ N ( u ) ⋃ N ( v ) ∣ W_{u,v} = \frac{|N(u) \bigcap N(v)|} {|N(u) \bigcup N(v)|} Wu,v=N(u)N(v)N(u)N(v)
【例】根据上述数据,生成每个用户购买过的商品列表
在这里插入图片描述
        可据此计算用户相似度,例如计算用户A和B的余弦相似度
W A , B = ∣ { 1 , 2 , 5 } ⋂ { 1 , 3 , 4 } ∣ ∣ { 1 , 2 , 5 } ∣ ∣ { 1 , 3 , 4 } ∣ = 1 3 W_{A,B} = \frac{| \{1,2,5\} \bigcap \{1,3,4\} |} {\sqrt{| \{1,2,5\}| | \{1,3,4\} |}} = \frac{1} {3} WA,B={1,2,5}{1,3,4} {1,2,5}{1,3,4}=31
        上面公式中需要对任意两个用户计算相似度,这种方法的时间复杂度是 O ( U 2 ) O(U^2) O(U2),其中 U U U标识用户数。当用户数量大时,计算起来会很费时。其实,并不是所有用户购买过的物品都有交集,即存在 ∣ N ( u ) ⋂ N ( v ) ∣ = 0 |N(u) \bigcap N(v)|=0 N(u)N(v)=0。因此,可以先计算出 ∣ N ( u ) ⋂ N ( v ) ∣ ≠ 0 |N(u) \bigcap N(v)| \neq 0 N(u)N(v)=0的用户对 ( u , v ) (u,v) (u,v),然后再除以相似度中的分母得到用户的相似度矩阵。

用户相似度计算的步骤如下:

  1. 建立物品到用户的倒排表,对于每个物品,保存购买过该物品的用户列表;
            【例】生成商品到用户的倒排表
    在这里插入图片描述
  2. 初始化用户相似度矩阵 W W W U ∗ U U*U UU维度的全零矩阵,遍历倒排表,对每个物品对应的用户列表求2个元素的排列,然后将每个排列值作为 W W W的索引进行加1。(例如物品I对应的用户列表为[a,b],则排列为{(a,b)},更新 W [ a ] [ b ] = W [ a ] [ b ] + 1 W[a][b]=W[a][b]+1 W[a][b]=W[a][b]+1和$ W [ b ] [ a ] = W [ b ] [ a ] + 1 W[b][a]=W[b][a]+1 W[b][a]=W[b][a]+1
            【例】根据倒排表生成用户间相同商品购买量统计矩阵
    在这里插入图片描述
  3. 步骤2执行结束后,得到的是每个用户与其他用户购买相同商品的个数,即相似度的分子,要计算相似度,还需要处于分母。以余弦相似度为例,遍历 W W W的下三角矩阵(或是上三角矩阵),计算 s i m u , v = W [ u ] [ v ] / ∣ N ( u ) ∣ ∣ N ( v ) ∣ sim_{u,v}=W[u][v] / \sqrt{|N(u)||N(v)|} simu,v=W[u][v]/N(u)N(v) ,其中 u , v u,v u,v W W W的索引。更新 W [ u ] [ v ] = W [ v ] [ u ] = s i m u , v W[u][v] = W[v][u] = sim_{u,v} W[u][v]=W[v][u]=simu,v
            【例】 除以计算相似度的分母,得到相似度矩阵
    在这里插入图片描述

2. 生成推荐列表

根据用户相似度,计算待推荐用户 u u u对与其最相似的 K K K个用户购买过商品 i i i的感兴趣程度:
p ( u , i ) = ∑ v ∈ S ( u . K ) ⋂ N ( i ) W u , v r v , i p(u,i) = \sum_{v \in S(u.K) \bigcap N(i)}W_{u,v}r_{v,i} p(u,i)=vS(u.K)N(i)Wu,vrv,i其中, S ( u . K ) S(u.K) S(u.K)为和用户 u u u兴趣最接近的 K K K个用户, r v , i r_{v,i} rv,i代表用户对物品 i i i的兴趣,因为只是用了行为数据,所以 r v , i = 1 r_{v,i}=1 rv,i=1.
        【例】生成推荐列表
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一文搞懂基于用户的协同过滤推荐算法 的相关文章

  • 全链接神经网络python简单实现

    什么是全链接神经网络 full connected FC 借用此图来直观的表示一下 规则如下 神经元按照层来布局 最左边的层叫做输入层 负责接收输入数据 最右边的层叫输出层 我们可以从这层获取神经网络输出数据 输入层和输出层之间的层叫做隐藏

随机推荐

  • linux新版本io框架 io_uring

    从别的博主那copy过来 1 io uring是Linux内核的一个新型I O事件通知机制 具有以下特点 高性能 相比传统的select poll epoll等I O多路复用机制 io uring采用了更高效的ring buffer实现方式
  • Qt关于tabWidget中tab样式的重绘

    Qt关于tabWidget中tab样式的重绘 版本说明 版本 作者 日期 备注 0 1 loon 2018 12 29 初稿 目录 文章目录 Qt关于tabWidget中tab样式的重绘 版本说明 目录 一 需求分析 二 最终效果展示 三
  • windows操作系统上启用SSLv3协议引发的威胁

    一 主机启用SSLv3协议引发的威胁 远程主机受到称为POODLE的中间人 MitM 信息泄露漏洞的影响 该漏洞是由于SSL 3 0在解密使用密码块链接 CBC 模式下的块密码加密的消息时处理填充字节的方式 二 建议处置措施 处置措施 禁用
  • Qt应用开发(基础篇)——字体选择器 QFontDialog

    一 前言 QFontDialog类继承于QDialog 是一个设计用来选择字体的对话框部件 对话框窗口QDialog QFontDialog字体选择对话框 设计用来让用户选择某一种字体 一般用于文本编辑窗口 标签显示和一些需要文本输入的场景
  • 第七篇 图像分类的评价指标

    文章目录 摘要 1 混淆矩阵 2 准确率 Accuracy 3 精确率 Precision 4 召回率 Recall 5 F1 score 6 代码样例 摘要 一般情况来说 单一评分标准无法完全评估一个机器学习模型 只用good和bad偏离
  • IDEA调试时的步入(step into)进不去源码怎么办

    文件 gt 设置 gt 构建 执行 部署 gt 调试器 gt 步进 gt 把java 和javax 取消勾选即可
  • 第十节 挂载NFS 网络文件系统

    本章节将介绍如何挂载NFS 网络文件系统 为后面的主机编译生成的ARM Linux 应用传输到开发板做准备 网络文件系统简介 网络文件系统 常被称为NFS Network File System 它是一种非常便捷的在服务器与客户端通过网络共
  • 使用android studio环境新建一个工程——helloworld

    几个月没有学习Android了 今天想研究研究Android与硬件通信 结果都快忘记如何新建一个新的工程了 因此 给自己写一个博客 算作我的备忘录吧 其实很简单 步骤如下 1 需要之前把android studio先部署正确了 能保证正常运
  • Java从入门到实战总结-1.1、Java基础之环境搭建和eclipse安装

    Java从入门到实战总结 1 1 Java基础之环境搭建和eclipse安装 文章目录 Java从入门到实战总结 1 1 Java基础之环境搭建和eclipse安装 1 Hello Java 1 1 Java起源 1 2 Java演变 2
  • MTK9612方案电视STR开机后屏黑有声的问题分析

    问题描述 客户反馈问题 机顶盒连接tv tv str 关机 机顶盒一直开着 过了几个小时 一次 或者第二天过来 一次 str开机 出现tv 黑屏 抓取分析log 考虑到开了ac logleve 7后比较难复制问题 麻烦这样操作 开机停到mb
  • 如何设置网页标签的LOGO

    问题描述 我们打开很多页面都会发现浏览器标签上有LOGO 那么我们该怎么样给自己的网站也设置一个酷炫的LOGO呢 解决办法 1 首先取一张图片 打开 http www bitbug net 或者百度 搜索ico图标制作 制作成16 16px
  • 求二叉树第K层节点的个数

    题目 求二叉树第k层节点的个数 思路 1 递归 求根为root的二叉树第k层节点的个数 就是要求 root left第k 1层节点的个数 root right第k 1层节点的个数 public static int getNumberOfK
  • Idea中使用Tomcat部署并启动Web项目

    首先在Idea中选择编辑运行配置 如下图 左上角的 号 选择Tomcat服务 如下图 自定义服务名称和项目在浏览器的访问路径 配置Tomcat服务器路径 如下图 然后在服务器中部署项目 下面的警告提示 Warning No artifact
  • 深度学习(五)caffe环境搭建

    ubuntu 系统下的Caffe环境搭建 原文地址 http blog csdn net hjimce article details 48781693 作者 hjimce 对于caffe的系统一般使用linux系统 当然也有windows
  • 运算放大器基本参数-增益带宽积(直观解释)

    运算放大器在理想情况下增益为无限大 但是在显示生活中其增益是有限的 增益带宽积指的就是运放的增益和其带宽的乘积 对于一个运放来说这个参数为一个常数 也就意味着增益和带宽成反比 下图通过直观的实验来验证 上图为输入1kHz时输入与输出的波形
  • Proxyee Down简介

    以前写过一篇用Proxyee下载百度网盘大文件的文章 后来一直没在用过 现在发现Proxyee出了新版 功能也增加了 所以重新来介绍一下 现在它的Github地址也变了 现在的地址是 https github com proxyee dow
  • myeclipse中No entries available错误解决方法

    在hibernate中 每个数据表对应的其实是一个实体类 每个实体类有一个对应的hbm xml配置文件和你匹配 myeclipse中有个MyEclipse Database Explorer视图 它提供了myeclipse与数据库直接连接的
  • C++多态理解与认识

    1 什么是多态 多态是指函数调用的多种形态 使我们调用函数更加灵活 多态分为静态多态与动态多态 1 静态多态 静态多态指的是编译时的多态 通过函数重载实现 根据函数命名规则找到函数地址 从而实现调用不同的方法 2 动态多态 运行时 父类指针
  • DVWA-XSS 级别通关详解(图文详细)

    目录 DVWA XSS 级别通关详解 low级别 1 反射性xss 2 存储型xss 3 DOM型xss Medium级别 1 反射型xss 2 存储型xss 3 DOM型xss hight级别 1 反射型xss 2 存储型xss 3 DO
  • 一文搞懂基于用户的协同过滤推荐算法

    本文针对无上下文信息的隐性反馈数据集 每一条行为记录仅仅包含用户ID和物品ID 介绍基于用户的协同过滤算法原理 基于用户的协同过滤推荐算法本质 找到和待推荐用户相似的用户群 推进该用户群感兴趣且待推荐用户没购买过的物品 例如下图中 用户a购