Skip to main content
  1. Posts/

推荐系统之 LFM (Latent Factor Model) 隐因子模型 学习笔记

Note: This article is available in Chinese only. 本文暂无英文版本。 View original

起因是被assgin了一个新的任务…..要死.

参考资料:

推荐系统学习笔记之三 LFM (Latent Factor Model) 隐因子模型 + SVD (singular value decomposition) 奇异值分解

基于矩阵分解的隐因子模型

实时推荐系统的三种方式

先说下我的理解…

隐因子模型(LFM)是一种推荐算法,“隐"可以理解成用户喜欢某个item的间接原因.

该算法的核心思想是转化成一个矩阵分解问题..

然后用传统机器学习算法去优化分解得到的矩阵…

主要的优势如下:

  • 比较容易编程实现,随机梯度下降方法依次迭代即可训练出模型。
  • 预测的精度比较高,预测准确率要高于基于领域的协同过滤以及基于内容CBR等方法。
  • 比较低的时间和空间复杂度,高维矩阵映射为两个低维矩阵节省了存储空间,训练过程比较费时,但是可以离线完成;评分预测一般在线计算,直接使用离线训练得到的参数,可以实时推荐。
  • 非常好的扩展性,如由SVD拓展而来的SVD++和 TIME SVD++。

矩阵分解的不足主要有:

  * 

训练模型较为费时。

  * 

推荐结果不具有很好的可解释性,无法用现实概念给分解出来的用户和物品矩阵的每个维度命名,只能理解为潜在语义空间。

我们用user1,2,3表示用户,item 1,2,3表示物品,Rij表示用户i对于物品j的评分,也就是喜好度。那么我们需要得到一个关于用户-物品的二维矩阵,如下面的R。

常见的系统中,R是一个非常稀疏的矩阵,因为我们不可能得到所有用户对于所有物品的评分。于是利用稀疏的R,填充得到一个满矩阵R’就是我们的目的。

下面我们就来看看LFM是如何解决上面的问题的?对于一个给定的用户行为数据集(数据集包含的是所有的user, 所有的item,以及每个user有过行为的item列表),使用LFM对其建模后,我们可以得到如下图所示的模型:(假设数据集中有3个user, 4个item, LFM建模的分类数为4)

 

R矩阵是user-item矩阵,矩阵值Rij表示的是user i 对item j的兴趣度,这正是我们要求的值。对于一个user来说,当计算出他对所有item的兴趣度后,就可以进行排序并作出推荐。LFM算法从数据集中抽取出若干主题,作为user和item之间连接的桥梁,将R矩阵表示为P矩阵和Q矩阵相乘。其中P矩阵是user-class矩阵,矩阵值Pij表示的是user i对class j的兴趣度;Q矩阵式class-item矩阵,矩阵值Qij表示的是item j在class i中的权重,权重越高越能作为该类的代表。所以LFM根据如下公式来计算用户U对物品I的兴趣度

我们发现使用LFM后,

  1. 我们不需要关心分类的角度,结果都是基于用户行为统计自动聚类的,全凭数据自己说了算。
  2. 不需要关心分类粒度的问题,通过设置LFM的最终分类数就可控制粒度,分类数越大,粒度约细。
  3. 对于一个item,并不是明确的划分到某一类,而是计算其属于每一类的概率,是一种标准的软分类。
  4. 对于一个user,我们可以得到他对于每一类的兴趣度,而不是只关心可见列表中的那几个类。
  5. 对于每一个class,我们可以得到类中每个item的权重,越能代表这个类的item,权重越高。

于是隐因子模型转化为矩阵分解问题

然后就是通过传统机器学习算法训练

最优化问题…怎么训练就不说了…

看到很多地方问的P,Q矩阵的初始化的问题…

我看到的比较一般的做法是,全都随机,或者如果有pre train的数据,则使用这些数据…

Related

tensorflow 合并模型

·4 mins
在这里存个备份,还有些问题没有解决。 raise ValueError(“GraphDef cannot be larger than 2GB.”) 记录一些思路好了。现在是没有生成.meta文件,爆掉应该是因为所有的变量都加载到了默认图里。