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

1 问题的限制 & 定义

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

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

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

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

2 基于贝叶斯的协同过滤

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

        于是我们可以预测,已知Iu里面的打分情况,r_{uj}为v1,.....,vl中某一个的条件概率,即:P(r_{uj}=v_s|Obseved \ ratings \ in \ I_u)

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

 

      最大的一个   P(r_{uj}=v_s|Obseved \ ratings \ in \ I_u)就是r_{uj}最有可能的打分值

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

        于是3.4可以简化为:

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

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

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

P(Obseved \ ratings \ in \ I_u | r_{uj}=v_s)就得利用我们这里假设的,各个打分之间是独立的来计算了

 

其中,每一个P(r_{uk}|r_{uj}=v_s) 的计算方法是:(所有给j打分为vs,同时给k打分为r_{uk}的用户数)/(所有给j打分为vs的用户数)

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

 2.1 ruj后验概率的用处

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

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

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

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

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

3 解决过拟合问题

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

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

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

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

我们原先对于先验概率 P(r_{uj} = v_s)的计算方法为:

P(r_{uj}=v_s)=\frac{q_s}{\sum^l_{t=1}q_t}

 拉普拉斯平滑后是:

P(r_{uj}=v_s)=\frac{q_s+\alpha}{\sum^l_{t=1}(q_t+\alpha)}

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

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

同理P(r_{uk}|r_{uj} = v_{s})也可以用拉普拉斯平滑来处理

 4 举例

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

        

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

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

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

可以看出来概率是1/8

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

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

 

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UQI-LIUWJ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值