基于模型的协同过滤思想
基本思想:
用户具有一定的特征,决定着他的偏好选择;
物品具有一定的特征,影响着用户是否选择它;
用户之所以选择一个商品,是因为用户特征与物品特征相互匹配;
基于这种思想,模型的建立相当于从行为数据中提取特征,给用户和物品同时打上标签,这和基于人口统计学的用户标签、基于内容方法的物品标签本质是一样的,都是特征的提取和匹配;
有显性特征时(比如用户标签,物品分类标签)我们可以直接匹配作出推荐;
没有时,可以根据已有的偏好数据,去发掘出隐藏的特征,这需要用到隐语义模型(LFM)
基于模型的协同过滤推荐,就是基于样本的用户偏好信息,训练一个推荐模型,然后根据实时的用户喜好的信息进行预测新物品的得分,计算推荐
基于近邻的推荐和基于模型的推荐
基于近邻的推荐是预测时直接使用已有的用户偏好数据,通过近邻数据来预测对新物品的偏好(类似分类);
而基于模型方法,是要使用这些偏好数据来训练模型,找到内在规律,再用模型来做预测(类似回归);
训练模型时,可以基于标签内容来提取物品特征,也可以让模型去发掘物品的潜在特征;这样的模型被称为隐语义模型(Latent Factor Model,LFM)
隐语义模型(LFM)
用隐语义模型来进行协同过滤的目标:
揭示隐藏的特征,这些特征能够解释为什么给出对应的预测评分;
这类特征可能是无法直接用语言解释描述的,事实上我们并不需要知道,类似玄学;
通过矩阵分解进行降维分析:
协同过滤算法非常依赖历史数据,而一般的推荐系统中,偏好数据又往往是稀疏的;这就需要对原始数据做降维处理
分解之后的矩阵,就代表了用户和物品的隐藏特征
隐语义模型的实例:
基于概率的隐语义分析(PLSA)
隐式迪利克雷分布模型(LDA)
矩阵因子分解模型(基于奇异值分解的模型,SVD)
LFM 降维方法 —— 矩阵因子分解
假设用户物品评分矩阵为R,现在有m个用户,n个物品
我们想要发现k个隐类,我们的任务就是找到两个矩阵P和Q,使得这两个矩阵的乘机近似等于R,即将用户物品评分矩阵R分解成为两个低维矩阵相乘:
矩阵因子分解:
LFM 的进一步理解
我们可以认为,用户只所以给电影打出这样的分数,是有内在原因的,我们可以挖掘出影响用户打分的隐藏因素,进而根据未评分电影与这些隐藏因素的关联度,决定此未评分电影的预测评分;
应该有一些隐藏的因素,影响用户的打分,比如电影:演员、题材、年代…甚至不一定是人直接可以理解的隐藏因子;
找到隐藏因子,可以对user和item进行关联(找到是由于什么使得user喜欢/不喜欢此item,什么会决定user喜欢/不喜欢此item),就可以推测用户是否会喜欢某一部未看过的电影;
对于用户看过的电影,会有相应的打分,但一个用户不可能看过所有电影,对于用户没有看过的电泳是没有评分的,因此用户评分矩阵大部分项都是空的,是一个稀疏矩阵
如果我们能够根据用户给已有电影的打分准则推测出用户会给没有看过的电影的打分,那么就可以根据预测结果给用户推荐他可能打高分的电影
矩阵因子分解:
我们现在来做一个一般性的分析
一个m * n的打分矩阵R可以用两个小矩阵Pmk 和Qkn的乘积^R 来近似:
得到Pmk 和Qkn的乘积^R 不再是稀疏的,之前R中没有的项也可以由P,Q的乘积算出,这就得到了一个预测评分矩阵;
模型的求解 —— 损失函数
现在的问题是:怎样得到这样的分解方式 ^ R =P *Q呢?
矩阵分解得到的预测评分矩阵^R,与原评分矩阵R在已知的评分项上可能会有误差,我们的目标是找到一个最好的分解方式,让分解之后的预测评分矩阵总误差最小
损失函数:
我们选用平方损失函数,并且加入正则化项,以防过拟合