算法
- 计算物品相似度矩阵 S S S
- 用于评估用户和物品的关系矩阵 A A A
- 评价分数为计算 A ∗ S A*S A∗S
- 可选步骤包括时间衰减和移除已经看过的物品
计算相似度
定义物品和物品的相似度,首先计算物品两两出现的次数,构成 m × m m\times m m×m矩阵 C C C, c i , j c_{i,j} ci,j代表物品出现的次数
- 显然矩阵式对称的 c i , j = c j , i c_{i,j} = c_{j,i} ci,j=cj,i
- 非负性 c i , j ≥ 0 c_{i,j} \geq 0 ci,j≥0
- 单个出现的次数肯定比两两出现要大 ∀ ( i , j ) C i , i , C j , j ≥ C i , j \forall(i,j) C_{i,i},C_{j,j} \geq C_{i,j} ∀(i,j)Ci,i,Cj,j≥Ci,j.
可以通过三种公式计算相似度
Jaccard
: s i j = c i j ( c i i + c j j − c i j ) s_{ij}=\frac{c_{ij}}{(c_{ii}+c_{jj}-c_{ij})} sij=(cii+cjj−cij)cijlift
: s i j = c i j ( c i i × c j j ) s_{ij}=\frac{c_{ij}}{(c_{ii} \times c_{jj})} sij=(cii×cjj)cijcounts
: s i j = c i j s_{ij}=c_{ij} sij=cij
计算用户对物品的亲和力分数
- 考虑对不同事件进行加权(比如购买,点击的权重是不一样的)
- 考虑时间问题
a i j = ∑ k w k e [ − log ( 2 ) t 0 − t k T ] a_{ij}=\sum_k w_k e^{[-\text{log}(2)\frac{t_0-t_k}{T}]} aij=k∑wke[−log(2)Tt0−tk]
a i j a_{ij} aij代表用户i对物品j的亲和力,对于物品j计算用户i对此物品所有的历史k个行为,t0代表现在的时间,这个代表随着时间的后延,权重值将减小。