R M S E = ∑ u , i ∈ T ( r u i − r ^ u i ) 2 ∣ T ∣ RMSE = \frac{\sqrt{\sum_{u, i \in T}(r_{ui} - \hat{r}_{ui}})^{2}}{\lvert T \rvert} RMSE=∣T∣∑u,i∈T(rui−r^ui)2
M A E = ∑ u , i ∈ T ∣ r u i − r ^ u i ∣ ∣ T ∣ MAE = \frac{\sum_{u,i \in T} \lvert r_{ui} - \hat{r}_{ui} \rvert}{\lvert T \rvert} MAE=∣T∣∑u,i∈T∣rui−r^ui∣
描述推荐算法对物品长尾的发掘能力(推荐结果中尽可能覆盖多的物品且出现次数差不多=长尾发掘能力强)
C o v e r a g e = ∣ ⋃ u ∈ U R ( u ) ∣ ∣ I ∣ Coverage = \frac{\lvert \bigcup_{u \in U} R(u) \rvert}{\lvert I \rvert} Coverage=∣I∣∣⋃u∈UR(u)∣
H = − ∑ i = 1 n p ( i ) l o g ( p ( i ) ) H = - \sum_{i=1}^{n} p(i)log(p(i)) H=−i=1∑np(i)log(p(i))
G = 1 n − 1 ∑ j = 1 n ( 2 j − n − 1 ) p ( i j ) G = \frac{1}{n-1}\sum_{j=1}^{n}(2j - n - 1)p(i_{j}) G=n−11j=1∑n(2j−n−1)p(ij)
马太效应:强者更强,弱者更弱,在推荐问题中,会存在热门问题更热,长期霸占首页展示获得更多的曝光机会.
1.从原始的用户行为中计算出物品的流行度和基尼系数 G 1 G_1 G1
2.从推荐算法给出的推荐结果列表中计算出物品流行度的基尼系数 G 2 G_2 G2
3.如果 G 2 > G 1 G_2 > G_1 G2>G1 ,推荐算法存在马太效应
用户的兴趣往往是多样的,但具体到用户访问推荐系统的某一刻兴趣往往是单一的,如果推荐结果也比较单一极有可能不能覆盖到用户此刻的兴趣.
D i v e r s i t y = 1 − ∑ i , j ∈ R ( u ) , i ≠ j S ( i , j ) 1 2 ∣ R ( u ) ∣ ( ∣ R ( u ) ∣ − 1 ) Diversity = 1 - \frac{\sum_{i,j\in R(u),i \neq j} S(i, j)}{\frac{1}{2}\lvert R(u)\rvert(\lvert R(u)\rvert -1)} Diversity=1−21∣R(u)∣(∣R(u)∣−1)∑i,j∈R(u),i=jS(i,j)
D = 1 ∣ U ∣ ∑ u ∈ U D i v e r s i t y ( R ( u ) ) D = \frac{1}{\lvert U \rvert}\sum_{u\in U} Diversity(R(u)) D=∣U∣1u∈U∑Diversity(R(u))
R e c a l l = ∑ u ∣ R ( u ) ⋂ T ( u ) ∣ ∑ u ∣ T ( u ) ∣ Recall = \frac{\sum_{u} \lvert R(u) \bigcap T(u) \rvert}{\sum_{u} \lvert T(u) \rvert} Recall=∑u∣T(u)∣∑u∣R(u)⋂T(u)∣
P r e c i s i o n = ∑ u ∣ R ( u ) ⋂ T ( u ) ∣ ∑ u ∣ R ( u ) ∣ Precision = \frac{\sum_{u} \lvert R(u) \bigcap T(u) \rvert}{\sum_{u} \lvert R(u) \rvert} Precision=∑u∣R(u)∣∑u∣R(u)⋂T(u)∣
新颖:推荐用户没有见过的,推荐结果的平均流行度,一定程度上可以比较粗犷的反映新颖性.
令人惊喜的推荐结果:推荐的结果跟用户的喜好不相似,但是用户对推荐的结果很满意.
推荐结果的让用户信任,会增加用户和推荐系统的交互行为
在用户和推荐系统交互的过程中可以实时的更新推荐列表
可以实时的将新的物品进行推荐
尽量使用代价较高的用户行为
对数据进行攻击检测,清洗异常数据
W u v = ∣ N ( u ) ⋂ N ( v ) ∣ ∣ N ( u ) ⋃ N ( v ) ∣ W_{uv} = \frac{\lvert N(u) \bigcap N(v) \rvert}{\lvert N(u) \bigcup N(v) \rvert} Wuv=∣N(u)⋃N(v)∣∣N(u)⋂N(v)∣
W u v = ∣ N ( u ) ⋂ N ( v ) ∣ ∣ N ( u ) ∣ ∣ N ( v ) ∣ W_{uv} = \frac{\lvert N(u) \bigcap N(v) \rvert}{\sqrt{\lvert N(u) \rvert \lvert N(v) \rvert}} Wuv=∣N(u)∣∣N(v)∣∣N(u)⋂N(v)∣
两用户计算相似度,时间复杂度: O ( ∣ U ∣ ∗ ∣ U ∣ ) O(\lvert U \rvert* \lvert U \rvert) O(∣U∣∗∣U∣)
事实上,很多用户之间并有交集,很多 ∣ N ( u ) ⋂ N ( v ) ∣ = 0 \lvert N(u) \bigcap N(v) \rvert = 0 ∣N(u)⋂N(v)∣=0的情况.
所以,可以之计算出用户两两之间有交互的用的相似度.
item1 | item2 | item3 | |
---|---|---|---|
user | |||
A | a | b | d |
B | a | c | None |
C | b | e | None |
D | c | d | e |
user1 | user2 | |
---|---|---|
item | ||
a | A | B |
b | A | C |
c | B | D |
d | A | D |
e | C | D |
WMat
A | B | C | D | |
---|---|---|---|---|
A | 0 | 1 | 1 | 1 |
B | 1 | 0 | 0 | 1 |
C | 1 | 0 | 0 | 1 |
D | 1 | 1 | 1 | 1 |
P ( u , i ) = ∑ v ∈ S ( u , K ) ⋂ N ( i ) w u v r v i P(u, i) = \sum_{v \in S(u, K) \bigcap N(i)} w_{uv} r_{vi} P(u,i)=v∈S(u,K)⋂N(i)∑wuvrvi
P ( A , c ) = W A , B + W A , D = 1 6 + 1 3 = 0.7416 P(A, c) = W_{A,B} + W_{A, D} = \frac{1}{\sqrt{6}}+\frac{1}{3}= 0.7416 P(A,c)=WA,B+WA,D=61+31=0.7416
削弱两两用户之间共有的热门物品对相似度计算的影响.
W u v = ∑ i ∈ N ( u ) ⋂ N ( v ) 1 l o g 1 + ∣ N ( i ) ∣ ∣ N ( u ) ∣ ∣ N ( v ) ∣ W_{uv} = \frac{\sum_{i\in N(u)\bigcap N(v)} \frac{1}{log1 + \lvert N(i) \rvert}}{\sqrt{\lvert N(u) \rvert \lvert N(v) \rvert}} Wuv=∣N(u)∣∣N(v)∣∑i∈N(u)⋂N(v)log1+∣N(i)∣1
1 l o g 1 + ∣ N ( i ) ∣ \frac{1}{log1 + \lvert N(i) \rvert} log1+∣N(i)∣1 : 物品热度的倒数
RMat # 评分矩阵
user | p1 | p2 | p3 | p4 | p5 | |
---|---|---|---|---|---|---|
0 | a | 5 | 3 | 4 | 4 | NaN |
1 | b | 3 | 1 | 2 | 3 | 3.0 |
2 | c | 4 | 3 | 4 | 3 | 5.0 |
3 | d | 3 | 3 | 1 | 5 | 4.0 |
4 | e | 1 | 5 | 5 | 2 | 1.0 |
s i m ( a , b ) = ∑ p ∈ P ( r a , p − r ˉ a ) ( r b , p − r ˉ b ) ∑ p ∈ P ( r a , p − r ˉ a ) 2 ∑ p ∈ P ( r b , p − r ˉ b ) 2 sim(a, b) = \frac{\sum_{p\in P}(r_{a,p}-\bar{r}_a)(r_{b,p} - \bar{r}_b)}{\sqrt{\sum_{p\in P}(r_{a,p} - \bar{r}_a)^2}\sqrt{\sum_{p\in P}(r_{b,p} - \bar{r}_b)^2}} sim(a,b)=∑p∈P(ra,p−rˉa)2∑p∈P(rb,p−rˉb)2∑p∈P(ra,p−rˉa)(rb,p−rˉb)
p r e d ( a , p ) = r ˉ a + ∑ b ∈ N s i m ( a , b ) ∗ ( r b , p − r ˉ b ) ∑ b ∈ N s i m ( a , b ) pred(a,p) = \bar{r}_a + \frac{\sum_{b\in N}sim(a, b)*(r_{b,p} - \bar{r}_b)}{\sum_{b\in N}sim(a,b)} pred(a,p)=rˉa+∑b∈Nsim(a,b)∑b∈Nsim(a,b)∗(rb,p−rˉb)
W i j = ∣ N ( i ) ⋂ N ( j ) ∣ ∣ N ( i ) ∣ W_{ij} = \frac{\lvert N(i)\bigcap N(j) \rvert}{\lvert N(i) \rvert} Wij=∣N(i)∣∣N(i)⋂N(j)∣
如果物品很热门,很多人喜欢,那么热门物品会和其他物品的相似度增加.不利于对长尾物品的挖掘,增加了马太效应
W i j = ∣ N ( i ) ⋂ N ( j ) ∣ ∣ N ( i ) ∣ ∣ ( N ( j ) ∣ W_{ij} = \frac{\lvert N(i) \bigcap N(j) \rvert}{\sqrt{\lvert N(i) \rvert \lvert(N(j)\rvert}} Wij=∣N(i)∣∣(N(j)∣∣N(i)⋂N(j)∣
对分母增加了物品 j j j 的权重,减小热门物品对相似度的影响.
同理:ItemCF的计算和UserCF类似:
P ( u , j ) = ∑ i ∈ N ( u ) ⋂ S ( j , K ) w j i r u i P(u,j) = \sum_{i\in N(u) \bigcap S(j, K)} w_{ji}r_{ui} P(u,j)=i∈N(u)⋂S(j,K)∑wjirui
ItemCF两个物品的相似度是基于共同喜它们的Users,所以每个用户的历史纪录都会影响到相似度计算,如果有的用户过于活跃,因为这一个用户产生很大的开销.
W i j = ∑ u ∈ N ( i ) ⋂ N ( j ) 1 l o g 1 + ∣ N ( u ) ∣ ∣ N ( i ) ∣ ∣ N ( j ) ∣ W_{ij} = \frac{\sum_{u\in N(i)\bigcap N(j)} \frac{1}{log1+\lvert N(u) \rvert}}{\sqrt{\lvert N(i) \rvert \lvert N(j) \rvert}} Wij=∣N(i)∣∣N(j)∣∑u∈N(i)⋂N(j)log1+∣N(u)∣1
IUF是通过对两两物品的交集用户的活跃度进行变换,减小过活跃用户的影响.
ItemCF中对相似度矩阵进行最大值归一化,可以提高推荐的准确率,推荐结果的多样性.一般情况下,热门的类其类内的物品相似度一般比较大.如果不进行归一化,就会推荐热门类内的物品,增加马太效应.会降低模型覆盖率.
W ′ = W i j M a x j W i j W^{'} = \frac{W_{ij}}{Max_{j} W_{ij}} W′=MaxjWijWij
RMat # 评分矩阵
user | p1 | p2 | p3 | p4 | p5 | |
---|---|---|---|---|---|---|
0 | a | 5 | 3 | 4 | 4 | NaN |
1 | b | 3 | 1 | 2 | 3 | 3.0 |
2 | c | 4 | 3 | 4 | 3 | 5.0 |
3 | d | 3 | 3 | 1 | 5 | 4.0 |
4 | e | 1 | 5 | 5 | 2 | 1.0 |
s i m ( a ⃗ ⋅ b ⃗ ) = a ⃗ ⋅ b ⃗ ∣ a ⃗ ∣ ∗ ∣ b ⃗ ∣ sim(\vec{a}\cdot \vec{b}) = \frac{\vec{a}\cdot \vec{b}}{\lvert \vec{a}\rvert*\lvert \vec{b}\rvert} sim(a⋅b)=∣a∣∗∣b∣a⋅b
s i m ( p 1 , p 2 ) = ∑ u ∈ U ( r u , p 1 − r ˉ u ) ( r u , p 2 − r ˉ u ) ∑ u ∈ U ( r u , p 1 − r ˉ u ) 2 ∑ u ∈ U ( r u , p 2 − r ˉ u ) 2 sim(p_1, p_2) = \frac{\sum_{u\in U}(r_{u,p_1} - \bar{r}_u)(r_{u,p_2} - \bar{r}_u)}{\sqrt{\sum_{u\in U}(r_{u,p_1}-\bar{r}_u)^2}\sqrt{\sum_{u\in U}(r_{u,p_2} - \bar{r}_u)^2}} sim(p1,p2)=∑u∈U(ru,p1−rˉu)2∑u∈U(ru,p2−rˉu)2∑u∈U(ru,p1−rˉu)(ru,p2−rˉu)
预测评分
p r e d ( a , p 1 ) = ∑ p i ∈ r a t e d I t e m s ( u ) s i m ( p i , p 1 ) ∗ r a , p i ∑ p i ∈ r a t e d I t e m s ( a ) s i m ( p i , p 1 ) pred(a, p_1) = \frac{\sum_{p_i\in ratedItems(u)} sim(p_i, p_1)*r_{a,p_i}}{\sum_{p_i\in ratedItems(a)}sim(p_i, p_1)} pred(a,p1)=∑pi∈ratedItems(a)sim(pi,p1)∑pi∈ratedItems(u)sim(pi,p1)∗ra,pi
ItemCF算法对图书推荐问题中,很多图书都和<哈利波特>相关,主要是哈利波特太畅销了,大多数买书的人都会同时购买<哈利波特>.
w i j = ∣ N ( i ) ⋂ N ( j ) ∣ ∣ N ( i ) ∣ ∣ N ( j ) ∣ w_{ij} = \frac{\lvert N(i)\bigcap N(j) \rvert}{\sqrt{\lvert N(i)\rvert \lvert N(j) \rvert }} wij=∣N(i)∣∣N(j)∣∣N(i)⋂N(j)∣
如果 j j j 非常热门, ∣ N ( i ) ⋂ N ( j ) ∣ \lvert N(i)\bigcap N(j) \rvert ∣N(i)⋂N(j)∣,会很接近 ∣ N ( i ) ∣ \lvert N(i) \rvert ∣N(i)∣,尽管分母已经 j j j的热度,但是实际应用中,热门商品仍会获得很高的相似度.
W i j = ∣ N ( i ) ⋂ N ( j ) ∣ ∣ N ( i ) ∣ 1 − α ∣ N ( j ) ∣ α W_{ij} = \frac{\lvert N(i)\bigcap N(j) \rvert}{\lvert N(i)\rvert^{1-\alpha}\lvert N(j)\rvert^{\alpha}} Wij=∣N(i)∣1−α∣N(j)∣α∣N(i)⋂N(j)∣
UserCF | ItemCF | |
---|---|---|
Item | ||
性能 | 用户少于物品 | 物品少于用户 |
领域 | 时效较强,个性化弱 | 长尾挖掘,个性化强 |
实时性 | 用户新行为不会立即反馈到推荐结果 | 用户的新行为会实时影响推荐结果 |
冷启动 | 新用户不友好,用户矩阵定时更新,新物品产生用户行为后才会被推荐给相似用户 | 新用户产生一个行为即可为其推荐,物品矩阵不能实时更新 |
推荐理由 | 推荐结果可解释性弱 | 根据用户的历史推荐,结果使用户比较信服 |