推荐系统笔记:基于贝叶斯的协同过滤

Posted UQI-LIUWJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推荐系统笔记:基于贝叶斯的协同过滤相关的知识,希望对你有一定的参考价值。

1 问题的限制 & 定义

在本文中,我们假设有少量不同的评级,每个评级都可以被视为一个离散的分类值。

因此,在以下讨论中将忽略评级之间的排序。 例如,三个评分(如“喜欢”、“中性”和“不喜欢”)将被视为无序离散值。

不同评级数量很少的情况下,可以合理使用这种近似值,而不会显着降低准确性。

        我们假设有l个离散的评级,我们标记为v1,.....,vl。同时我们也有一个和别的协同过滤类似的评分矩阵R

2 基于贝叶斯的协同过滤

        考虑第u个用户,它对集合Iu中的条目有打分。现在我们想要预测用户u没有打分的条目j的打分情况(也就是预测)的值【只能从v1,.....,vl 里面选择一个】

        于是我们可以预测,已知Iu里面的打分情况,为v1,.....,vl中某一个的条件概率,即:

        这也就是一个条件概率,于是使用贝叶斯定理,我们有:

 

      最大的一个   就是最有可能的打分值

         与此同时,我们要知道 ,也就是右边的分母部分,是和vs取哪个没有关系的(独立的),所以为了方便起见,可以去掉

        于是3.4可以简化为:

 那么,怎么求右边的这两项呢?

         (先验概率),可以通过:(所有给j条目打分为vs的用户数)/(所有给j条目打分的用户数)来计算

        【注意分母是给j条目打过分的用户数,而不是所有用户数】

就得利用我们这里假设的,各个打分之间是独立的来计算了

 

其中,每一个 的计算方法是:(所有给j打分为vs,同时给k打分为的用户数)/(所有给j打分为vs的用户数)

 所以,3.4式可以再次改写为:

 2.1 ruj后验概率的用处

1)计算最大的后验概率,他就是ruj的预测值

        这种方法将评级纯粹视为分类值,忽略了各种评级之间的所有排序。

        当可能的评级数量很少时,这是一种合理的使用方法。  

2)将预测值估计为所有评级的加权平均值,其中评级的权重是其求得的后验概率。

 当评分分布的粒度更大时,这种方法更可取。

3 解决过拟合问题

        当基础评分矩阵稀疏且观察到的评分数量很少时,就会出现问题。 在这种情况下,数据驱动的估计可能不会保持稳健。

        例如,如果只有少数用户对第 j 个项目指定了评分,则先验概率 的估计不太可能是稳健的。最极端的情况,如果没有用户为第 j 个项目指定评分,则估计的形式为 0/0,这是不确定的。

        此外,方程 3.6 右侧的每个的估计可能比先验概率的估计更不可靠。这是因为只有一小部分 为条件。在这种情况下,评分矩阵中需要分析的部分只是那些为项目 j 指定了评分 vs 的用户。如果这样的用户数量少,估计会不准确,公式3.6中的乘法项会产生很大的误差。

 一种解决方法是使用拉普拉斯平滑

我们原先对于先验概率 的计算方法为:

 拉普拉斯平滑后是:

换句话说,如果没有任何用户为条目j打分,先验概率也不会是0/0,而是1/l

α的取值会决定平滑的程度,α越大越平滑,但是结果对于数据也就越不敏感。

同理也可以用拉普拉斯平滑来处理

 4 举例

        比如我们有这样一个打分(打分这里只有可能是±1) ,我们现在想预测第三个用户的两个缺失打分

        

注:这里出于简化考虑,没有使用拉普拉斯平滑       

我们先看第一个item,可能是1,可能是-1。

我们先计算1->3打分是1时候的条件概率 

可以看出来概率是1/8

再看1->打分是-1时候的条件概率 

 1/8 >0 ,所以这一项打分应该为1

 

同理,最后一项可得打分为-1

以上是关于推荐系统笔记:基于贝叶斯的协同过滤的主要内容,如果未能解决你的问题,请参考以下文章

推荐系统笔记:基于矩阵分解(总结篇)

推荐系统笔记: 基于邻居的协同过滤问题 中的降维

推荐系统笔记:基于SVD的协同过滤

推荐系统笔记:基于非负矩阵分解的协同过滤

推荐系统笔记:基于潜在因子模型的协同过滤(latent factor model)

推荐系统笔记:使用分类模型进行协同过滤