推荐系统中的协同过滤算法

2023-05-16

前言

如果你对这篇文章感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。


概述

协同过滤是一种推荐算法,其通常建模为 m m m 个用户, n n n 个物品,只有部分用户和部分物品之间有评分数据,其它评分是空白的,此时就要求我们用已有的部分稀疏数据来预测空白的部分,找到评分最高的物品推荐给用户。

协同过滤通常有三种类型:

  • 基于用户 (user-based):考虑用户之间的相似度,基于相似用户的喜好,预测目标用户对相应物品的评分(可能带给用户惊喜);
  • 基于物品 (item-based):考虑物品之间的相似度,基于目标用户对某些物品的评分,预测相似度高的类似物品;
  • 基于模型 (model-based):用各类机器学习算法进行解决,是目前最主流的协同过滤类型。

基于模型的协同过滤

【1】关联算法:对用户购买物品的所有历史记录进行数据挖掘,找出常出现的关联物品集,即频繁项集

  • 常见算法有 Apriori、FP Tree、PrefixSpan

【2】聚类算法:基于用户聚类,将用户按照某距离度量划分成不同目标人群;或基于物品聚类,推荐用户喜爱物品的相似物品

  • 常见算法有 K-Means、BIRCH(层次方法聚类)、DBSCAN、谱聚类

【3】分类算法:将用户评分高低分成多段,用分类模型来学习

  • 常见算法有逻辑回归、朴素贝叶斯、支持向量机

【4】回归算法:直接预测用户的评分,用回归模型来学习

  • 常见算法有线性回归、回归树、支持向量回归

【5】矩阵分解:将稀疏矩阵分解成 P ⊤ Q P^\top Q PQ 形式,再将其用于推荐

  • 常见算法有 FunkSVD、BiasSVD、SVD++、Factorization Machine、Tensor Factorization

【6】图模型:将用户之间的相似度放到一个图模型中进行考虑

  • 常见算法有 SimRank 系列算法和马尔可夫模型算法

【7】神经网络:用神经网络模型来做回归任务


基于矩阵分解的协同过滤方法

以 FunkSVD 算法为例,其将期望得到的矩阵 M M M 进行如下分解:
M m × n = P m × k ⊤ Q k × n , M_{m \times n}=P_{m \times k}^\top Q_{k \times n}, Mm×n=Pm×kQk×n,

其中 m i j m_{ij} mij 表示第 i i i 个用户对第 j j j 个物品的评分,当得到矩阵 P P P Q Q Q 后,就可以对矩阵 M M M 任意一个空白位置 m i j m_{ij} mij,通过 p i ⊤ q j p_i^\top q_j piqj 计算得到。随后可以通过求解如下优化问题得到 P P P Q Q Q
arg ⁡ min ⁡ P , Q ∑ i , j ( m i j − p i ⊤ q j ) 2 + λ ( ∥ p i ∥ 2 2 + ∥ q j ∥ 2 2 ) , \mathop{\arg \min }\limits_{P,Q} \sum_{i, j}\left(m_{i j}-p_i^\top q_j\right)^2+\lambda\left(\left\|p_i\right\|_2^2+\left\|q_j\right\|_2^2\right), P,Qargmini,j(mijpiqj)2+λ(pi22+qj22),

其中 λ \lambda λ 为正则化系数。上述优化问题可以通过梯度下降进行求解。基于 FunkSVD,后续有许多改进算法,如 BiasSVD 和 SVD++,整体的分解形式差别不大,优化目标有略微区别,本文不再过多介绍。


参考资料

  • 协同过滤推荐算法总结
  • 矩阵分解在协同过滤推荐算法中的应用
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

推荐系统中的协同过滤算法 的相关文章

  • 关于mini-css-extract-plugin在使用过程中出现冲突的问题

    今天在优化打包的过程中 xff0c 运行npm run build后 xff0c 总是会出现冲突的警告信息 xff0c 而且对于我的这个项目而言出现了几十条的冲突提示 如下 问题排查 首先我以为可能是由于我新引入的优化方面的插件导致了原先的
  • 关于使用Antd中的DatePicker出现的日期格式转化问题(Dayjs和Momentjs)

    在测试过程中发现了一个比较有意思的bug问题 xff0c 我们使用的是antd中的DatePicker组件 xff0c 当时间选择框存在已经设定的初始值后 xff0c 点击时间选择框直接报错 xff0c 但是当清除内容或者处于新建没有默认值
  • Javascript基础知识整理—1

    1 JS数据类型 原始数据类型 xff1a boolean xff0c string xff0c null xff0c undefined xff0c symbol xff0c bigint xff0c number 引用类型 xff1a
  • React基础

    1 Context全局值 链接地址 链接地址 目的是为了避免一些外部的传参向下传递时需要通过一层层的组件 span class token comment defaultValue只有在找不到附近的Provider时才会起作用 span s
  • git基础知识

    1 对当前commit的内容进行修正 如果发现commit的内容有问题想要修改 xff0c 正常做法可以重新再commit一次 通过amend可以直接将commit和暂存区的内容进行合并 xff0c 就不需要再重新commit一次了 ame
  • Typescript基础

    1 Pick和Omit 源码地址 相似点 xff1a 都是对接口进行剪裁 keyof 操作符常和接口结构一起使用 xff0c 得到一组对象键值的字面量类型组成的联合类型 xff0c 如 a b c 我们也常用 keyof any 表示成员未
  • Javascript基础知识整理—2

    1 节流和防抖的实现 https blog csdn net weixin 45709829 article details 123910592 防抖 Debounce 在设定的n秒内只会执行最新的函数 防抖实现 立即执行和非立即执行 sp
  • node文件系统 常用文件处理方法

    打开文件 获取文件描述符 java件描述符 xff1a 被打开的文件分配的一个简单的数字作为标识符 span class token keyword const span fs span class token operator 61 sp
  • Electron基础

    安装 span class token comment 基于Vue span span class token number 1 span 全局安装Vue脚手架 npm install span class token operator s
  • node、npm 、package.json、Angular Cli、webpack之间的关系(Windows环境下)

    IDE xff1a webstorm xff0c 已安装angular插件 Angular Cli 依赖webpack xff0c 简化创建项目流程 xff1b npm属于node一部分 xff0c npm 从package json找对应
  • node文件系统—将目标文件夹中的所有文件复制到指定目录

    span class token keyword const span fs span class token operator 61 span span class token function require span span cla
  • Great Habits of Programmer(程序员的好习惯)

    原文出处 xff1a https github com benjycui benjycui github io issues 1 Most of you heard about Refactoring Improving the Desig
  • You -- Yes, You -- Can Speak at a Conference(你 -- 是的,你 -- 可以在会议上发言)

    原文出处 xff1a https engineering appfolio com appfolio engineering 2017 1 9 you yes you can speak at a conference I ve been
  • 自制前端项目脚手架

    准备工作 xff08 一些常用库 xff09 ora 可以用于表示当前模板的状态 span class token keyword const span oraIcon span class token operator 61 span s
  • 一些奇奇怪怪的问题收集

    1 parseInt string radix span class token keyword const span arr span class token operator 61 span span class token punct
  • 微前端—qiankun:主应用和子应用之间的传值问题

    主应用给子应用传值 主应用配置 span class token comment action js span span class token comment 主应用当中将默认值提出来 xff0c 方便其他功能也要修改 span span
  • Mysql的sql优化方法

    Mysql的sql优化方法 1 选择最合适的字段属性 Mysql是一种关系型数据库 xff0c 可以很好地支持大数据量的存储 xff0c 但是一般来说 xff0c 数据库中的表越小 xff0c 在它上面执行的查询也就越快 因此 xff0c
  • 在jupyter NoteBook使用Pytorch进行MNIST实现

    34 流程 34 1 加载必要的库 import torch nn as nn import torch nn functional as F import torch import torch optim as optim from to
  • IP地址

    CIDR采用各种长度的 34 网络前缀 34 来代替分类地址中的网络号和子网号 xff0c 其格式为 xff1a IP地址 61 lt 网络前缀 gt lt 主机号 gt 为了区分网络前缀 xff0c 通常采用 34 斜线记法 34 xff

随机推荐