上一篇提到兩種網絡模型,都有着這樣那樣的缺陷。下面我們繼續來改善建模。

3. Katz Centrality

Katz Centrality解決了之前的問題。它的原理與eigenvector centrality差不多,只是我們給每一個節點提供一個初始化的centrality值β,即對式(6)做簡單改變:

(7)

α 和 β 都是正常數。

使用矩陣表達式,我們得到:

(8)

(9)

我們只關心centrality值的相對性,也就是說不管你的centrality值是10還是100,我們只關注你的centrality值是不是大於我的centrality值,因為我們希望找到centrality值最大的前10個節點,目的是做排名。於是β可以設置為1,於是Katz Centrality表達為:

(10)

事實上α和β的比值體現了對鄰居節點centrality值的側重,如果α=0那麼所有的節點的centrality值都是β=1了,完全不受鄰居的影響了。所以說這個公式更具有普遍性,這就是數學之美。

需要注意的是α不可以太大,當   會導致 ,於是 無法收斂。所以有 .

要計算Katz centrality,就要做逆矩陣運算 ,直接計算的複雜度為O(n3)。我們可以用迭代法

(11)

4. PageRank

Katz centrality的一個缺陷就是,一個擁有高centrality值的節點會將它的高影響力傳遞給它的所有鄰居,這在實際生活中可能並不恰當。比如說Google的網頁有很高的centrality值,同時Google也鏈接了海量的頁面。如果Google的網頁鏈接到了我的網頁,那我的網頁作為一個無名小卒centrality值豈不是有可能比Google還高?我們希望Katz centrality能夠由節點的out-degree稀釋,或者說我的centrality值能平均分給我的鄰居,而不是給每個鄰居都得到我的整個centrality值。用數學語言表達為

(12)

對比公式(7)就很容易理解這裡對Katz centrality做的修改了。

對於沒有外鏈的節點(例如很多鏈接指向了一張圖片,但圖片是沒有out-degree指向別處的),將其 值設為1.我們將式(12)寫為矩陣形式:

(13)

其中D是對角矩陣, .同樣設β=1,上式可以變形為

(14)

這就是著名的PageRank算法。

同樣,α的取值也是有範圍的,它應該小於AD-1最大的特徵值的倒數。對於無向圖來說,這個值是1,對於有向圖來說就不一定了。Google的搜索引擎將α設為0.85。同樣,要執行這個算法,我們需要知道整個圖的拓撲結構。

Google 的兩位創始人 Sergey Brin 和 Lawrence Page 在斯坦福大學讀博士期間發表的關於 PageRank 的論文可以在 這裡 找到。