2015-02-05 91 views
1

我想了解python-igraph,特別是community_walktrap函數。我創建了下面的例子:爲什麼不是optimal_count給出正確的結果?

import numpy as np 
import igraph 

mat = np.zeros((200,200)) + 50 
mat[20:30,20:30] = 2 
mat[80:90,80:90] = 2 

g = igraph.Graph.Weighted_Adjacency(mat.tolist(), 
            mode=igraph.ADJ_DIRECTED) 
wl = g.community_walktrap(weights=g.es['weight']) 

我會承擔社區的最佳數量爲3,但運行

print wl.optimal_count 

給我1。如果我強迫樹狀圖在3 wl.as_clustering(3)被削減我收到了一份正確的會員名單。我在做什麼與optimal_count錯了?

回答

0

爲什麼你認爲最優聚類數應該是3?在我看來,除了連接較弱的兩個小組之外,所有節點之間都有很強的連接(它們的權重爲50)。請注意,igraph中的聚類方法期望權重表示相似度,而不是距離。還要注意,igraph中的大多數聚類算法對定向網絡來說都沒有很好的定義(有些甚至只是拒絕定向網絡)。

wl.optimal_count簡單計算所謂的模塊性度量(請參閱Graph類的modularity()方法),然後選擇模塊性最高的羣集計數。只有一個羣集的模塊性爲零(這是衡量如何按定義工作的)。有三個集羣模塊化約爲-0.0083,這樣的igraph是正確的選擇一個集羣,而不是隻有三個:

>>> wl.as_clustering(3).modularity 
-0.00829996846600007 
>>> wl.as_clustering(1).modularity 
0.0 
+0

呀,你是右我假定輸入矩陣是建立一個連接矩陣,其中高的數字指示很長的距離。將網格標準化爲mat = np.zeros((200,200))+ 1./50和mat [20:30,20:30] = 1;墊[80:90,80:90] = 1給我正確的答案。 – brorfred 2015-02-06 13:22:29

相關問題