【论文阅读+实现】BPR: Bayesian Personalized Ranking from Implicit Feedback-程序员宅基地

技术标签: 隐性反馈数据  # 推荐系统代码实现  BPR  MF  # 推荐系统论文阅读  BPR-MF  

1.BPR是什么?
  • BPR 的全称是贝叶斯个性化排序(Bayesian Personalized Ranking),它是一种排序算法,做的是TopN任务。
  • 适用于隐性反馈数据,当然显性反馈数据把评分变成隐性的也行。
  • 以往做TopN任务的做法是利用用户的行为数据,得到用户对所有物品的预测评分,按照分数的高低进行排序推荐,比如FunkSVD。
  • 以往那些方法的建模目标是对于要进行推荐的物品尽可能的预测为1,对不应该进行推荐的物品尽可能的预测为0。这样的建模目标并不能够学习到物品之间的先后顺序(虽然我们一直假想的把预测值作为排序的依据)。
  • BPR的提出旨在解决物品之间的顺序问题,提出了一个可以应用于各个已有的推荐算法的算法框架,这个算法框架的建模目标是优化物品之间的顺序,解决推荐的物品之间的排序问题。
  • 当然这里还有一个建模目标是解决隐性反馈数据不能显示出用户偏好的问题。
2.BPR建模思路
  • 如果用户在有i、j两个物品的同时消费了i,则我们可以得出用户在i和j之间更加喜欢物品i的假设,则我们可以得到一个三元组<u,i,j>,也就是说,我们希望对于u来说,i物品应该排在j物品的前面。
  • 所以对于所有已经有的隐性反馈集合m条,比如用户购买了某物品的记录,虽然隐性反馈记录并不一定能够完全显示用户的偏好,但是在一定程度上我们可以假设用户更喜欢自己有过购买记录的物品,毕竟他选择购买了。所以如此,我们可以构建m条三元组的训练集。
3.BPR优化方法以及BPR-MF算法流程

在这里插入图片描述
在这里插入图片描述

4.BPR-MF代码展示

在这里插入图片描述

5.小结
  • 其实BPR-MF和FunkSVD都是优化P和Q矩阵,得到训练好的这两个矩阵之后,可以计算用户对所有物品的预测评分,然后选择分数排序最高的商品输出。
  • 两者不同之处在于优化的目标不一样,BPR-MF优化的目标是加大用户喜欢i物品和喜欢j物品的一个概率差值,而FunkSVD的优化目标是为了降低预测分数与本来的分数之间的差值。
  • 不得不说,经过BPR得到的TOPN的评价指标,诸如P、R、NDCG、HR的效果都要略高FunkSVD一些。果然是以排序为目标效果会好!
参考文献

BPR: Bayesian Personalized Ranking from Implicit Feedback
刘老师写的这篇文章写的很详细~~~贝叶斯个性化排序(BPR)算法小结

后记
  1. 不知道为啥Markdown打不出希腊字母了,所以用手写了一遍公式,这些公式都来自BPR这篇论文,可以自行去看。
  2. BPR从上个学期开始看到这个学期开始,现在终于有耐心好好的把这篇论文看完并且把论文复现出来了,惭愧,但是,完成了就是好的嘛!!!
  3. 其实内容写的很乱,不过也是给自己看的,方便之后忘记了,所以,读者有啥不懂,可以留言。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qiqi123i/article/details/100102805

智能推荐

(最新最详细)安装ubuntu18.04-程序员宅基地

文章浏览阅读2w次,点赞4次,收藏91次。目录1. window10中下载ubuntu镜像2. 制作U盘启动盘3. Ubuntu 分配硬盘空间1. window10中下载ubuntu镜像下载地址2. 制作U盘启动盘安装制作工具:UltraISO(点我下载),下载完成后安装插入用来做启动盘的U盘(最好是usb3.0接口,16GB或以上),并清空里面的文件打开安装好的UltraISO,点击继续试用按钮工作界面进入工作界面后,点击菜单栏文件(F),在弹出的选项卡里点击打开在弹出的文件选择对话框中找到下载好的 Ubuntu18.04._ubuntu18.04

Toad报“No valid Oracle Client found”错-程序员宅基地

文章浏览阅读203次。2019独角兽企业重金招聘Python工程师标准>>> ..._toad no valid oracle client

MySQL数据库入侵及防御方法-程序员宅基地

文章浏览阅读521次。来自:http://blog.51cto.com/simeon/1981572作者介绍陈小兵,高级工程师,具有丰富的信息系统项目经验及18年以上网络安全经验,现主要从事网络安全及数据库技术研究工作。《黑客攻防及实战案例解析》《Web渗透及实战案例解析》《安全之路-Web渗透及实战案例解析第二版》《黑客攻防实战加密与解密》《网络攻防实战研究:漏洞利用与提权》作者,在国内多本学术期..._mysql 5.0.16入侵

SQL Server SSMS历史版本下载地址-程序员宅基地

文章浏览阅读135次。https://learn.microsoft.com/zh-cn/sql/ssms/release-notes-ssms?view=sql-server-ver16#previous-ssms-releases_sql server历史版本哪儿下

【狂神JAVA】MyBatis笔记_jdk1.7的mybatis-程序员宅基地

文章浏览阅读2.5k次。简介自学的【狂神JAVA】MyBatis分享自写源码和笔记,希望对大家有帮助本人配置jdk13.0.2 (jdk1.7以上均可)Maven 3.6.3MySQL 5.7.23 (mysql5.6以上均可)1. 配置官网文档: https://mybatis.org/mybatis-3/zh/getting-started.htmlpom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://_jdk1.7的mybatis

学习笔记---分布式调度之xxlJob调度中心的启动源码解析_xxl 调度失败:执行器地址为空-程序员宅基地

文章浏览阅读913次。调度中心的代码启动源码是从:XxlJobAdminConfig 入口;直接进入: xxlJobScheduler.init();第一个: initI18n() 处理国际化;第二个:JobRegistryMonitorHelper.getInstance().start(); 创建启动后台线程来维护在线的执行器组下的机器列表,从上篇学习笔记—分布式调度之xxlJob执行器的启动源码解析可以..._xxl 调度失败:执行器地址为空

随便推点

数据结构实验5《基于哈夫曼树的数据压缩》_基于哈夫曼树的数据压缩算法c语言-程序员宅基地

文章浏览阅读2k次,点赞4次,收藏25次。(visual studio 2019可运行)输入及输出要求见《数据结构C语言(第二版)》严蔚敏版【本文仅用于啥都看不懂还想交作业选手】#include<iostream>#include<map>#include<string>#include<stdio.h>#include<memory.h>using namespace std;typedef struct{ char c; int weight; in_基于哈夫曼树的数据压缩算法c语言

Teams Bot App 代码解析_adaptivecards.declare<datainterface>(rawlearncard)-程序员宅基地

文章浏览阅读1w次。Teams Bot App 代码解析_adaptivecards.declare(rawlearncard).render(this.likecountobj)

Unity UGUI(三)RawImage(原始图像)_unity原始图像-程序员宅基地

文章浏览阅读2.5k次。RawImage(Script)Texture 纹理 要显示的图片,注意:图片类型可以是任何类型 Color 颜色 图片的主颜色 Material 材质 渲染材质 Raycast Target 光线投射目标 是否可接收射线碰撞事件检测 UV Rect UV矩形 显示效果:X、Y属性用于控制纹理左右..._unity原始图像

SpringBoot与分布式事务组件-程序员宅基地

文章浏览阅读2k次。随着互联网应用的复杂性增加,越来越多的公司选择使用微服务架构模式进行应用开发,将单体应用拆分成多个小型服务,每个服务部署在不同的服务器上。同时,为了提升系统的可用性、容错性和可扩展性,需要考虑分布式事务问题。本文将介绍 Spring Boot 在分布式事务中的一些实现方案,并给出相关原理。

小程序基础入门(黑马学习笔记)_黑马微信小程序笔记-程序员宅基地

文章浏览阅读2.8k次,点赞12次,收藏90次。权当学习笔记吧_黑马微信小程序笔记

SpringBoot的旅游网站的设计与实现 - 源码免费(私信领取)

采用Spring Boot框架进行后端开发,结合前端技术(如Vue.js、React等)进行页面设计,数据库采用MySQL进行数据存储,确保系统的稳定性和性能。本项目旨在设计并实现一个基于Spring Boot的旅游网站,为用户提供便捷的旅游信息查询、预订服务,以及旅游资讯分享功能,提升用户旅游体验。通过市场调研和用户需求分析,了解用户对旅游网站的需求和偏好,明确系统的功能和特点,确保系统能够满足用户的旅游需求。进行全面的系统测试,包括功能测试、性能测试、安全性测试和用户体验测试,确保系统的质量和可靠性。