基于用户协同过滤(User-CF)的推荐算法

2023-11-19

基于用户协同过滤(User-CF)的推荐算法

User-CF的推荐实例

在学校生活的时候,新生开学都会问同专业的师兄师姐“我要买什么书?”、“我要怎么安排作息?”等相似的问题,此时师兄师姐就会依着他们的专业和偏好做一些推荐,这就是现实中个性化推荐具体个例。这里面有一个有趣的地方,一般师弟师妹们不会去问不同专业的师兄师姐这些问题,也不会去问刚毕业的学长,这是为什么?因为对他们而言,上一届的同专业学长们的知识结构跟他们最为相近,兴趣偏好也比较相似,所以他们推荐的结果比较靠谱。

那么,在一个个性化推荐系统中,当一个用户A需要个性化推荐时,可以先找和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户A没有听说过的物品推荐给A。这种方法成为基于用户的协同过滤算法(User-CF)。

详细过程
  1. 相似度计算:找到和目标用户兴趣相似的用户集合
  2. 构建推荐矩阵:找到这个集合中用户喜欢的,且目标用户没有听说过的物品推荐给目标用户。
1.相似度计算

相似度计算目标是找到目标用户与其他已知偏好的用户的相似度。这里,协同过滤(CF)主要利用用户行为的相似度。给定用户u和用户v,令N(u)表示用户曾经有过正反馈的物品集合,令N(v)为用户v曾经有过正反馈的物品集合。

这里相似度计算有几个细节,如果用户属性是用布尔值(0,1)来表示的话,例如:

机器学习:详解基于用户协同过滤(User-CF)的推荐算法

其中0表示不喜欢,1表示喜欢。那么可以通过Jaccard公式简单计算u和v的相似度,其公式定义是A与B交集的大小与A与B并集的大小的比值,范围在[0,1],值越接近1,A与B越相似。特别地,当A、B集合都为空时,J(A,B)定义为1,计算公式如下:

机器学习:详解基于用户协同过滤(User-CF)的推荐算法

上述结果代入公式计算后得:

机器学习:详解基于用户协同过滤(User-CF)的推荐算法

当然这有个缺陷,Jaccard公式无法表示u,v对每个属性的具体偏好大小。这时候可以用余弦相似度进行求解。

机器学习:详解基于用户协同过滤(User-CF)的推荐算法

改变下表格中的数值,表示具体偏好:

机器学习:详解基于用户协同过滤(User-CF)的推荐算法

代入余弦相似度公式计算得

机器学习:详解基于用户协同过滤(User-CF)的推荐算法

相似地,也有Tanimoto 系数(Tanimoto Coefficient)和欧几里德距离(Euclidean Distance),当用欧几里德距离表示相似度,一般采用以下公式进行转换,距离越小,相似度越大。

机器学习:详解基于用户协同过滤(User-CF)的推荐算法

Tanimoto 系数也称为 Jaccard 系数,是 Cosine 相似度的扩展,也多用于计算文档数据的相似度:

机器学习:详解基于用户协同过滤(User-CF)的推荐算法

2.构建推荐矩阵

经过上述的相似度计算,现在找到和目标用户兴趣相似的用户集合,现在有个用户u,需要为他推荐水果种类,计算了用户u与其他用户的相似度,构建推荐矩阵如下:

机器学习:详解基于用户协同过滤(User-CF)的推荐算法

得到上面对于用户u的推荐矩阵后,User-CF算法会给用户推荐和他兴趣最相似的K个用户喜欢的物品。如下的公式度量了User-CF算法中用户u对物品i的感兴趣程度:

机器学习:详解基于用户协同过滤(User-CF)的推荐算法

其中, S(u, K)包含和用户u兴趣最接近的K个用户, N(i)是对物品i有过行为的用户集合, w_uv是用户u和用户v的兴趣相似度, r_vi代表用户v对物品i的兴趣度。假设K=2时,那么实际上矩阵按相似度排序如下:

机器学习:详解基于用户协同过滤(User-CF)的推荐算法

那么此时用户u对桃的兴趣度计算:

机器学习:详解基于用户协同过滤(User-CF)的推荐算法

如果对用户u只推荐一种水果,那么此时按照UserCF算法的最终计算推荐结果应为菠萝

适用范围

User-CF算法的假设是一个用户和其他用户的兴趣偏好类似,那么他们喜欢的东西都应该是差不多,即人以群分的概念。

该算法适用于用户较少、用户个性化兴趣不太显著的场合,推荐过程中用户新的行为不一定会导致推荐结果的变化,如果用户过多,那么计算用户相似矩阵的代价太大。且该算法无法解决新用户进来的冷启动问题,但新物品进来能够较快地进行推荐。

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

基于用户协同过滤(User-CF)的推荐算法 的相关文章

随机推荐

  • 最快方式 ESP-IDF 创建例子 教程

    需要条件 安装了 VSCODE 安装了插件 Espressif IDF工具 系统中安装了 ESP IDF 可使用离线包 或在线安装包 在插件中配置了 ESP IDF 可能需要在线更新一些东西 点击F1 输入 ESP 等待提示 出现提示后 选
  • 软件测试 接口测试 入门Jmeter 接口关联 提取器 断言 与fiddler配合使用 使Jmeter录制和创建脚本 操作数据库 持续集成测试

    文章目录 1 接口测试概述 1 1 什么是接口测试 1 2 接口分类 1 3 接口的设计风格分类 1 3 1 Soap架构 1 3 2 Rpc架构 1 3 3 RestFul架构 1 3 4 接口测试工具介绍 1 4 接口测试流程 2 Jm
  • 使用 Vue.js 结合bootstrap 实现的分页控件

    使用 vue js 结合 bootstrap 开发的分页控件 效果如下 实现代码 div class contai div
  • 毕业设计-基于卷积神经网络的花卉图片识别

    目录 前言 课题背景和意义 实现技术思路 一 LeNet 5 卷积神经网络模型 二 设计思路 三 实验及结果分析 四 总结 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要
  • vue项目使用externals优化打包体积

    查看打包体积 下载查看打包体积的插件 npm install webpack bundle analyzer save dev 在vue config js中配置 chainWebpack config gt 打包结果分析 if proce
  • prompt 综述

    动手点关注 干货不迷路 1 概述 1 1 基本概念 用一句话概括模板学习 即将原本的输入文本填入一个带有输入和输出槽位的模板 然后利用预训练语言模型预测整个句子 最终可以利用这个完整的句子导出最终需要的答案 模板学习最吸引人的关键在于其通过
  • Spring Boot 项目在本地可以成功访问但是在服务器上无法访问 Controller 方法解决办法

    这是一篇记录自己失了智的博客 晚上写了一个小 Demo 来测试在云服务器上同时运行两个 jar 包的情况 两个项目的端口分别为 8080 和 8880 以 8880 为端口的 Demo 在本地成功运行并且访问到了 Controller 中的
  • 2023华为OD机试真题【最大平分数组/动态规划】

    题目描述 给定一个数组nums 可以将元素分为若干个组 使得每组和相等 求出满足条件的所有分组中 最大的平分组个数 输入描述 第一行输入 m 接着输入m个数 表示此数组 数据范围 1 lt M lt 50 1 lt nums i lt 50
  • GAN数学原理及代码实现

    GAN generator 和discriminator 生成式对抗网络 Generative Adversarial Networks GAN 包括生成器 generator 和判别器 discriminator 生成器 generato
  • springboot+mybatis+druid 多数据源整合

    前言 在上一篇文章里面我们进行了spring boot 和 mybatis 的整合 springboot整合mybatis使用druid数据源 文中是使用的单数据源 因为项目中有很多需要用到多数据源的场景 比如主从同步 读写分离 或者业务库
  • Pandas基本操作总结 excel读取和数据清洗

    1 读取表格 df pd read excel 目标文件路径 skiprows 要跳过的行数 指定读取表格时要跳过前面空行的行数 2 筛选某列不是空值的所有行 df loc df 某列 notnull 筛选某列不为空值的所有行 筛选行后选取
  • docker使用常用基础命令详解版

    文章目录 Docker基本命令 1 查看docker信息 version info 2 对image的操作 search pull images rmi history 3 启动容器 run 4 查看容器 ps 5 保存对容器的修改 com
  • Scala>scala类型判断

    文章目录 类型判断 isInstanceOf asInstanceOf getClass和classOf 类型判断 有时候 我们设计的程序 要根据变量的类型来执行对应的逻辑 在scala中 如何来进行类型判断呢 有两种方式 isInstan
  • python——lambda函数

    lambda 表达式 又称匿名函数 常用来表示内部仅包含 1 行表达式的函数 如果一个函数的函数体仅有 1 行表达式 则该函数就可以用 lambda 表达式来代替 name lambda list 表达式 其中 定义 lambda 表达式
  • nacos配置中心链接超时问题:java.net.ConnectException: no available server, currentServerAddr

    nacos配置中心链接超时问题 java net ConnectException no available server currentServerAddr 从异常信息来看 是与nacos链接异常导致 可能是因为服务器网络的问题 解决 重
  • Web前端开发概述

    Web World Wide Web 全球广域网 是指一种基于互联网的信息系统 通过超文本链接将全球各地的文档 图像 视频等资源相互关联起来 并通过Web浏览器进行交互浏览和访问 Web的发展使得人们可以方便地获取和共享各种类型的信息 成为
  • 异步接口调用

    http的异步调用 package com example asyncmethod import com fasterxml jackson annotation JsonIgnoreProperties JsonIgnorePropert
  • Babelfish【map函数】

    题目链接 这道题用哈希可以做 但是这道题的输入要求太过于繁琐 所以我直接上map稍微好弄些 这道题讲真更多的考察的是字符串的输入问题 看下代码就会明白的 完整代码 include
  • QItemDelegate和 QStyledItemDelegate的区别

    为使用方便 从 4 4开始 Qt 提供了另外的基于组件的子类 QItemDelegate和 QStyledItemDelegate 默认的委托是 QStyledItemDelegate 二者的区别在于绘制和向视图提供编辑器的方式 QStyl
  • 基于用户协同过滤(User-CF)的推荐算法

    基于用户协同过滤 User CF 的推荐算法 User CF的推荐实例 在学校生活的时候 新生开学都会问同专业的师兄师姐 我要买什么书 我要怎么安排作息 等相似的问题 此时师兄师姐就会依着他们的专业和偏好做一些推荐 这就是现实中个性化推荐具