news 2026/10/29 2:10:38

二部图-物质扩散模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二部图-物质扩散模型

物质扩散模型课件

沿用《热传导模型-课件》中的表 2-3 数据。

1. 模型思想

物质扩散模型把用户偏好看作一种可以在二部图上流动的“资源”或“能量”。

  • 每个项目节点把资源平均分给相邻用户;
  • 每个用户节点把收集到的资源再平均分给相邻项目;
  • 整个扩散过程满足资源守恒——资源既不会凭空产生,也不会凭空消失。

与热传导模型的区别:

特点物质扩散热传导
守恒性守恒不守恒(由恒温热源驱动)
归一化按“源节点”的度均分按“目标节点”的度取平均

2. 推荐流程

步骤 1:初始化资源

目标用户购买过的项目资源设为1,其余为0:

S(0)=Ru⋅S^{(0)} = R_{u\cdot}S(0)=Ru⋅​

步骤 2:项目 → 用户(式 2-20)

每个项目把资源均分给相邻用户:

bu=∑j∈usjk(Ij)b_u = \sum_{j\in u} \frac{s_j}{k(I_j)}bu​=j∈u∑​k(Ij​)sj​​

步骤 3:用户 → 项目(式 2-21)

每个用户把资源均分给相邻项目:

sj′=∑u∈jbuk(Uu)s'_j = \sum_{u\in j} \frac{b_u}{k(U_u)}sj′​=u∈j∑​k(Uu​)bu​​

合并后得到转移矩阵WP:

WPj,i=∑u∈j∩i1k(Ii)⋅k(Uu)WP_{j,i} = \sum_{u\in j\cap i} \frac{1}{k(I_i)\cdot k(U_u)}WPj,i​=u∈j∩i∑​k(Ii​)⋅k(Uu​)1​

矩阵形式为:

S′=WP⋅SS' = WP \cdot SS′=WP⋅S

稳态满足:

S∗=WP⋅S∗S^* = WP \cdot S^*S∗=WP⋅S∗


3. 案例数据

表 2-3:用户购买记录

用户购买项目用户度k(U)
Ab, d2
Ba, b, c3
Ca, b, d3
Da, e2

项目度:

  • k(I_a) = 3
  • k(I_b) = 3
  • k(I_c) = 1
  • k(I_d) = 2
  • k(I_e) = 1

目标用户:A,初始资源:

S(0)=(0,1,0,1,0)⊤S^{(0)} = (0, 1, 0, 1, 0)^\topS(0)=(0,1,0,1,0)⊤


4. 手动演算

4.1 构造转移矩阵WP

WPj,i=∑u∈j∩i1k(Ii)⋅k(Uu)WP_{j,i} = \sum_{u\in j\cap i} \frac{1}{k(I_i)\cdot k(U_u)}WPj,i​=u∈j∩i∑​k(Ii​)⋅k(Uu​)1​

例如,从项目b扩散到项目a:

  • 共同购买用户为 B、C
  • k(I_b)=3(源项目 b 的度)
  • k(U_B)=3,k(U_C)=3

WPa,b=13×3+13×3=29WP_{a,b} = \frac{1}{3\times 3} + \frac{1}{3\times 3} = \frac{2}{9}WPa,b​=3×31​+3×31​=92​

完整矩阵:

WP=(7/182/91/31/61/22/97/181/35/1201/91/91/3001/95/1805/1201/60001/2) WP = \begin{pmatrix} 7/18 & 2/9 & 1/3 & 1/6 & 1/2 \\ 2/9 & 7/18 & 1/3 & 5/12 & 0 \\ 1/9 & 1/9 & 1/3 & 0 & 0 \\ 1/9 & 5/18 & 0 & 5/12 & 0 \\ 1/6 & 0 & 0 & 0 & 1/2 \end{pmatrix}WP=​7/182/91/91/91/6​2/97/181/95/180​1/31/31/300​1/65/1205/120​1/20001/2​​

每列和为 1,说明物质扩散是列随机的,满足资源守恒。

4.2 第一轮扩散

初始资源S⁽⁰⁾ = (0, 1, 0, 1, 0)ᵀ,只取WP的第 2 列(b)和第 4 列(d)相加:

项目计算资源
aWP_{a,b}×1 + WP_{a,d}×1 = 2/9 + 1/67/18 ≈ 0.39
bWP_{b,b}×1 + WP_{b,d}×1 = 7/18 + 5/1229/36 ≈ 0.81
cWP_{c,b}×1 + WP_{c,d}×1 = 1/9 + 01/9 ≈ 0.11
dWP_{d,b}×1 + WP_{d,d}×1 = 5/18 + 5/1225/36 ≈ 0.69
eWP_{e,b}×1 + WP_{e,d}×1 = 0 + 00

第一轮结果:

S(1)=(718, 2936, 19, 2536, 0)⊤S^{(1)} = \left(\frac{7}{18},\ \frac{29}{36},\ \frac19,\ \frac{25}{36},\ 0\right)^\topS(1)=(187​,3629​,91​,3625​,0)⊤

4.3 多轮迭代结果

轮次abcde
初始0.001.000.001.000.00
第1轮0.390.810.110.690.00
第2轮0.480.730.170.560.06
第3轮0.530.680.190.490.11
第4轮0.560.650.200.450.14
第5轮0.570.630.200.430.17

4.4 生成推荐

去掉 A 已购买的b和d:

候选项目资源
a0.57
c0.20
e0.17
  • Top-1 推荐:项目 a
  • Top-2 推荐:项目 a 和 c

5. 与热传导模型的对比

在完全相同的数据和初始条件下:

模型Top-1Top-2
物质扩散aa, c
热传导cc, a
  • 物质扩散倾向于把资源保留在高度项目附近(a 的度最高),推荐结果更“热门”;
  • 热传导倾向于提升低度项目的温度(c 的度为 1),推荐结果更“长尾”。

6. Python 实现

importnumpyasnp# 用户-项目反馈矩阵R=np.array([[0,1,0,1,0],# A: b, d[1,1,1,0,0],# B: a, b, c[1,1,0,1,0],# C: a, b, d[1,0,0,0,1],# D: a, e],dtype=float)user_deg=R.sum(axis=1)item_deg=R.sum(axis=0)# 物质扩散转移矩阵 WP# WP_{j,i} = sum_u r_{u,j}*r_{u,i} / (k(I_i)*k(U_u))n_items=R.shape[1]WP=np.zeros((n_items,n_items))forjinrange(n_items):foriinrange(n_items):foruinrange(R.shape[0]):ifR[u,j]andR[u,i]:WP[j,i]+=1.0/(item_deg[i]*user_deg[u])print("WP 转移矩阵:")print(np.round(WP,4))print("每列和(应为 1):",np.round(WP.sum(axis=0),4))# 初始资源:A 购买过 b, ds=np.array([0.,1.,0.,1.,0.])print("\n迭代过程:")foriinrange(6):print(f"第{i}轮:{np.round(s,4)}")s=WP @ s# 推荐items=['a','b','c','d','e']purchased={1,3}# b, dcandidates=[(items[j],score)forj,scoreinenumerate(s)ifjnotinpurchased]candidates.sort(key=lambdax:x[1],reverse=True)print("\n候选项目排序(去掉 A 已购买的 b, d):")foritem,scoreincandidates:print(f"{item}:{score:.4f}")

运行结果

WP 转移矩阵: [[0.3889 0.2222 0.3333 0.1667 0.5 ] [0.2222 0.3889 0.3333 0.4167 0. ] [0.1111 0.1111 0.3333 0. 0. ] [0.1111 0.2778 0. 0.4167 0. ] [0.1667 0. 0. 0. 0.5 ]] 每列和(应为 1): [1. 1. 1. 1. 1.] 迭代过程: 第0轮: [0. 1. 0. 1. 0.] 第1轮: [0.3889 0.8056 0.1111 0.6944 0. ] 第2轮: [0.4815 0.7315 0.1667 0.5556 0.0556] 第3轮: [0.5267 0.679 0.1893 0.4861 0.1111] 第4轮: [0.556 0.6481 0.1999 0.4491 0.1389] 第5轮: [0.5719 0.6276 0.2013 0.4282 0.1667] 候选项目排序(去掉 A 已购买的 b, d): a: 0.5719 c: 0.2013 e: 0.1667

7. 小结

  • 物质扩散模型把用户偏好看作守恒的资源流。
  • 核心公式:S' = WP · S,转移矩阵按“源项目”的度归一化。
  • 推荐结果倾向于热门项目,计算简单、物理意义清晰。
  • 与热传导模型互补:一个偏热门,一个偏长尾。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/29 2:10:22

hot100 哈希题目复盘

分别是1. 两数之和,49. 字母异位词分组,128. 最长连续序列这三道题。 两数之和这道题,说起来就像是四级词汇书里的第一个词——abandon。每次刷 Hot100,都是从它开始,翻来覆去,熟得不能再熟。 最直接的解…

作者头像 李华
网站建设 2026/10/29 2:10:06

无刷电机驱动原理:从方波换向到 FOC 磁场定向控制

目录 一、从"换向"到"磁场定向" 二、无刷电机的驱动原理 结构与换向 为什么要知道转子位置 方波换向(六步换向) 三、电调的工作方式 电调(ESC)组成 输入信号类型 DShot 优势 四、FOC 磁场定向控制 核心思想 控制流程 优势 直觉类比 五、电机控制的关键…

作者头像 李华
网站建设 2026/10/29 2:10:04

OSPF外部路由引入

在R1上有一条静态的路由,192.168.1.0/24,但是R3,R3,R4,R5都还没有。如何让AS内部也有去往网络网络的信息呢?在R1上做路由引入在OSPF的进程下,去引入路由表中的静态路由。这个时候,这条外部路由,就会以类型5…

作者头像 李华
网站建设 2026/10/29 2:09:42

SpringBoot信创项目怎么验收?从数据库迁移到交付证据

SpringBoot信创项目怎么验收?从数据库迁移到交付证据 信创项目交付时,最容易出现的分歧,是双方说的“支持”不是一回事。开发团队已经导入数据库、启动应用;采购方以为所有模块、目标服务器和办公终端都已验证。 解决这个问题&…

作者头像 李华