图机器学习——1.2 传统方法:基于边
2021/11/7 23:18:43
本文主要是介绍图机器学习——1.2 传统方法:基于边,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
基于边
基于边的方法主要目的是预测节点与节点之间的边是否有连接。最简单的做法是对每个节点对进行评分,评分越高则越可能有边相连接(如距离的相反数)。而具体基于边的特征则包括:基于距离的特征(Distance based features);局部相邻重叠(Local neighborhood overlap);全局相邻重叠(Global neighborhood overlap)。
a. 基于距离的特征
此方法直接使用两个节点之间的最短路径长度,如下图所示,点与点之间的距离直接用途径边的条数进行表示。
这种方法简单粗暴,但没有考虑到两个节点之间的共同相邻节点情况,如 B-H 的共同相邻结点有 C 和 D;B-E 只有一个共同相邻节点,通过此方法看不出差距。
b. 邻居局部重合度
针对前面基于距离特征方法的缺陷,这里考虑了两个节点之间共同的相邻结点个数。
以上图为例,这里分别介绍三个邻居局部重合度指标:
- Common neighbors(公共邻居):
∣ N ( v 1 ) ∩ N ( v 2 ) ∣ \left|N\left(v_{1}\right) \cap N\left(v_{2}\right)\right| ∣N(v1)∩N(v2)∣
例子: ∣ N ( A ) ∩ N ( B ) ∣ = ∣ { C } ∣ = 1 |N(A) \cap N(B)|=|\{C\}|=1 ∣N(A)∩N(B)∣=∣{C}∣=1。
- Jaccard’s coefficient(公共邻居 / 所有邻居):
∣ N ( v 1 ) ∩ N ( v 2 ) ∣ ∣ N ( v 1 ) ∪ N ( v 2 ) ∣ \frac{\left|N\left(v_{1}\right) \cap N\left(v_{2}\right)\right|}{\left|N\left(v_{1}\right) \cup N\left(v_{2}\right)\right|} ∣N(v1)∪N(v2)∣∣N(v1)∩N(v2)∣
例子: ∣ N ( A ) ∩ N ( B ) ∣ ∣ N ( A ) ∪ N ( B ) ∣ = ∣ { C ∣ ∣ ∣ { C , D } ∣ = 1 2 \frac{|N(A) \cap N(B)|}{|N(A) \cup N(B)|}=\frac{\mid\{C||}{|\{C, D\}|}=\frac{1}{2} ∣N(A)∪N(B)∣∣N(A)∩N(B)∣=∣{C,D}∣∣{C∣∣=21。
- Adamic Adar index:
∑ u ∈ N ( v 1 ) ∩ N ( v 2 ) 1 log ( k u ) \sum_{u \in N\left(v_{1}\right) \cap N\left(v_{2}\right)} \frac{1}{\log \left(k_{u}\right)} u∈N(v1)∩N(v2)∑log(ku)1
例子: 1 log ( k C ) = 1 log 4 \frac{1}{\log \left(k_{C}\right)}=\frac{1}{\log 4} log(kC)1=log41( k C k_{C} kC为C点的度)。该值将公共节点的度取log再取倒数,这个值越大,说明公共节点的度越小,也即对这两个节点中越重要。因为这些low-degree的节点能够比high-degree的节点提供更多信息,这点在文本分类中思想也有体现,譬如经典的TF-IDF,给予频率较少的词更大权重以区分不同词的重要性。
这种方法野还是有一个问题:当两个节点之间没有共同的相邻结点时,对应的指标值为0。如示例图中的节点A与E之间就没有共同的邻居。全局重合度很好的解决了上述问题。
c. 全局重合度
全局重合度使用了全局图结构对两个节点进行评分。这里考虑Katz index。
Katz index:计算遍历两个节点所有路径的总距离,这里的路可以是任意长度,且不需要是最短的路。那么要如何计算两个节点所有路径的总距离呢?这里使用邻接矩阵的幂进行计算。
令 P u v ( K ) P_{uv}^{(K)} Puv(K)为: u , v u, v u,v之间,长度为 K K K的所有路径之和,假设邻接矩阵为 A k A^k Ak,则很容易证明 P u v ( K ) = A K P_{uv}^{(K)}=A^K Puv(K)=AK。其实从定义可以很容易看出,矩阵乘法正好是把中继节点全部遍历求和:
因此可以得到,Katz index的计算公式(这里我们为每条路径上赋予一个权重
β
\beta
β,其为标量):
S
Katz
[
u
,
v
]
=
∑
i
=
1
∞
β
i
A
i
[
u
,
v
]
S_{\text {Katz }}[u, v]=\sum_{i=1}^{\infty} \beta^{i} A^{i}[u, v]
SKatz [u,v]=i=1∑∞βiAi[u,v]
其中
β
\beta
β 则是我们设定的描述长短路不同的权重,譬如我们希望长路的权重低一些,则设置
β
<
1
\beta<1
β<1 。
下面进行求解,这里需要假设
A
A
A最大的特征值
λ
1
<
1
\lambda_{1}<1
λ1<1 以及
(
I
−
A
)
(I-A)
(I−A) 非奇异,其中
I
I
I 是单位矩阵,求解方法很简单,设
s
n
=
∑
i
=
0
n
A
i
s_{n}=\sum_{i=0}^{n} A^{i}
sn=∑i=0nAi,则
A
s
n
=
A
∑
i
=
0
n
A
i
=
∑
i
=
1
n
+
1
A
i
A s_{n}=A \sum_{i=0}^{n} A^{i}=\sum_{i=1}^{n+1} A_{i}
Asn=Ai=0∑nAi=i=1∑n+1Ai
进而设
s
n
−
A
s
n
=
∑
i
=
0
n
A
i
−
∑
i
=
1
n
+
1
A
i
s
n
(
I
−
A
)
=
I
−
A
n
+
1
s
n
=
(
I
−
A
n
+
1
)
(
I
−
A
)
−
1
\begin{aligned} &s_{n}-A s_{n}=\sum_{i=0}^{n} A^{i}-\sum_{i=1}^{n+1} A^{i} \\ &s_{n}(I-A)=I-A^{n+1} \\ &s_{n}=\left(I-A^{n+1}\right)(I-A)^{-1} \end{aligned}
sn−Asn=i=0∑nAi−i=1∑n+1Aisn(I−A)=I−An+1sn=(I−An+1)(I−A)−1
因为
λ
1
<
1
\lambda_{1}<1
λ1<1, 从而
lim
n
→
∞
A
n
=
0
\lim _{n \rightarrow \infty} A^{n}=0
limn→∞An=0 以及
lim
n
→
∞
s
n
=
lim
n
→
∞
(
I
−
A
n
+
1
)
(
I
−
A
)
−
1
=
I
(
I
−
A
)
−
1
=
(
I
−
A
)
−
1
\lim_{n \rightarrow \infty} s_{n}=\lim_{n \rightarrow \infty}\left(I-A^{n+1}\right)(I-A)^{-1}=I(I-A)^{-1}=(I-A)^{-1}
n→∞limsn=n→∞lim(I−An+1)(I−A)−1=I(I−A)−1=(I−A)−1
所以Katze index最后在求解的时候其实求的是
S
K
a
t
z
=
(
I
−
β
A
)
−
1
−
I
S_{K a t z}=(I-\beta A)^{-1}-I
SKatz=(I−βA)−1−I
这篇关于图机器学习——1.2 传统方法:基于边的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-28机器学习资料入门指南
- 2024-10-25机器学习开发的几大威胁及解决之道
- 2024-10-24以下是五个必备的MLOps (机器学习运维)工具,帮助提升你的生产效率 ??
- 2024-10-15如何选择最佳的机器学习部署策略:云 vs. 边缘
- 2024-10-12从软件工程师转行成为机器学习工程师
- 2024-09-262024年机器学习路线图:精通之路步步为营指南
- 2024-09-13机器学习教程:初学者指南
- 2024-08-07从入门到精通:全面解析机器学习基础与实践
- 2024-01-24手把手教你使用MDK仿真调试
- 2024-01-10基于“小数据”的机器学习