为什么不是optimal_count给出正确的结果?
问题描述:
我想了解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错了?
答
为什么你认为最优聚类数应该是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
呀,你是右我假定输入矩阵是建立一个连接矩阵,其中高的数字指示很长的距离。将网格标准化为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