基于用户信任和商品相似度的随机游走推荐模型
标题读起来很拗口,原文是TrustWalker: A Random Walk Model for Combining Trust-based and Item-based Recommendatio,翻译得不好见谅
如上图所示,每个人对一些商品有过评分,用直线连接的用户之间存在信任关系,现在我们要预测U1对五角星的评分是多少。基本思路是:随机选择U1信任的一个用户,比如选择了U2,U2对五角星有评分,那就拿U2对五角星的评分作为U1对五角星的评分的估计;如果随机选择的不是U2而是U3,U3对五角星没有过评分,则继续找U3信任的用户,看看这些用户有没有对五角星作为评分。
上述只是粗略的思想介绍,下面进入详细的算法讲解。
在进行随机游走之前先得建立用户之间的信任关系图,如果没有显式的社交关系,我们就根据人口统计学相关的知识(比如性别、年龄、种族、地区、教育经历等)计算用户之间的相似度,相似度很高的认为他们之间有信任关系。
目标:估计用户$u_0$对荐i的评分。
每次随机游走源于用户$u_0$,在信任网络上前进了k步后到达某个用户$u$。如果u已评价过项目i,则停止此次游走,返回$r_{ui}$作为此次随机游走的结果。如果u没有评价过i,则有2个选择:
(1)以概率$\phi_{u,i,k}$停在用户u,选择u评价过的与i最相似的m个项目的评分,根据\eqref{pui}式计算$P_{ui}$作为返回结果:
\begin{equation}P_{ui}=\frac{\sum_{item\;j\;which\;similar\;to\;i}{YSim(i,j)\times{r_{uj}}}}{\sum_{item\; j \;which \;similar\; to \;i}{YSim(i,j)}}\label{pui}\end{equation}
其中$YSim(i,j)$是项目i和j的云相似度,下文会详细介绍。
(2)以概率$1-\phi_{u,i,k}$继续游走,从当前用户u信任的邻居中随机选择一个直接邻居v。
参数$\phi_{u,i,k}$不是固定不变的,它是停留在用户u的概率,这与u评价过的项目与目标项目i的相似度有关,我们可以简单地认为u评价过的项目中与项目i最相似的那个相似度越大,$\phi_{u,i,k}$就应该越大。此外在信任网络中游走得越深则噪声越大,$\phi_{u,i,k}$(即停止游走的概率)应该越大。
$\phi_{u,i,k}=\max_{j\in{RI_u}}{\frac{YSim(i,j)}{1+e^{-\frac{k}{2}}}}$
其中$RI_u$是用户u评价过的项目集合。
每次随机游走遇到以下3种情况就停止:
(1)遇到一个评价过项目i的用户u
(2)决定停止于某个用户u,将与i最相似的m个项目的聚合评分作为随机游走的结果返回。
(3)随机游走可能面临永远不会停止的情况,为避免这种情况,引入“六度人脉”的概念,设定随机游走步数k的最大值为6。
在上文中计算项目i和j的相似度时,我们没有使用传统的Pearson相似度,是因为Pearson相关系数有它的缺陷。在云模型中整体的特征用期望Ex、熵En、超熵He这3个特征来表示,$C=(Ex,En,He)$称为云向量。
$YSim(i,j)=cos(C_i,C_j)=\frac{C_i\cdot{C_j}}{\parallel{C_i}\parallel\times\parallel{C_j}\parallel}$
$U_{ij}$表示同时评价过项目i和项目j的用户。
$C_i=(Ex_i,En_i,He_i)$
$Ex_i=\frac{1}{|U_{ij}|}\sum_{u\in{U_{ij}}}{r_{ui}}$
$He_i=\sqrt{\frac{\pi}{2}}\times{\frac{1}{|U_{ij}|}}\sum_{u\in{U_{ij}}}{|r_{ui}-Ex_i|}$
$En_i=\sqrt{s^2-\frac{1}{3}He_i}$
$s^2=\frac{1}{|U_{ij}|-1}\sum_{u\in{U_{ij}}}{(r_{ui}-Ex_i)^2}$
随机游走需要执行T次,每次返回$r_t$,取它们的平均值作为最终的结果。
$\hat{r}_{u,i}=\bar{r}=\frac{1}{T}\sum_{t=1}^{T}{r_t}$
那么T取多少才算合适呢?我们定义所有随机游走得到的结果$r_t$的方差为:
$\sigma^2=\frac{1}{T}\sum_{t=1}^T{(r_t-\bar{r})^2}$
当方差稳定后,即$|\sigma_{i+1}^2-\sigma_i^2|\le{\varepsilon}$时算法终止,在实践中可以设定$\varepsilon=0.0001$
本文来自博客园,作者:高性能golang,转载请注明原文链接:https://www.cnblogs.com/zhangchaoyang/articles/4454519.html