社团检测之LeaderRank算法

本文主要介绍社团检测中节点排序LeaderRank算法。

基本思想

LeaderRank L e a d e r R a n k 算法通过在网络中增加一个节点 g(Groundnode) g ( G r o u n d n o d e ) ,将其与网络中的所有节点相连接从而得到一个强连接的 N+1 N + 1 个节点的新网络。算法首先给节点 g g 之外的N个节点分配1单位的 LR L R 值,将这1单位的 LR L R 值分配给其直接相连的邻居节点,这一过程根据下面公式不断进行迭代,直到达到稳定状态:

si(t+1)=j=0Naijkjsj(t) s i ( t + 1 ) = ∑ j = 0 N a i j k j s j ( t )

其中,节点i与j直接相连则 aij=1 a i j = 1 ,否则为0; kj k j 代表节点j的度数。 aijkj a i j k j 代表节点 i i 随机游走到j的概率。初始状态下除 g g 外的所有节点的si(0)=1,而 sg(0)=0 s g ( 0 ) = 0 。最后将节点 g g LR值平均分给其它 N N 个节点:
Si=si(tc)+sg(tc)N1

其中, sg(tc) s g ( t c ) 是稳定状态下节点 g g LR值, tc t c 表示收敛次数。

参考论文 : Leaders in Social Networks, the Delicious Case

Python代码实现

# -*- coding: UTF-8 -*-

"""
Created on 18-3-5

@summary: LeaderRank 节点排序算法

@author: dreamhomes
"""
import get_graph


def leaderrank(graph):
    """
    节点排序
    :param graph:复杂网络图Graph
    :return: 返回节点排序值
    """
    # 节点个数
    num_nodes = graph.number_of_nodes()
    # 节点
    nodes = graph.nodes()
    # 在网络中增加节点g并且与所有节点进行连接
    graph.add_node(0)
    for node in nodes:
        graph.add_edge(0, node)
    # LR值初始化
    LR = dict.fromkeys(nodes, 1.0)
    LR[0] = 0.0
    # 迭代从而满足停止条件
    while True:
        tempLR = {}
        for node1 in graph.nodes():
            s = 0.0
            for node2 in graph.nodes():
                if node2 in graph.neighbors(node1):
                    s += 1.0 / graph.degree([node2])[node2] * LR[node2]
            tempLR[node1] = s
        # 终止条件:LR值不在变化
        error = 0.0
        for n in tempLR.keys():
            error += abs(tempLR[n] - LR[n])
        if error == 0.0:
            break
        LR = tempLR
    # 节点g的LR值平均分给其它的N个节点并且删除节点
    avg = LR[0] / num_nodes
    LR.pop(0)
    for k in LR.keys():
        LR[k] += avg

    return LR


if __name__ == "__main__":
    path = "/home/dreamhome/network-datasets/karate/karate.paj"
    graph = get_graph.read_graph_from_file(path)
    print sorted(leaderrank(graph).items(), key=lambda item: item[1])
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值