基于用户的协同过滤算法的电影推荐系统

2023-10-31

上一篇讲解了推荐算法的分类,这里电影推荐系统具体分析一下

第一步:建立用户电影矩阵模型

        如表1所示,协同过滤算法的输入数据通常表示为一个m*n的用户评价矩阵Matrix,m是用户数,n是电影数,Matrix[ij]表示第i个用户对第j个电影的评价:


第二步:发现兴趣相似的用户

        这一阶段,主要完成对目标用户最近邻居的查找,通过计算目标用户与其他用户之间的相似度,得到与目标用户最近的邻居集。度量用户间相似性:设N(u)为用户u喜欢的电影集合,N(v)为用户v喜欢的电影集合,将上一步中每行记录视为一个向量,那么u和v的相似度可通过以下进行计算:
        (a)采用Jaccard公式:W_uv=(|N(u)∩N(v)|)/(|N(u)∪N(v)|)
        (b)余弦相似度计算:W_uv=(|N(u)∩N(v)|)/(√|N(u)||N(v)|)
        这里选择余弦公式进行相似度度量计算,假设目前共有4个用户(A、B、C、D),5部电影(a、b、c、d、e),用户与电影的关系如下图所示:


W_AB=(|{a,b,d}∩{a,c}|)/(√|{a,b,d}||{a,c}|)=1/(√6)
W_AC=(|{a,b,d}∩{b,e}|)/(√|{a,b,d}||{b,e}|)=1/(√6)
W_AD=(|{a,b,d}∩{c,d,e}|)/(√|{a,b,d}||{c,d,e}|)=1/3

        而这种方法的时间复杂度是O(|U|*|U|),所以非常耗时。而在上表中可以看到“用户-电影”表是一个稀疏矩阵,即很多时候N(u)^N(v)=0,如果换一下思路,可以首先计算N(u)^N(v)!=0的用户,然后再计算sqrt(N(u)*N(v))。为此可以首先建立“电影-用户”的倒排表,对每部电影都保存电影到用户的列表:

        设稀疏矩阵C[u][v]=N(u)^N(v),在倒排索引中假设用户u和用户v同时属于倒排索引中K部电影对应的用户列表,就有C[u][v]=K。例如上图所示只有电影a中同时出来了用户有A和用户B,则在矩阵中赋值为1:

    

    

        到此,用户间的相似度计算就得到了,可以很直观的找到与目标用户兴趣相似的用户。

第三步:产生推荐项目

        需要从矩阵中找到与目标用户最相似的K个用户,用集合S(u,K)表示,将S中用户喜欢的电影全部提取出来,并除去u已经喜欢的电影。对每个候选电影i,用户对它的感兴趣的程度用以下公式计算:

(其中Rvi表示用户v对电影i的喜欢程度,此处举例全部为1,在电影评分时应该代入用户的评分)。
继续上面的例子,假设我们给A推荐电影,选取K=3,对用户A,电影c、e没有看过,因此可以将这两部电影推荐给用户A,根据UserCF算法用户A对物品c、e的兴趣分别计算p(A,c)和p(A,e):

p(A,c)= W_AB+W_AD=1/(√6)+1/3=0.7416
p(A,e)= W_Ac+W_AD=1/(√6)+1/3=0.7416
所以用户A对电影c和e的喜欢程度可能一样,在真实的推荐系统中计算时考虑用户的评分,最后根据得分排序取前K个即为推荐电影

基于用户的协同过滤推荐算法Git代码

基于项目的协同过滤推荐算法Git代码

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

基于用户的协同过滤算法的电影推荐系统 的相关文章

  • Redis-常用数据结构

    Redis常用数据结构 Redis提供了一些数据结构供我们往Redis中存取数据 最常用的的有5种 字符串 String 哈希 Hash 列表 list 集合 set 有序集合 ZSET 字符串 String 字符串类型是Redis最基础的
  • 三位加法器实现原理详解

    三位加法器实现原理详解 近日在读集智俱乐部里面的大牛们写的一本 科学的极致 漫谈人工智能 看到了简单的数学计算计算机是如何实现的 一切的一切都起于逻辑门 本是本科已经学过的东西 现在早已经忘得一干二净 算是重新学习吧 看到这些基本原理 很感
  • Android5.0新特性:Toolbar标题栏

    Toolbar标题栏 Android 5 0最主要的变化就是采用了全新的Material Design界面 Material Design就是材质化设计 材质化设计指的是物体是有质地的 两个控件之间室友实体的 不允许互相穿墙 并且引入了Z轴
  • 主线剧情07.1-Linux驱动编程-基本字符设备和设备树维护

    Linux 驱动编程 基本字符设备和设备树维护 教程可参考 100ask的 嵌入式Linux应用开发完全手册V4 0 韦东山全系列视频文档 IMX6ULL开发板 手册 和 配套视频 或其它家的 比如原子 野火等等 这里不是教程 文字 和 图
  • VsCode配置之verilog

    原文 https blog csdn net qq 39498701 article details 84668833 步骤一 更换Vivado自带文本编辑器 第一步 打开Vivado 再Tool菜单中 打开Settings 第二步 在Se
  • chrome 小技巧 ,保持元素的hover状态

    1 审查元素 选中a标签 或者需要hover的标签 2 点击右键 3 选择 force element state 4 选择相应的 hover active focus visited 等伪类
  • 【MD5】js逆向

    今天学习MD5网页的破解 进行js逆向 MD5 是单向加密的一种方法 为32位 在进行该种加密方式的破解时 并不能直接破解 只能通过网页模拟MD5的加密 破解网页的登陆或者数据的加载 红人点集的md5登陆界面 1 按f12 进入调式窗口 点
  • Pytorch学习1-GRU使用和参数说明

    import torch nn as nn import torch gru nn GRU input size 50 hidden size 50 batch first True embed nn Embedding 3 50 x to
  • Redis GEO 的java实现(通过Jedis)(GIS相关)

    1 Redis的安装参考 https blog csdn net zhu tianwei article details 44890579 2 Jedis使用2 90版本 maven配置
  • Python Selenium库的使用【从安装到实战】

    Selenium Selenium简介 Selenium 的安装 Selenium基础操作 定位UI元素 鼠标动作链 键盘常用 下拉列表 填充表单 非select元素 鼠标悬浮 以后展现 select元素 其他一些常用功能 弹窗处理 页面切
  • pyqt5的QWebEngineView无法播放网络视频

    这个问题是2021年中旬遇到的 最近系统重装又出现这个问题所以解决并记录一下 具体就是可以实现打开网页 但是如果是视频链接就无法播放 例如 做类似抖音 快手网页版的视频播放器 或者其他类型的视频播放器等等如封面图 都会遇到只有黑窗口但无法播
  • 全网最火Java面试题

    第一部分 JAVA 基础 第一节 IO NIO 第二节 反射 第三节 多线程 第四节 集合 第五节 Web 第六节 其他 第七节 关键字 第八节 操作符 第九节 基础类型 第十节 异常 第十一节 JDBC 第十二节 OOP 第二部分 JVM
  • 深入理解Qt4/Qt5信号和槽机制

    对于事件处理 MFC中使用的是消息映射机制 Qt使用的是信号和槽机制 在我看来 Qt的信号和槽比MFC功能更强大 也更灵活 1 信号和槽的简单介绍 一般格式 connect Sender SIGNAL signal Receiver SLO
  • C++派生类的不同继承方式对基类的访问权限

    经过我细心的整理 形成了这张表 一张表说明派生类的不同继承方式 对基类的访问权限 总的来说 对类的访问权限范围public
  • 2022 CISCN初赛 Satool

    一个2022年国赛初赛的LLVM PASS类pwn题 当时还完全没有接触过 所以直接放弃掉了 初赛结束之后决定入门一下这方面知识 看这篇题解之前最好先看看之前写的这篇入门文章 LLVM PASS类pwn题入门 然后我们正式开始这道题 首先从
  • 07-js 逆向-返回数据加密(aes)

    目标 返回的结果有加密 把结果解密 可以看到返回来的data是加密的 但是加密的数据并没有进行混淆 这时候我们可以采用直接搜解密 decrypt 直接发先我们的数据书通过aes加密的 我们开始些python代码 from Crypto Ci
  • vndk: (native:vendor) should not link to libcamera_client (native:platform)

    1 0 相似例子 2 21 17 47 30 305 4365 4365 E CamX ERROR UTILS camxosutilslinux cpp 874 LibMap dlopen dlopen failed library lib
  • 利用mimikatz查看rdp连接密码【渗透测试】

    0x00 概述 在使用 rdp 时会发现系统有保存连接密码的功能 一定在本地以一种加密方式保存 在连接的时候解密进行rdp尝试 那么我们能不能那到加密的密码解密以获取这台机器rdp连接过的机器呢 0x01 流程 AppData Local
  • PUMA:DOA估计模式的改进实现(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 Matlab代码实现 4 参考文献 1 概述 文献来源 下载链接 PUMA An Imp

随机推荐

  • ue4添加第三方库

    查了一些资料 发现最后都是用loadlibrary的方式 这样很不方便 如果有10000个函数 要写10000次么 仔细想想 调用第三方库无非就是把头文件和lib库设置下 把相应的 h lib和 dll放到相应的位置 再在调用的地方包含头文
  • cadence原理图封装pin名称重复_Cadence原理图库文件引脚名重复处理方法介绍

    立题简介 内容 Cadence原理图库文件引脚名重复处理方法 来源 实际使用得出 作用 介绍2种处理Cadence原理图库文件引脚名的方法 PCB环境 Cadence 16 6 orCAD环境 日期 2019 03 09 分割线 立题详解
  • spring打印http接口请求和响应

    在程序日志中打印出接口请求和响应的内容是一个基本的技术需求 如果在每个接口中实现请求响应的日志打印 程序编写会很繁琐 我们可以利用spring提供的机制 集中处理接口请求响应的日志打印 具体的代码参照 示例项目 https github c
  • 使用ipmitool命令检测电源模块状态

    1 通过ipmitool检查电源模块状态 https mp weixin qq com s Z1g79Q1aMhOT9Xm9fvIkjg 2 通过ipmitool获取服务器各元件温度信息 https mp weixin qq com s E
  • 大数据分布式计算开源框架Hadoop的介绍和运用

    Hadoop是Apache开源组织的一个分布式计算开源框架 在很多大型网站上都已经得到了应用 如亚马逊 Facebook和Yahoo等等 对于我来说 最近的一个使用点就是服务集成平台的日志分析 服务集成平台的日志量将会很大 而这也正好符合了
  • vue 快速自定义分页el-pagination

    vue 快速自定义分页el pagination template div style text align center div
  • main函数中的参数代表的意义

    int main int argc char argv 或者是 int main int argc char argv 里面的参数是什么意义呢 argc 是 argument count的缩写 表示传入main函数的参数个数 argv 是
  • 分享一个完整的Mybatis分页解决方案

    原文地址 http duanhengbin iteye com blog 1998017 参考地址 http blog csdn net isea533 article details 23831273 Mybatis 的物理分页是应用中的
  • 一起学ORBSLAM2(11)ORBSLAM的localmapping

    转载请注明原创地址 https blog csdn net qq 30356613 article category 6897125 ORBSLAM的局部建图线程实际做的工作是来维护全局map以及管理关键帧的 对tracking得到的关键帧
  • HWND转成CWnd

    在Dialog调用中调用系统的Create函数时 遇到了这个问题 BOOL CWnd Create LPCTSTR lpszClassName LPCTSTR lpszWindowName DWORD dwStyle const RECT
  • java设计模式--[结构模式]--装饰者模式[decorator pattern]

    一 裝飾者模式 裝飾者模式 又叫包裝器 動態地給動象添加一些額外的職責 若要擴展功能 裝飾者指供了比繼承更有彈性的替代方案 二 裝飾者模式的UML類圖如下 三 本節內容以一個點餐配菜的案例來說明裝飾者模式的用法 完整代碼如下 1 主食類超類
  • Qt-sqlite3数据库编程实例

    Qt sqlite3数据库编程实例 版本说明 版本 作者 日期 备注 0 1 loon 2018 10 26 初稿 目录 文章目录 Qt sqlite3数据库编程实例 版本说明 目录 一 需求和目的 二 程序设计 三 源码展示 四 结果展示
  • go 性能相关总结

    链客 专为开发者而生 有问必答 此文章来自区块链技术社区 未经允许拒绝转载 性能测试基本概念 基本概念 Benchmark 性能测试 ns op 纳秒 每个操作 前面数值越小越快 命令 go test c go test test benc
  • python实现大疆Tello无人机控制平台并实现语音控制/手势控制/人脸跟踪/绿球跟踪/拍照录像

    Tello智能信息处理平台 介绍 控制 键盘控制 语音控制 视觉功能 人脸跟踪 绿球跟踪 手势控制 体态控制 拍照录像 结语 介绍 本项目是我的一个课程设计 本来打算做大型四旋翼无人机的控制 后来老师给了两个Tello无人机 分别是带拓展板
  • vue 项目中 sass 如何复用?

    前言 vue项目中 我们在使用scss编写代码的时候 有些时候可能会有很多样式代码是重复的 这个时候我们可以把公共的部分提取出来 文件结构如下图 步骤1 在assets目录下新建css目录 存放css资源 在css目录下新建styles s
  • css选中子元素中不是第一个元素的3种方法

    第一种 使用伪类选择器 not
  • 写代码时发现……还是Python牛逼

    都说Python通俗易懂 容易上手 甚至不少网友表示 完成同一个任务 C 语言要写 1000 行代码 Java 只需要写 100 行 而 Python 可能只要 20 行 到底是真的还是假的 下面就以一个最简单的入门级 Hello Worl
  • nginx配置多个静态html页面

    第一个项目 server listen 80 server name localhost location root C Users Administrator Documents HBuilderProjects billing 根目录
  • SeekBar设置最小值

    seekbar如何设置最小值 项目需求 要让seekbar的最小值为60 大家都知道如何设置初始值 最大值 但是最小值 我在网上查了一些资料 并不需要网上说的那么复杂 例如我的需求是seekbar的范围是60 85 最小值要为60 andr
  • 基于用户的协同过滤算法的电影推荐系统

    上一篇讲解了推荐算法的分类 这里电影推荐系统具体分析一下 第一步 建立用户电影矩阵模型 如表1所示 协同过滤算法的输入数据通常表示为一个m n的用户评价矩阵Matrix m是用户数 n是电影数 Matrix ij 表示第i个用户对第j个电影