如何使用 python igraph 对图进行聚类
How to cluster a graph using python igraph
我一直在使用 python igraph 来尝试更轻松地生成和分析图表。我下面的代码生成了一个包含 50 个节点的随机图并将其聚类:
from igraph import *
import random as rn
g = Graph()
size = 50
g.add_vertices(size)
vert = []
for i in range(size):
for j in range(size):
test = rn.randint(0,5)
if j >= i or test is not 0:
continue
g.add_edges([(i,j)])
#layout = g.layout("kk")
#plot(g, layout = layout)
#dend = VertexDendrogram(graph=g, optimal_count=10)
clust = VertexClustering(g, membership=range(size))
#clust = dend.as_clustering()
c = clust.cluster_graph()
plot(clust, mark_groups=True)
layout = c.layout("kk")
#plot(c, layout = layout)
但是,我不确定这是否正确,因为结果是每个节点都是独立的集群。我假设这与 VertexClustering 的必需参数 membership
有某种关系,因为我真的不明白它的含义或为什么需要它。
这是 the terse documentation 所说的:
the membership list. The length of the list must be equal to the number of vertices in the graph. If None, every vertex is assumed to belong to the same cluster.
并且没有解释我应该将 membership
设置为什么以获得正常的常规聚类。
或者,我尝试使用 VertexDendrogram
,如两行带注释的代码所示。但是,运行 这会带来运行时错误:
Traceback (most recent call last):
File "sma_hw6_goedeke.py", line 22, in <module>
dend = VertexDendrogram(graph=g, optimal_count=10)
TypeError: __init__() takes at least 3 arguments (3 given)
这是因为VertexDendrogram
需要参数merges
。但是,我再一次不知道 merges
应该设置什么或者为什么需要它。 The documentation 几乎什么也没说:
merges - the merges performed given in matrix form.
我不知道那是什么。那么我应该如何处理此代码才能为我可以试验的随机图获得正常、规则的聚类?
我坚持我最初的评估,即 igraph
的文档过于简洁,令人抓狂。
我实际需要的功能是igraph.Graph.community_fastgreedy()
。一般来说,运行一个聚类算法的所有函数似乎都是以"community"开头的。
我一直在使用 python igraph 来尝试更轻松地生成和分析图表。我下面的代码生成了一个包含 50 个节点的随机图并将其聚类:
from igraph import *
import random as rn
g = Graph()
size = 50
g.add_vertices(size)
vert = []
for i in range(size):
for j in range(size):
test = rn.randint(0,5)
if j >= i or test is not 0:
continue
g.add_edges([(i,j)])
#layout = g.layout("kk")
#plot(g, layout = layout)
#dend = VertexDendrogram(graph=g, optimal_count=10)
clust = VertexClustering(g, membership=range(size))
#clust = dend.as_clustering()
c = clust.cluster_graph()
plot(clust, mark_groups=True)
layout = c.layout("kk")
#plot(c, layout = layout)
但是,我不确定这是否正确,因为结果是每个节点都是独立的集群。我假设这与 VertexClustering 的必需参数 membership
有某种关系,因为我真的不明白它的含义或为什么需要它。
这是 the terse documentation 所说的:
the membership list. The length of the list must be equal to the number of vertices in the graph. If None, every vertex is assumed to belong to the same cluster.
并且没有解释我应该将 membership
设置为什么以获得正常的常规聚类。
或者,我尝试使用 VertexDendrogram
,如两行带注释的代码所示。但是,运行 这会带来运行时错误:
Traceback (most recent call last):
File "sma_hw6_goedeke.py", line 22, in <module>
dend = VertexDendrogram(graph=g, optimal_count=10)
TypeError: __init__() takes at least 3 arguments (3 given)
这是因为VertexDendrogram
需要参数merges
。但是,我再一次不知道 merges
应该设置什么或者为什么需要它。 The documentation 几乎什么也没说:
merges - the merges performed given in matrix form.
我不知道那是什么。那么我应该如何处理此代码才能为我可以试验的随机图获得正常、规则的聚类?
我坚持我最初的评估,即 igraph
的文档过于简洁,令人抓狂。
我实际需要的功能是igraph.Graph.community_fastgreedy()
。一般来说,运行一个聚类算法的所有函数似乎都是以"community"开头的。