了解为什么莱顿算法无法找到 iris 数据集的社区

问题描述 投票:0回答:0

早上好!,

我正在尝试了解 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 个簇。让我知道你的想法。

谢谢你的时间

python graph cluster-analysis leiden
© www.soinside.com 2019 - 2024. All rights reserved.