对应课程
2. 基于邻域的协同过滤
2.1 协同过滤基本思想
算法分类
- Top-N推荐 <=> 评分预测
- 基于邻域 <=> 基于模型
步骤
- 收集数据
- 寻找邻域/训练模型
- 计算推荐结果
2.2 基于用户的协同过滤
用户相似度
- \(N(u)\)为用户\(u\)有过正回馈的项目集合
- \(N(v)\)为用户\(v\)有过正回馈的项目集合
- \(u\)和\(v\)的兴趣相似度
- Jaccard相似度:\(\omega_{uv}=\frac{|N(u)\cap N(v)|}{|N(u)\cup N(v)|}\)
- 余弦相似度:\(\omega_{uv}=\frac{|N(u)\cap N(v)|}{\sqrt{|N(u)||N(v)|}}\)
- 例:\(\omega_{AB}=\frac{|\{b,d\}\cap \{a,b,c\}|}{|\{b,d\}\cup \{a,b,c\}|}=\frac{1}{4}\)
兴趣度预测
- 计算用户\(u\)对邻域用户购买过的项目\(i\)的感兴趣程度\(p(u,i)\)
- 输入:
- \(S(u,K)\):和用户\(u\)最相似的\(K\)个用户(\(K\)-近邻)
- \(\omega_{uv}\):用户\(u\)和用户\(v\)的兴趣相似度
- \(r_{vi}\):观测到的用户\(v\)对项目\(i\)的兴趣度(有正反馈为1,否则为0)
- 兴趣度:邻域用户的兴趣度的加权求和
- \(p(u,i)=\displaystyle\sum_{v\in S(u,K)}\omega_{uv}*r_{vi}\)
- 例:
- 邻域:\(S(A,2)=\{C,B\}\)
- 候选项目集(邻域用户购买过的):\(\{a,c\}\)
- 计算用户感兴趣程度:\(p(A,a)=\frac{1}{4}+\frac{2}{3}=\frac{11}{12}\)
- 推荐排序:\(p(A,a)>p(A,c)>p(A,e)\)
基于User-CF的推荐系统
- 离线预处理
- 在线推荐:针对当前活跃用户计算推荐列表
- 确定候选项目集:\(C(u)=\{i|i\notin N(u)\And i\in N(v)\And v\in S(u,K)\}\)
- 预测兴趣度并生成推荐列表:\(p(u,i)=\sum_{v\in S(u,K)\cap N(i)}\omega_{uv}*r_{vi}\)
用户相似度改进:IUF
- 逆用户频率(Inverse User Frequency)
- 计算:
- 惩罚系数:\(f_i=\log\frac{n}{n_i}\)
- \(n\):总用户数
- \(n_i\):对项目\(i\)有过正反馈的用户数
- \(\omega_{uv}=\frac{\sum_{i\in N(u)\cap N(v)}\log\frac{n}{n_i}}{|N(u)\cup N(v)|}\)
User-CF的缺点
- 很难形成有意义的邻域集合
- 用户两两之间共同反馈少
- 仅有的共同反馈项目往往是热门项目
- 随用户行为数据增加,相似度变化可能很快
2.3 基于项目的协同过滤
项目相似度
- \(N(i)\)为点击(或购买)过项目\(i\)的用户集
- \(i\)和\(j\)的兴趣相似度
- Jaccard相似度/余弦相似度(类似User-CF)
- 条件概率相似度:\(\omega_{ij}=P(j|i)=\frac{|N(i)\cap N(j)|}{|N(i)|}\)
- 计算:
- 构建用户-项目倒排表:购买某项目的用户列表
- 得到项目相似度矩阵、项目邻域表
兴趣度预测
- 计算用户\(u\)对候选项目\(i\)的感兴趣程度\(p(u,i)\)
- 输入:
- \(S(j,K)\):和项目\(j\)最相似的\(K\)个项目
- \(N(u)\):用户\(u\)有过正反馈的项目集合
- \(r_{uj}\):观测到的用户\(u\)对项目\(j\)的兴趣度
- 兴趣度:已反馈的项目的兴趣度的加权求和
- \(p(u,i)=\displaystyle\sum_{j\in N(u)}I(i\in S(j,K))*\omega_{ij}*r_{uj}\)
基于Item-CF的推荐系统
- 离线预处理
- 在线推荐
- 确定候选项目集:\(C(u)=\{i|i\notin N(u)\And i\in S(j,K)\And j\in N(u)\}\)
- 预测兴趣度并生成推荐列表:\(p(u,i)=\sum_{j\in N(u)}I(i\in S(j,K))*\omega_{ij}*r_{uj}\)
改进
- 惩罚活跃用户(Jaccard相似度)
- 基本思想:越活跃的用户对项目相似度贡献越小
- 惩罚系数:\(f_u=\log\frac{m}{m_u}\)
- \(m\):总项目数
- \(m_u\):用户u有过正反馈的项目数
- 修正Jaccard相似度:\(\omega_{ij}=\frac{\sum_{u\in N(i)\cap N(j)}\log\frac{m}{m_u}}{|N(i)\cup N(j)|}\)
- 惩罚热门项目(条件概率相似度)
- 修正后的条件概率相似度:\(\omega_{ij}=P(j|i)=\frac{|N(i)\cap N(j)|}{|N(i)||N(j)|^\alpha}\)
2.4 基于邻域的评分预测
评分预测
- 输入:用户显式评分
- 输出:用户\(u\)对项目\(i\)的期望评分\(\hat{r}_{ui}\)
- 步骤
- 收集数据
- 寻找邻域
- 计算推荐结果
- User-CF:\(\hat{r}_{ui}=\frac{\sum_{v\in N_i(u)}\omega_{uv}r_{vi}}{\sum_{v\in N_i(u)}|\omega_{uv}|}\)
- \(N_i(u)\):对物品i有过评分的与用户u相似的用户v的集合
- 例(K=2):\(\hat{r}_{Ad}=\frac{3*0.839+2*0.827}{0.839+0.827}\approx2.50\)
- Item-CF:\(\hat{r}_{ui}=\frac{\sum_{j\in N_u(i)}\omega_{ij}r_{uj}}{\sum_{v\in N_u(i)}|\omega_{ij}|}\)
余弦相似度(用户)
- \(\omega_{uv}=\frac{\sum_{i\in J_{uv}r_{ui}r_{vi}}}{\sqrt{\sum_{i\in J_u}r_{ui}^2\sum_{j\in J_v}r_{vj}^2}}\)
- \(J_u\):用户\(u\)有过评分的项目集合
- \(r_{ui}\):用户\(u\)对项目\(i\)的评分
- 隐含假设:用户\(u\)对未知评分项目的评分为0
- 例:\(\omega_{AB}=\frac{5*3+3*1+3*1}{\sqrt{(5^2+3^2+3^2)*(3^2+1^2+1^2+2^2)}}\approx0.827\)
- 缺点:未考虑到用户评分的相对高低,相似度与预测评分不合理
Pearson相似度(用户)
- \(\omega_{uv}=\frac{\sum_{i\in J_{uv}}(r_{ui}-\bar{r}_u)(r_{vi}-\bar{r}_v)}{\sqrt{\sum_{i\in J_{uv}}(r_{ui}-\bar{r}_u)^2\sum_{i\in J_{uv}}(r_{vi}-\bar{r}_v)^2}}\)
- \(J_{uv}\):用户\(u\)和\(v\)都有过评分的项目集合
- \(\bar{r}_u\):用户\(u\)的评分平均值
- 将用户评分看作随机变量
预测修正
- User-CF:\(\hat{r}_{ui}=\bar{r}_u+\frac{\sum_{v\in N_i(u)}\omega_{uv}(r_{vi}-\bar{r}_v)}{\sum_{v\in N_i(u)}|\omega_{uv}|}\)
- 目标用户自身评分平均值+相对预测结果
- 例:\(\hat{r}_{Ad}=\bar{r}_A+\frac{\sum_{v\in N_d(A)}\omega_{Av}(r_{vd}-\bar{r}_v)}{\sum_{v\in N_d(A)}|\omega_{Av}|}=3.667+\frac{0.996*(2-1.75)}{0.996}\approx3.917\)
- Item-CF:\(\hat{r}_{ui}=\bar{r}_i+\frac{\sum_{j\in N_u(i)}\omega_{ij}(r_{uj}-\bar{r}_j)}{\sum_{v\in N_u(i)}|\omega_{ij}|}\)
2.5 基于二部图的CF
传统邻域方法的缺点
- 范围限制:只考虑和用户有过共同评价(或购买)项目的相邻用户
- 计算空间复杂度较大:需要在内存中保存整个用户-项目反馈(评分)集合(矩阵)
- 数据稀疏/冷启动:用户一般只会评价(或购买)少量项目
基于二部图的协同过滤
- 隐式反馈行为数据集:\((u,i)\)二元组集合
- 表示成(二部)图形式
- 不相交的两个顶点子集:\(U\)和\(I\)(用户集和项目集)
- 每条边\((u,i)\)关联的两个顶点\(u\)和\(i\)属于两个不同的顶点子集(\(u\in U\), \(i\in I\))
- 推荐类型:Top-N推荐
激活扩散
- 假设:
- 用户反馈过的项目都具有用户偏好的某种属性
- 用户偏好可以在图中的节点间传递
- 基本思想:根据用户偏好的传递性来挖掘用户潜在偏好信息
- 标准的协同过滤:路径长度=3,\(U_A\)-\(I_b\)-\(U_B\)-\(I_c\)
- 扩展路径长度
- 步骤(给定目标用户):
- 图扩散:
- 目标用户节点出发,沿边扩散
- 直到给定的最大扩散步长
- 确定候选项目集:
- 到达过的所有项目\(-\)目标用户有过正反馈的项目
- 项目排序:
- 依据(1.相同看2.)
- 首次到达步数(升序)
- 到达次数(降序)
- 系统
- 数据表示:矩阵\(R\)
- 图扩散:\(S^{(2k+1)}=R*(R^T*R)^k\)
- 确定候选项目集:该行非0,且未反馈过
- 项目排序:根据矩阵乘法结果(到达次数)降序
物质扩散(Mass Diffusion)
- 假设:
- 扩散过程中每条边的影响不完全相同
- 可避免活跃用户/热门项目偏置的问题
- 基本思想:
- 将用户的偏好属性表示为节点所拥有的资源
- 每个节点平均地将资源分享给相邻节点,满足守恒律
- 步骤(给定目标用户):
- 资源初始化分配:目标用户有过正反馈的项目节点分配一个资源
- 资源扩散:根据邻接关系平均分配迭代传递资源
- \(b_u=\displaystyle\sum_{j=1}^n r_{uj}\frac{s_j}{k(I_j)}\)
- \(S=(s_1,s_2,......,s_n)\):项目节点资源分配
- \(k(I_j)\):项目节点\(j\)的出度
- \(b_u\):用户节点\(u\)获得的资源
- 生成推荐列表:候选项目按资源拥有量降序
- 系统
- 数据表示:矩阵\(R\)
- \(r_{ui}\begin{cases}1&\text{用户u对项目i有过正反馈}\\0&\text{其他}\\\end{cases}\)
- 图扩散:\(S^{(k)}=S^{(0)}*(W)^k\)
- 转移矩阵\(W\)的计算
- \(w_{lj}\):一轮迭代(“项目-用户-项目”)从项目节点\(l\)上资源转移到项目\(j\)上的比例
- \(w_{lj}=\frac{1}{k(I_l)}\sum_{u=1}^m\frac{r_{ul}r_{uj}}{k(U_u)}\)
- “项目-用户”扩散:每个项目节点平均分配资源给相邻用户节点
- \(b_u=\sum_{j=1}^n r_{uj}\frac{s_{uj}}{k(I_j)}\)
- “用户-项目”扩散
- \(s_{uj}^\prime=\sum_{u=1}^m r_{uj}\frac{b_u}{k(U_u)}=\sum_{l=1}^n s_{ul}w_{lj}\)
- 排序:根据资源分配矩阵\(S^{(k)}\)该行降序
其他图扩散方法
- 热扩散(Heat Spreading)
- 假设:
- 有恒温热源驱动,不满足守恒律
- 平均影响:每个节点的热量是其所有相邻节点的平均值
- 带重启的随机游走
- 每次迭代以一定概率\(\alpha\)向前随机游走(扩散\(W\)),以概率\((1-\alpha)\)回到初始状态
- \(S^{(k+1)}=(1-\alpha)S^{(0)}+\alpha S^{(k)}W\)
posted @
2023-06-26 17:08
hibana049
阅读(
49)
评论()
收藏
举报