跨网络社区相似性

跨网络指的是两个不同的网络,在研究不同网络用户对齐的时候,需要进行社区相似行的判断,中间也查了一些资料,想到一个解决方法用种子节点。
下面是我写的一个小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

最后就可以求解出,跨网络的社区相似性了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值