这一讲主要讲了基于用户的协同滤波推荐方法。所谓协同,是指使用多个元素来进行分析,所谓滤波,后文有解释。这一讲主要分为以下内容:
基本思想
我们过去的选择能够预测我们未来的选择。这又基于下面两点假设:
1 我们的个人喜好基本稳定,或者说若不稳定也与大家一起改变;2 系统限定在一个有限的领域内,以保证前面所述的稳定性——用户在电影领域存在喜好的稳定性,但在搜索领域却不存在这种个人喜好的稳定性等等。
问题描述
假设我们现在总共有
m
个用户,
解决方法
若不考虑最终的效果,我们能够想到的最简单粗暴的方式就是使用所有对物品
i
评分的用户的平均值来预测
其中, pa,i 表示 ra,i 的预测值, |ru,j| 表示对物品 i 评分的用户数量。
但是,各个用户之间会存在着评分的不同偏好,有的用户经常打高分,有的用户经常打低分,因此,对这种现象做一下normalization,就有如下的式子:
但是,这两种方式根本上采用的都是简单平均的方法,效果一般也好不到哪里去。
协同滤波的主要思想就是在平均的那一项上面做了做文章。对一个特定的用户 a ,不是简单的对其余用户一视同仁,而是将其余用户分成了三六九等,这个划分三六九等的过程,应该就是filtering的含义了。
具体到User-User的协同滤波,就是首先计算一下各个用户之间的相似性(similarity),这样,用户
其中, ωu,a 就是用户 u 与用户
但是,这样的话有可能得到的预测评分超出了原始评分的范围(原来的评分限制在(0,5],预测得到的评分有可能大于5或者小于0)。这就针对这种情况做相应的处理(若是选择topN,就直接比较大小即可,其他的可以进行截断或者重新归一化)。
具体步骤
normalization
归一化的作用主要是消除用户评分的偏差(bias)。现在主要有两种流行的方法:
user mean centering
顾名思义,这种方法就是将用户的评分做一个mean的调整,使得用户已有的评分最终能够有一个center。具体的计算方法如下:
其中, r 表示所有已评价物品的平均分,
因此,在对用户
z-score normalization
这种归一化方法与上面的唯一不同之处就是对已经进行user mean centering的得分再进行一次归一化,即:
其中, σu 可以通过下式获得:
即保证归一化后每个用户的所有评分的二范数为1。
计算用户之间的相似性
这一步是比较关键的一步,现在常用的效果比较好的方法有以下两种:
pearson similarity
其中,i的取值范围是用户u与用户a评分的common item set,即两个用户都评分的物品集合。这就造成了一个问题,当该set包含的元素比较少时,得到的数值就会不准确。比如两个用户只对一个物品进行了评价,那这两个用户的person相似度就为1,这样做显然不妥。因此有了以下的修正:
其中,N表示common item set中包含元素的数量。50这个参数可以根据效果进行调整。
cosine similarity
其中, rˆu−→ 表示用户u的评价向量(未评价的物品取值为0)。
cosine similarity不必考虑common item set的影响,因为这里采用的是所有的评分物品,而非common item set。
上述两种情况只是适用于评价是数值的情况,当用户的评价是unary data时,就得考虑其他的方法了。
选择用于预测评价的用户(neighbor)
选择用于预测评价的用户,主要是考虑到以下因素的影响:
1 用户之间的相似性具有一定的扰动,因此,采用全部的用户进行计算不一定会有很好的结果;
2 有一些similarity为负的用户,也可以不用考虑。(因为我们采用的方式是利用相似用户的信息进行评价的)
3 选取的用户太少的话,最终预测的coverage会小。
具体的方法有以下几种:
1 选择相似度大于某一阈值的用户集
2 选择数量固定的用户集(通常选定的neighbor数量为25~100;电影评分中,一般选取30~50)
进行预测
在进行了上述的步骤之后,最终的 预测方法一般采用weighted average,即:
存在的问题
User-User Collaborative filtering的计算复杂度高
假设总共有
m
个用户,
计算两个用户之间相似性
计算内容 | 时间复杂度 |
---|---|
两个用户之间的相似性 | O(n) |
一个用户与其余所有用户的相似性 | O(mn) |
所有用户之间的相似性 | O(m2n) |