python - 为什么optimal_count没有给出正确的结果?

标签 python cluster-analysis igraph

我正在尝试理解 python-igraph,特别是community_walktrap 函数。我创建了以下示例:

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 中的大多数聚类算法对于有向网络都没有明确定义(其中一些甚至简单地拒绝有向网络)。

就其值(value)而言,wl.optimal_count 只是计算所谓的模块化度量(请参阅 Graphmodularity() 方法)类),然后选择模块性最高的簇计数。只有一个集群的模块化为零(根据定义,这就是该措施的工作原理)。三个集群的模块化程度约为 -0.0083,因此 igraph 只选择一个集群而不是三个集群是正确的:

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

关于python - 为什么optimal_count没有给出正确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28349966/

相关文章:

python - 如何通过 Python 从 DPX 文件读取时间码

python - 在 psycopg2 中,如何将 register_hstore 与连接池一起使用?

python - 将列表列表(表示边)中的数据加载到 python 中的 igraph 图中

r - 在三方 igraph 上的层内排序顶点

python - 获取 mysql 数据作为 python 字典

python - 在 anaconda 提示符中按时间顺序列出目录内容

python - 部分定义 scikit-learn K-Means 聚类的初始质心

python - 排列 3d 数组 "slices"中的行以相互匹配

matlab - mat2gray对multithresh的影响

python - 将 python-igraph 图转换为 networkx