基于地理因式分解法的POI推荐排序算法(Ranking based Geographical Factorization Method,Rank-GeoFM)
Rank-GeoFM背景
现阶段,兴趣点(Point of Interest,POI)推荐成为一个重要的研究问题。兴趣点推荐是通过检入数据来预测的,然而在研究过程中我们常会碰到检入数据匮乏的问题。
这篇文章主要解决了以下两个问题:
- 使用隐式反馈数据,解决检入数据匮乏的问题
- 利用POI的不同类型的上下文信息(影响因子)完成预测
前言
POI推荐是目的在于学习用户的偏好,然后给用户推荐他可能会感兴趣的但未浏览过的东西。这不仅能帮助居民或游客勘探一个城市中有趣的位置地,同时也为POI物主通过寻找和寻找潜在游客来增加收入的机会。
为了便于理解下面用图示来说明
(a):一定时间内,三个人去四个场景下的次数矩阵
(c):加上时间影响后,图(a)的状态
从a),b)中可以看出矩阵中数据是很稀疏的,如果再加上时间因素影响得到c),d)那么矩阵将变的更加的稀疏。
与传统的矩阵因式分解方法不同,我们对用户(user)偏好排序进行拟合,了解用户和POI的潜在因素,而不是像传统的矩阵分解方法那样对检入(check-in)频率进行拟合。在本文中,未访问的POI(?处)也有助于学习,这将有助于缓解稀疏性问题。
Rank-GeoFM模型
使用方法
- 使用Rank-GeoFM,解决数据缺乏问题,包含一种重要的上下文信息–地理影响
- 为了计算Rank-GeoFM,我们使用随机梯度下降法
GeoFM为基于权重矩阵的因式分解方法(WMF),并且地理影响也包含在WMF内。
以下是符号列表:
UUU | 用户集合{u1,u2,...,uUu_1,u_2,...,u_Uu1,u2,...,uU} |
---|---|
LLL | POI集合{l1,l2,...,lLl_1,l_2,...,l_Ll1,l2,...,lL} |
TTT | 时间段集合 {t1,t2,...,tTt_1,t_2,...,t_Tt1,t2,...,tT} |
LuL^uLu | 用户u访问过的POI |
X=[xul]X=[x_{ul}]X=[xul] | 用户-POI检入矩阵 |
χ=[xutl]\chi = [x_{utl}]χ=[xutl] | 用户-时间-POI |
D1D_1D1 | 用户-POI对{(u,l)∥xul>0(u,l)\|x_{ul}>0(u,l)∥xul>0} |
D2D_2D2 | 用户-时间-POI元组{(u,t,l∥xutl>0)(u,t,l\|x_{utl}>0)(u,t,l∥xutl>0)} |
d(l,l′)d(l,l')d(l,l′) | POI l和l′l和l'l和l′之间的距离 |
Nk(l)N_k(l)Nk(l) | 离l最近的k的集合 |
yuly_{ul}yul | 用户u的POI ℓ推荐评分 |
step1:使用基于POI检入数据推断用户的偏好排序。POI频率越高则排名越靠前。
度量推断排序和通过因式分解模型产生的产生的排序之间的不兼容性的方法,也就是损失函数,定义如下:
Incomp(yul,ε)=∑l′∈LI(xul>xul′)I(yul<yul′+ε)Incomp(y_{ul,\varepsilon }) = \sum_{l' \in L} I(x_{ul}>x_{ul'})I(y_{ul}<y_{ul'}+\varepsilon)Incomp(yul,ε)=l′∈L∑I(xul>xul′)I(yul<yul′+ε)
I(.):是一个指标函数,I(a)=1=====》当a=true,反之为0I(.):是一个指标函数,I(a) = 1=====》当a=true,反之为0I(.):是一个指标函数,I(a)=1=====》当a=true,反之为0
ε:是一个正数\varepsilon:是一个正数ε:是一个正数
xul:l的频度x_{ul}:l的频度xul:l的频度
yul:l的推荐等级y_{ul}:l的推荐等级yul:l的推荐等级
注:ε−margin\varepsilon-marginε−margin被用来计算因式分解模型的排序,只有当yul<yul′+εy_{ul}<y_{ul'}+\varepsilonyul<yul′+ε时,用户l′l'l′的排名高于lll
step2:要使因式分解模型越优,不兼容性要越小,则相对应的损失函数需要越小。
O=∑u,l∈D1E(Incomp(yul,ε)),E(0)=0O = \sum_{u,l\in D_1} E(Incomp(y_{ul , \varepsilon})) \qquad ,E(0) = 0O=u,l∈D1∑E(Incomp(yul,ε)),E(0)=0
E(r)=∑i=1r1iE(r) = \sum_{i=1}^r \frac{1}{i}E(r)=i=1∑ri1
E(.)E(.)E(.)用来将不兼容性转化为损失函数
E(r)E(r)E(r)计算错误排序POI的各等级位置(1−i)(1-i)(1−i)之和,其中位置iii被分配一个损失1i\frac {1} {i}i1。
假设Incomp(yul,ε)=3Incomp(y_{ul , \varepsilon})=3Incomp(yul,ε)=3,那么有3个POI排序错误,损失函数表示为E(3)=1+12+13E(3) = 1+\frac 1 2+ \frac 1 3E(3)=1+21+31
step3:计算推荐分数yuly_{ul}yul
yul=Uu(1).Ll(1)+Uu(2).∑l′∈Nk(l)wllLl′(1)y_{ul} = U_u^{(1)}.L_l^{(1)}+U_u^{(2)}.\sum _{l' \in N_k(l)}w_{ll}L_{l'}^{(1)}yul=Uu(1).Ll(1)+Uu(2).l′∈Nk(l)∑wllLl′(1)
U(1)∈RU×KL(1)∈RU×KU(2)∈RU×KU^{(1)} \in \mathbb{R}^{U×K} \qquad L^{(1)} \in \mathbb{R}^{U×K} \qquad U^{(2)} \in \mathbb{R}^{U×K}U(1)∈RU×KL(1)∈RU×KU(2)∈RU×K
wll′w_{ll'}wll′:访问了lll之后访问l′l'l′的概率
Uu′U_{u}'Uu′:矩阵U的第u行
wll′={(0.5+d(l,l′))−1,l′∈Nk(l)0w_{ll'} =\left\{\begin{matrix} (0.5+d(l,l'))^{-1}\qquad\qquad,l'\in N_k(l) \\ 0 \qquad \end{matrix}\right.wll′={(0.5+d(l,l′))−1,l′∈Nk(l)0
第一部分:模拟用户的偏好得分
第二部分:模拟用户基于临近点的POI的影响分
Θ={U(1),L(1),U(2)}\Theta = \{ U^{(1)},L^{(1)},U^{(2)}\}Θ={U(1),L(1),U(2)}
step3:为了避免过拟合,使用L2正则表达式
∣∣Uu(1)∣∣2<C,u=1,2,3,...,U∣∣Ll(1)∣∣2<C,l=1,2,3,...,L∣∣Uu(2)∣∣2<αCu=1,2,3,...,U||U_u^{(1)}||_2<C,\qquad\qquad u=1,2,3,...,U\\ ||L_l^{(1)}||_2<C, \qquad\qquad l=1,2,3,...,L\\ ||U_u^{(2)}||_2<\alpha C\qquad\qquad u=1,2,3,...,U∣∣Uu(1)∣∣2<C,u=1,2,3,...,U∣∣Ll(1)∣∣2<C,l=1,2,3,...,L∣∣Uu(2)∣∣2<αCu=1,2,3,...,U
基于地理因式分解法的POI推荐排序算法(Ranking based Geographical Factorization Method,Rank-GeoFM)相关推荐
- 【推荐实践】58招聘推荐排序算法实战与探索
背景 58同城作为中国最大的分类信息网站,为用户提供招聘.租房.二手车及黄页等多种信息服务,其中招聘业务是公司的主要业务之一.招聘平台有千万级的求职者用户,每天有百万级的新增职位发布,如何提高招聘方与 ...
- 读论文之《基于 FPGA 的并行全比较排序算法》
为什么介绍这种排序算法:最近在独立编写霍夫曼编码的verilog HDL设计程序,其中用到了排序模块,对一组数据进行排序,苦寻几天,最终找到了这个全新的适合硬件实现的排序算法,分享与此,以空间换时间的 ...
- 马蜂窝推荐排序算法模型是如何实现快速迭代的
点击上方"马蜂窝技术",关注订阅更多优质内容 Part.1 马蜂窝推荐系统架构 马蜂窝推荐系统主要由召回(Match).排序(Rank).重排序(Rerank)几个部分组成,整体架 ...
- 基于 FPGA 的并行全比较排序算法,topK
以空间换时间的并行排序算法. https://blog.csdn.net/Reborn_Lee/article/details/80469391 并行全比较排序算法介绍 排序是一种重要的数据运算,传统 ...
- 2022搜狐校园 情感分析 × 推荐排序 算法大赛 baseline
比赛链接:https://www.biendata.xyz/competition/sohu_2022/ 完整代码 可关注ChallengeHub 回复"搜狐"即可获取 赛题背景 ...
- 桶排序算法(基于Java实现)
title: 桶排序算法(基于Java实现) tags: 桶排序算法 桶排序算法的原理和代码实现 一.桶排序算法的原理 桶排序,顾名思义,会用到"桶",核心思想是将要排序的数据分到 ...
- C++实现十大排序算法(冒泡,选择,插入,归并,快速,堆,希尔,桶,计数,基数)排序算法时间复杂度、空间复杂度、稳定性比较(面试经验总结)
排序算法分类 内部排序算法又分为基于比较的排序算法和不基于比较的排序算法,其分类如下: 比较排序: 直接插入排序 希尔排序 (插入) 冒泡排序 快速排序 (交换) 直接选择排序 ...
- 推荐系统遇上深度学习(二十)-贝叶斯个性化排序算法原理及实战
排序推荐算法大体上可以分为三类,第一类排序算法类别是点对方法(Pointwise Approach),这类算法将排序问题被转化为分类.回归之类的问题,并使用现有分类.回归等方法进行实现.第二类排序算法 ...
- 排序算法时间复杂度、空间复杂度、稳定性比较
排序算法分类 排序算法比较表格填空 排序算法 平均时间复杂度 最坏时间复杂度 空间复杂度 是否稳定 冒泡排序 :-----: :-–: :-–: :-–: 选择排序 :-----: :-–: :-–: ...
最新文章
- HTML5日期输入类型
- php向ldap插入数据,给LDAP添加用户,构造用户文件,然后使用phpLadpadmin导入
- 信息报送不及时整改措施_工商年报如何报送?原来这才是正确打开方式
- CentOS-6.3安装使用MongoDB
- vue单表table
- 通俗易懂的monteCarlo积分方法(八)
- 房屋管理系统简单Damo
- Linux系统监视与进程管理
- $route.matched的作用以及面包屑导航的制作
- 数据采集与埋点简介之 代码埋点、可视化埋点与无痕埋点
- 只会画火柴人?手残怎样开始学画画?
- 大鱼吃小鱼算法java,瞬间高大上了!
- 微信小程序链接生成二维码weapp-qrcode
- 使用163邮箱发送邮件报错(554, b'DT:SPM 163 smtp3,G9xpCgCHi5RJOFVemMZ4Dw--.348S3 1582643274,please see http://ma
- 基本概念:转发和重定向
- 华为BGP协议基础配置
- android sqlite加密数据库,Android Sqlite数据库加密
- 【Axure交互教程】购物车结算效果
- 虚幻4引擎学习日记----个人2d游戏开发_1
- S5PV210 PWM定时器
热门文章
- [Zombie]僵尸进程
- 【我的ASM学习进阶之旅】 介绍一个基于gradle transform api和ASM的字节码插件平台ByteX
- 【网络安全-键盘监视】学会以后去捉弄舍友,看他有了什么不可告人的秘密
- 多线程并发请求测试脚本
- JVM17_Tomcat打破双亲委派机制、执行顺序、底层代码原理、Tomcat|JDBC破坏双亲委派机制带来的面试题
- java restful开发规范_restful规范
- testng查看覆盖率_代码覆盖率测试技术
- DataView 使用技巧 [转]
- 面试iOS招聘题 机会在自己手中
- C# FTP上传和下载文件操作