跨网络指的是两个不同的网络,在研究不同网络用户对齐的时候,需要进行社区相似行的判断,中间也查了一些资料,想到一个解决方法用种子节点。
下面是我写的一个小demo
先把种子节点和要两个网络的社区划分好
net1_anchor_known_list = ['abc', 'bc', 'cc',2, 3,7]#net1种子节点
net2_anchor_known_list = ['abc', 'bc', 'cc',2, 3,7]#net2种子节点
net1_communities = [['abc','tom','jack' 'bc','cc','d'],[2, 4, 7],[3,5]]
net2_communities = [['a','bc','cc','tom',5,7],[2,3,'jack']]
然后将有共同种子节点的社区一一对应起来,以便于接下来求解相似性。
seed_pair = {}
for i in range(len(net1_communities)):
for j in net1_communities[i]:
if j in net1_anchor_known_list:
for k in range(len(net2_communities)):
if j in net2_communities[k]:
seed_pair[str(i+1)+str(k+1)+'社区'] = (net1_communities[i],net2_communities[k])
seed_pair
{'11社区': (['abc', 'tom', 'jackbc', 'cc', 'd'], ['a', 'bc', 'cc', 'tom', 5, 7]),
'21社区': ([2, 4, 7], ['a', 'bc', 'cc', 'tom', 5, 7]),
'22社区': ([2, 4, 7], [2, 3, 'jack']),
'32社区': ([3, 5], [2, 3, 'jack'])}
再用种子节点对一一对应后,得到相对应的社区,最后就可以利用种子节点共同个数来求解相似性了
for i in seed_pair.items():
num_counter = 0
for j in f_anchor_known_list:
if j in i[1][0] and j in i[1][1]:
num_counter += 1
sim = 2*num_counter/(len(i[1][0])+len(i[1][1]))
print('第{}的相似度为{:.3f}'.format(i[0],sim))
第11社区的相似度为0.182
第22社区的相似度为0.333
第21社区的相似度为0.222
第32社区的相似度为0.400
最后就可以求解出,跨网络的社区相似性了。