1.最近最热门
给定时间T,物品i最近的流行度ni(T)可以定义为:
这里,α是时间衰减函数。
下面的python代码实现了上面的计算公式:
2.时间上下文相关的ItemCF算法
首先回顾一下前面提到的基于物品的协同过滤算法,它通过如下公式计算物品的相似度:
而在给用户 u 做推荐时,用户 u 对物品 i 的兴趣 p(u,i) 通过如下公式计算:
在得到时间信息(用户对物品产生行为的时间)后,我们可以通过如下公式改进相似度计算
注意,上面的公式在分子中引入了和时间有关的衰减项f(|t ui - t uj|),其中t ui是用户u对物品i产生行为的时间。 f 函数的含义是,用户对物品 i 和物品 j 产生行为的时间越远,则f(|t ui - t uj|)越小。这里令
α是时间衰减参数,它的取值在不同系统中不同。如果一个系统用户兴趣变化很快,就应该取比较大的α,反之需要取比较小的α。
改进后 ItemCF 的相似度可以通过如下代码实现:
除了考虑时间信息对相关表的影响,我们也应该考虑时间信息对预测公式的影响。一般来说,用户现在的行为应该和用户最近的行为关系更大。因此,我们可以通过如下方式修正预测公式:
其中,t0是当前时间。上面的公式表明,t uj越靠近t0,和物品 j 相似的物品就会在用户 u 的推荐列表中获得越高的排名。β是时间衰减参数,需要根据不同的数据集选择合适的值。上面的推荐算法可以通过如下代码实现。
3.时间上下文相关的UserCF算法
首先回顾一下 UserCF 的推荐公式。 UserCF 通过如下公式计算用户 u 和用户 v 的兴趣相似度:
其中 N(u) 是用户 u 喜欢的物品集合, N(v) 是用户 v 喜欢的物品集合。可以利用如下方式考虑时间信息:
上面公式的分子对于用户 u 和用户 v 共同喜欢的物品 i 增加了一个时间衰减因子。用户 u 和用户v 对物品 i 产生行为的时间越远,那么这两个用户的兴趣相似度就会越小。
在得到用户相似度后, UserCF 通过如下公式预测用户对物品的兴趣:
其中, S(u,K) 包含了和用户 u 兴趣最接近的 K 个用户。如果用户 v 对物品 i 产生过行为,那么r vi=1,否则r vi=0。
如果考虑和用户 u 兴趣相似用户的最近兴趣,我们可以设计如下公式: