python 簡單實現 pagerank



def pagerank(node2nodes_out, node2nodes_in, alpha=0.85, min_delta=0.00001):
    pr = {node: 1/len(node2nodes_out) for node in node2nodes_out} # 初始化
    print(pr)
    for i in range(100):
        change = 0
        for node in node2nodes_in:
            nodes_in = node2nodes_in[node]
            rank = 0
            for node_in in nodes_in:
                rank += pr[node_in] / len(node2nodes_out[node_in])
            rank = rank * alpha
            rank += (1 - alpha) / len(node2nodes_out)
            change += abs(pr[node] - rank)
            pr[node] = rank

        if change < min_delta:
            print(i, pr)

if __name__ == '__main__':
    node2nodes_out = {
        'A': ['B', 'C'],
        'B': ['C'],
        'C': ['A'],
    }
   
    node2nodes_in = {
         'A': ['C'],
         'B': ['A'],
         'C': ['A', 'B']
    }

    alpha = 0.85
    ## 根據實際需求,實要求得以出度多的爲關鍵的網絡,將out和in交換位置就可以了。
    pagerank(node2nodes_out, node2nodes_in, alpha)

pagerank核心就是爲了找到網絡中被以來最多的那個人,越受依賴就越重要。

其中node2nodes_out 中,key爲當前點,value爲當前點出鏈指向的點。node2nodes_in表示的是入鏈的點。

pagerank的算法很簡單,不過其原理和有效性,有極限性還是比較複雜的,感興趣的小夥伴可以查閱以下資料。

引用

1. pagerank的博客解說:https://www.cnblogs.com/rubinorth/p/5799848.html

2. pagerank論文:http://ilpubs.stanford.edu:8090/422/1/1999-66.pdf

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章