专栏首页数据魔术师论文算法复现 | 推荐系统之基于Item Co-occurrence矩阵分解的原理及实现

论文算法复现 | 推荐系统之基于Item Co-occurrence矩阵分解的原理及实现

欲下载本文相关的代码,请移步留言区

/前言/

传统的推荐系统使用用户-项目匹配矩阵来预测用户对项目的兴趣程度,矩阵如上图所示,推荐算法的实现过程可以看作是填补矩阵中缺失值的过程。

其中比较占主流的方法是矩阵分解(matrix factorization),从2009年的Netflix推荐算法大赛至今,矩阵分解家族延伸出来了各种各样的算法,比如概率矩阵分解、社会化矩阵分解、基于信任关系的矩阵分解和结合产品的社会化矩阵分解等等,前几期我们已经实现了部分矩阵分解的算法:

读书笔记(27)| 推荐系统之概率矩阵分解原理及实现

读书笔记(31)| 推荐系统之社会化矩阵分解原理及实现

今天就让我们来实现一下从矩阵分解方法延伸出来的又一新的方法Item Co-occurrence算法。

1. Introduction

阅读文章:

Factorization Meets the Item Embedding: Regularizing Matrix Factorization with Item Co-occurrence

DOI: http://dx.doi.org/10.1145/2959100.2959182

在社会化矩阵分解的基础之上,这篇文章提出了Item Co-occurrence factorization模型,与社会化矩阵分解不同的是,该模型将用户-项目匹配矩阵和项目-项目共现矩阵通过共享项目潜因子进行联合分解,来预测用户-项目匹配矩阵中的空值,过程如下图所示。其中,左下的矩阵是用户-项目的匹配矩阵,矩阵里的元素表示用户给项目的打分,分值越高表示用户对项目的偏好程度越大,右下矩阵是项目-项目共现矩阵。

比较本文的方法与weight matirx factorization(wmf)方法,结果显示当用户在平台累积的行为比较少(冷用户)的时候本文的算法可以得到更准确的推荐结果,但是如果用户在平台累积的行为数据较多(活跃用户)的时候,其效果却和wmf差不多,这是因为对于一个庞大的数据集,活跃用户数目是非常少的,这会增加标准误差。

在应用场景方面,本文的方法可以应用在ArXiv的论文推荐,豆瓣、Netflix、MovieLens等平台上的电影推荐,网易云等音乐平台上的歌曲、歌单推荐,还有各大电商平台上的产品推荐等。并且在数据较稀疏的情况下,该方法的表现较其他方法要好,所以可以用于对刚进入上述平台的用户产生推荐列表。

2. Model

1)Matrix factorization

矩阵分解通过将目标矩阵分解成两个小因子矩阵的乘积来预测目标矩阵中的空值,在下图中我们将用户-项目匹配矩阵分解成用户隐因子和项目隐因子矩阵,在用户隐因子矩阵中每一行代表一个用户的因子,同理项目隐因子矩阵中每一行也表示项目的隐因子。

2)Item embedding

3)The Co-Factor model

4)coordinate updates

3.Algorithm

1)Data preprocessing

数据获取

数据分布

数据过滤和拆分

保存结果

2)Train Co-Factor Model

构造PPMI矩阵

生成co-occurrence矩阵

构建SPPMI矩阵

Train the model

上图中Validation NDCG@k随着迭代进行逐渐提高,这说明通过不断学习,模型预测的效果越来越好,DCG原先是一个衡量搜索引擎算法的指标,在这里我们将DCG的结果归一化后得到NDCG,其值越接近1表示推荐准确度越好。

3)Test the model

从测试的结果来看MAP@100表示第100个SPPMI矩阵预测出平均精度均值为0.0545,是用来衡量算法精度的好坏的,在这里说一下虽然这个数字看上去不是很好,但去阅读原文你会发现作为文章的baseline算法weighted matrix factorization (WMF)的MAP@100只有0.047。

- END -

本文分享自微信公众号 - 数据魔术师(data-magician),作者:老薛带你学Python

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python AI 教学 | 矩阵补全(matrix completion)的实现及应用

    假设你现在手头上有一个用户的观影历史数据矩阵,这个矩阵的行表示用户,列表示电影,矩阵中的元素为观众给电影的星级,1-5代表着用户对电影的喜爱程度递增。矩阵局部见...

    用户1621951
  • Python AI 教学 | 主成分分析(PCA)原理及其应用

    假如你是一家淘宝店店主,你所负责运营的淘宝店2018年全年的流量及交易情况可以看成是一组记录的集合,其中每一天的数据是一条记录,(日期,浏览量,访客数,下单数,...

    用户1621951
  • Python AI 教学|SVD(Singular Value Decomposition)算法及应用

    如果一个向量v是方阵A的特征向量,则将其可以表示为Av=λv。λ被称为特征向量v对应的特征值。

    用户1621951
  • 透析矩阵,由浅入深娓娓道来—高数-线性代数-矩阵

    线性代数是用来描述状态和变化的,而矩阵是存储状态和变化的信息的媒介,可以分为状态(静态)和变化(动态)信息来看待。

    周陆军
  • 【读书笔记】之矩阵知识梳理

    用户1594945
  • 基于协同过滤的SVD的推荐系统

    参考论文:Using Singular Value Decomposition Approximation For Collaborative Filterin...

    张凝可
  • 矩阵相乘法则和技巧

    只有当第一个矩阵(左矩阵)的列数等于第二矩阵(右矩阵)时,两矩阵才能相乘。因为得到的结果矩阵的i一行的第j个元素(Cij)是左矩阵第i行所有元素分别与右矩阵第...

    vv彭
  • 数据分析与数据挖掘 - 06线性代数

    导数是高等数学中非常重要的知识点,也是人工智能的算法应用中比较常用的一个知识,这一章我们的重点就是讲解一下导数和其求导法则。首先我们来看一下导数的基本概念:函数...

    马一特
  • matlab矩阵及其运算(四)

    大家好,感谢大家对matlab爱好者公众号的厚爱!如果公众号文章对您有帮助,别忘了分享和点赞哦!若您对公众号有什么意见或建议,请在公众号中回复或在任意文章底部留...

    matlab爱好者
  • 30秒看懂矩阵

    矩阵中每一个数都和这个常数相乘,这个意义上矩阵除以常数也没问题。不过从解方程的意义上讲,矩阵乘以常数之后还是一样的矩阵。

    gojam

扫码关注云+社区

领取腾讯云代金券