原文:《A non negative matrix factorization for collaborative filtering recommender systems based on a Bayesian probabilistic model》
摘要:将评分矩阵分解为两个非负矩阵,其component在[0,1]范围内,使我们可以准确地预测用户的评分并找到具有相同偏好的用户组。
一、引言
(一)推荐系统的分类
•基于内容的推荐系统:要求通过一些特征或口头描述来描述项目,这种推荐系统需要用户告知他们喜欢的物品种类的偏好(可以通过观察用户消费的项目类型来隐式获得)。
•基于协同过滤的推荐系统:使用评分矩阵M,其中每个用户u提供他有多喜欢某些项目的信息。这种推荐系统不使用关于用户或项目的特征的信息,而是通过用户已经做出的评分来检测用户的品味。
(二)基于协同过滤的推荐系统的分类
根据用于预测用户品味的算法的类型可以将基于协同过滤的推荐系统分为两个大类
(1)基于记忆
基本上使用K-Nearest Neighbor算法(K-NN算法)来预测用户的品味
优点:直观、可解释性强、若能使用合适的相似度函数则预测质量会很高、可衡量预测的可靠性
缺点:没有使用可扩展的(scalable)算法(对于要处理大量项目和用户的推荐系统来说这是一个致命的缺点 T_T )
KNN的工作原理:给定与用户u具有相同品味的一些用户已经对项目i给出了正向的评分,那么KNN认为用户u也会喜欢项目i。
反过来在KNN中也是成立的...
KNN还具有该性质:如果推荐系统预测用户u会喜欢项目i,那么必定有与用户u具有相同品味的一些用户已经对项目i给出了正向的评分。(记作Proposition1)
(2)基于模型
使用模型来预测用户评分,需要一个学习过程以在推荐系统启动之前找出用户和项目矩阵
优点:1⃣️涉及可扩展的推荐算法,对具有大量用户或项目的大型推荐系统是非常可取的
2⃣️一旦学习阶段结束,基于模型的推荐系统可以非常快速地预测用户的评级
Latent factor models隐因子模型
模型之一,Latent factor models隐因子模型将评分矩阵分解为用户矩阵和项目矩阵。
通过最小化目标函数(即学习过程)找出K个未知的隐因子,每个用户u和每个项目i分别与具有K个components的向量和相关联,因此,预测用户u对项目i的评分为 (在Yehuda-矩阵分解一文中对这个“经典矩阵分解“模型进行了一些拓展,如加入偏置等)
优点:隐因子模型(或矩阵分解)是所有基于模型的协同过滤算法中accuracy in predictions最好的(也优于基于记忆的推荐系统)
经典矩阵分解在学习和时认为、、服从正态分布
缺点:1⃣️鉴于高斯分布变量取值的特点,因此和的components不具有直观的概率解释
2⃣️由于和很难解释,因此模型无法证明它的预测是正确的
3⃣️不满足Proposition 1
(ps:当为隐式反馈的矩阵时,如矩阵中的值表示消费次数,、和服从泊松分布,显然可解释性增强,因为两个向量都只取正值)
二、对比
(一)矩阵分解原理在基于内容的推荐系统中的应用
矩阵分解等技术也已应用于基于内容的推荐系统:在表示项目的口头描述的矩阵中,每个分量()描述每个词在每个项目j的描述中出现的次数。分解此矩阵的主要技术包括:LSA、pLSA和LDA。
•潜在语义分析(LSA):基于解释每个项目描述中每个单词的频率的隐因子,将描述矩阵分解为与单词相关(每行是每个单词的单词向量aw)和与项目的描述相关(每列bi是每个单词的项目向量)的两个矩阵。由于这些矩阵的组成部分可能采用任意实际值,因此可能很难理解。——对照经典矩阵分解
•概率潜在语义分析(pLSA):pLSA分解的两个矩阵的组成部分有正值约束。此技术可计算单词出现在文档中的概率。实际上隐因子可被视为项目的集群,分解所得的两个矩阵的组成部分可被视作 单词出现在每个项目集群的描述中的概率 以及 项目属于每个项目集群的概率。——对照非负矩阵分解
•隐狄利克雷分布(LDA): 通过贝叶斯概率模型拓展pLSA,解决了pLSA的过拟合问题。 与pLSA一样,此技术可计算单词出现在文档中的概率。 分解所得的两个矩阵的组成部分可被视作 单词出现在每个项目集群的描述中的概率 以及 项目属于每个项目集群的概率。 ——对照基于贝叶斯概率模型的非负矩阵分解
与协同过滤中使用的评分矩阵不同,该矩阵的所有项都已知(尽管包含许多0值)。若将LSA,pLSA或LDA等技术应用于评分矩阵,则隐含地用0填充矩阵中的未知值,因此这些技术不适合预测显式反馈(如评分)。
(二)在评分预测中矩阵分解的应用
经典矩阵分解非负矩阵分解基于贝叶斯概率模型的非负矩阵分解
(1)经典矩阵分解
(2)非负矩阵分解
(3)基于贝叶斯概率模型的非负矩阵分解
很明显本文提出的模型满足proposition1,因此我们可以证明并理解它所产生的所有推荐。
隐因子表示在我们的推荐系统中具有相同品味的用户组, 参数K表示组数(为了在推荐系统中获得准确的预测,本文的模型中的参数K小于经典矩阵分解中的K)。
该模型中和属于[0,1]范围内,具有有可理解的概率意义上的解释,分别表示 用户u属于用户组k的概率 以及 组k中的用户喜欢项目i的概率,其中向量非常稀疏,只有极少数分量值较大,而许多分量的取值接近0(因此预测评分通常很快)。
三、本文的概率模型
(一)模型输入
原始的评分矩阵值为 (取值为0,1,2,3,4) ,归一化的评分矩阵为,其中R=4
(二)模型输出
与用户关联的N×K矩阵() where ;与项目关联的K×M矩阵()
根据算法的输出,我们可以立即计算用户u喜欢项目i的概率,即
一旦我们计算出用户u喜欢项目i的概率,我们就可以对其进行转换以获得用户u对项目i的非归一化评分
(三)模型参数
• K∈N 表示算法要找出来的用户组数
• α∈(0,1) 表示 获得overlapping用户组的概率,α接近0表示用户往往只属于一个组,α越大表示我们允许用户在多个组中
• β> 1 与算法推断出一组用户喜欢某个项目所需的证据量有关, β越大则所需的证据越多
(四)用户对项目评分的概率模型
用户u属于哪一组是一个随机变量X,取值为{1,...,K}
,他属于第k组的概率为
类似地,对物品i给出评分的用户u属于哪一组也是一个随机变量
记作 ,取值为{1,...,K}
中的K个分量表示用户u属于每个组的概率,
由多项式分布的共轭先验分布为狄利克雷分布可得,,
物品i是否被第k组的用户喜欢是一个随机变量,取值为0或1,
物品i被第1组用户喜欢的概率为
其中表示第一组用户中喜欢物品i的人数,表示第一组的用户数
中的K个分量表示物品i被每个组的用户喜欢的概率,
由二项分布的共轭先验分布为Beta分布可得,
(Beta分布采用[0,1]内的值,是用户u喜欢或不喜欢项目的置信度)
是可观测的变量,服从二项分布,取值为0到R(set R=4)
而我们要做的就是根据已知的变量,找出未知的隐变量的后验概率分布。
使用二项分布对评分进行建模的原因如下:
1⃣️二项分布是离散的,推荐系统中的评分也是离散的;2⃣️若使用分类分布的话,它不会考虑评分的顺序关系;3⃣️二项分布可合理地对用户对项目的评分方式建模:用户评估项目的R个特征,评分的数值则表示用户喜欢的特征的数量;4⃣️二项分布只有一个未知参数(用户喜欢项目的某个特征的概率),这避免了模型过拟合。
(五)用变分贝叶斯推断求解隐变量的后验概率分布的近似解
由于我们的模型具有共轭指数结构,因此有:变量服从指数分布族中的分布,变量的后验分布和变量的先验分布是同分布的。
故我们用近似后验分布来逼近真正的后验分布
(六)求得后,计算模型的输出
(1)目的1——找出具有相同品味的用户群
对每个用户u都有
(2)目的2——预测用户偏好
表示用户u喜欢物品i的概率
正确写法
(七)算法的实现过程
我们使用常用于变分推理技术的坐标上升算法来计算,然后才能计算和
(八)模型参数对输出的影响
参数α∈(0,1)与用户向量的稀疏程度有关,一般是α越小,用户向量越稀疏,可以通过交叉验证来选择适当的参数α(结合我们在模型中希望的用户向量的稀疏度)。
参数β> 1 与我们的模型推断用户喜欢或不喜欢某个项目所需的证据程度有关,β越高则模型推断出用户喜欢或不喜欢某个项目需要的证据越多,可以通过交叉验证来设定参数β。
(九)衡量模型的表现(从计算和内存成本的角度)
方法1:推荐系统计算每个用户u在每个项目i上的,以的方式向每个用户推荐项目i。与经典矩阵分解不同的是,本文提出的模型和S都具有概率意义:如果用户u会喜欢项目i的预测概率,则将项目i推荐用户u。
方法2:好好利用用户向量和项目向量的components都是0-1内的正数
方法3:进一步利用用户向量很稀疏的特点
对于每个用户u,存储两个长度一样的小列表,列表长度为
: 中第n大的成分对应的因子k;:中第n大的成分
四、算法输出的含义
用户向量通常是稀疏的,这使我们能够以与K-NN算法相同的方式理解和证明我们模型的预测。
如果我们预测值很高(接近1),那么必然有一个k∈{1 ... K}使得和接近1。
根据这些向量的含义,我们得到:
•接近1,也就是说,用户u与组k中的用户具有相同的品味,用户u很可能属于用户组k
•接近1,也就是说用户组k中的许多用户对项目i有正面评分
因此我们认为存在与用户u具有相同品味的用户(因为他们属于同一组),他们对项目i给予了肯定的评价。 可以看出,这种推理是用于K-NN算法的理论,用于理解所提供的推荐。
五、模型的评价
(一)评价指标
(1)评价预测准确性
(2)评价推荐准确性
集合R表示推荐系统提供给每个用户的N个项目的集合。
集合S表示推荐系统应该向每个用户推荐的项目集合。