假设我有以下未加权的无向图,其中边可以通过两种不同类型的边连接:支撑边(绿色)和相对边(红色)。
以下是一个例子:
我想计算任何给定两个节点之间的对立或支持的“距离”。例如,如果节点代表战争国家或政治候选人,即使A和D之间没有边缘,我们可能会得出结论,他们可能会相互反对,因为A反对C而C支持D。
这是一个简单的例子,但是给定一个包含许多高度节点的大图,如果不能通过连续的反对链直接连接,我怎样才能确定任何两个节点相互对立或相互支持的可能性有多大? /支持边缘?
我想你会将每个节点表示为一个向量,其中的组件是否存在类型边缘存在于任何其他节点之间。如果这是一个很好的方法,你会使用什么距离测量(欧几里德,汉明等?)
答案 0 :(得分:0)
这个问题看起来好像需要数值优化。这是一种方法:
为每个节点引入一个随机变量。该变量将在[-1,1]范围内,其中-1表示明显反对,+1表示明确支持。中间的值给出了两者的概率。将您感兴趣的节点的变量修复为1(因此,它不会成为优化的一部分)。
现在,在边缘上定义一个潜在的函数。我建议绝对差异:
v1, v2 are the incident nodes' values
for supporting edges:
P(v1, v2) = abs(v1 - v2)
for opposing edges:
P(v1, v2) = abs(v1 + v2)
根据您的优化方法,您可能需要一个可微分的潜在功能。例如,您可以通过以下方式使这些功能可以区分:
for supporting edges:
P(v1, v2) = sqrt((v1 - v2)^2 + epsilon)
for opposing edges:
P(v1, v2) = sqrt((v1 + v2)^2 + epsilon)
其中epsilon
是一个相当小的数字。
所有潜力的总和是能量:
E = Sum P_i
然后,您需要找到与arg min E
相关的v
。有几个优化器。试试,哪一个表现最好(例如梯度下降,模拟退火,L-BFGS ......)。如果你坚持凸起的潜力(如绝对差异),简单的梯度下降可能就足够了。
这为每个其他节点提供了支持值。如果边缘不相互矛盾,则所有值都将为+1或-1。如果你有矛盾的边缘,其他值也是可能的。
您的示例将产生这些支持值(相对于A):
B: -0.333 (probably opposing)
C: 0.333 (probably supporting)
D: 0.333 (probably supporting)
答案 1 :(得分:0)