朴素贝叶斯分类器是数据挖掘领域中的一种经典方法,而所谓朴素贝叶斯协同过滤(Naive Bayes Collaborative Filtering),无非是将推荐系统中的评分预测问题转化成一个分类问题。不过,在推荐系统中,借助贝叶斯分类实现协同过滤需要做以下两点考虑:用户对项(例如商品、电影)的评分必须是一些具有代表性的数字(即定序数据如1~5分)或者评论(如喜欢、不喜欢、一般);
用户(或项)之间是条件独立的(说明:虽然条件独立的假设在很多贝叶斯分类器的应用场景中并不成立,但却有较好的效果)。
1 朴素贝叶斯协同过滤的原理
为了便于理解朴素贝叶斯协同过滤的原理,现在我们选取一个评分表进行实例分析,如图1所示,评分表中给出了5个用户对6件商品的评分情况,其中将
记为“喜欢”,而
则为“不喜欢”。
以预测用户3对商品1的评分为例,已给定了用户3对商品2、3、4、5的评分,需要将预测任务描述成计算商品1最可能评分值的问题。图1 5个用户对6件商品的评分表,其中,数字1表示“喜欢”,数字-1表示“不喜欢”
将评分矩阵记作
,用户
对商品
的评分记作
,用户3评论过的商品记作集合
,根据贝叶斯理论,用户3对商品1评分为
的概率(后验概率)为
由于用户3对商品2、3、4、5的评分分别为
、
、
、
,进而有
在这里,
是用户3对商品1评分为
的概率,也是贝叶斯模型的先验概率,可以直接从用户3的历史评分中计算得到,从图1可以看到,用户3对商品2、3、4、5进行了评分,其中,评分为1的商品是2和3,故
.
是商品1评分为1条件下商品2评分为
的概率,在评分表中,商品1评分为
的次数是2,而商品1评分为
的同时商品2评分为
的次数是1,故
.
以此类推,
综上所述,我们能够得到用户3对商品1评分为
的概率为
用户3对商品1评分为
的概率与上述原理相同,感兴趣的读者可以自己动手算一下:
到这里,我们可以得到:用户3对商品1评分为
的可能性比较大。
2 常见的过拟合问题
在图1的评分表中,用户对绝大多数商品都进行了评分,然而,真实的数据并没有这么完美,举一个例子,如果没有用户对商品
进行过评分,则联合概率
中会出现
,在这种情况下,计算出来的后验概率是任何没有参考价值的。
在实际的应用中,假如我们实际拿到的评分矩阵是非常稀疏的,并且样本量也不多,那么,上面提到的问题就在所难免了,为了解决这个问题,人们通常采用拉普拉斯平滑,即,对于商品
,假设评分为
的总次数为
,评分为
的总次数为
,以往计算先验概率是按照
现在额外增加一个拉普拉斯平滑参数
,先验概率被改写成如下形式
其中,即使商品
没有被任何用户评论过,仍然会得到一个先验概率
,这里的参数
会控制平滑程度,若
取值过大,则会导致先验概率过于平滑,对观测样本不敏感。
当然,为了解决可能存在的过拟合问题,也可以在联合概率
和
中加入拉普拉斯平滑参数。
3 参考文献
本文主要参考了Charu C. Aggarwal于2016年出版的著作《Recommender systems》(链接:Recommender Systems)第82-85页(章节:3.4 Naive Bayes Collaborative Filtering)。