早上好!,
我正在尝试了解 Leiden 算法及其用于查找分区和聚类的用法。 文档中提供的例子已经直接找到分区了,比如下面这样:
import leidenalg as la
import igraph as ig
G = ig.Graph.Famous('Zachary')
partition = la.find_partition(G, la.ModularityVertexPartition)
G.vs['cluster'] = partition.membership
ig.plot(partition,vertex_size = 30)
如果检查
partition.membership
,它已经有 4 个集群。
但是,我正在尝试用
iris dataset
做类似的事情,但算法无法找到聚类。
我尝试获取 X 变量并创建一个:
但是那些效果不好(甚至不能通过缩放值),因为它无法根据观察结果创建集群。我假设相关性不好将它们分开。 我有什么不明白的?
这里是相关矩阵的代码:
import numpy as np
from sklearn import datasets
import igraph as ig
import leidenalg
import cairo
from sklearn.preprocessing import StandardScaler
# Load the Iris dataset
iris = datasets.load_iris()
X = iris.data # Features
y = iris.target # Class labels
# Create an adjacency matrix based on observation similarity
adj_matrix = np.corrcoef(X)
# Create an igraph graph object
graph = ig.Graph.Weighted_Adjacency(adj_matrix)
# Apply the Leiden algorithm for community detection evaluating the nº of clusters created by changing the resolution parameter.
for i in np.arange(0.9,1.05,0.05):
partition = leidenalg.find_partition(graph, leidenalg.CPMVertexPartition,
resolution_parameter = i)
print(i,len(np.unique(partition.membership)) )
#0.9 1
#0.9500000000000001 1
#1.0 150
#1.0500000000000003 150
可以看到,一旦达到 1,就有 150 个簇(等于观察的 nº),在此之前,它认为所有的东西都是 1 个簇。让我知道你的想法。
谢谢你的时间