两种不同的聚类方法(通过频谱分析)和两种不同的结果...发生了什么?

时间:2019-12-24 00:52:15

标签: python graph cluster-analysis networkx

我很生气,因为我使用(必须是)两种等效方法。 我的目标是将图形分为不同的组。为此,一方面我可以“手工”完成计算fiedler:

import networkx as nx
import numpy.linalg as la

g1 = nx.from_numpy_matrix(A.values )
A = nx.adjacency_matrix(g1)
D = np.diag(np.ravel(np.sum(A,axis=1)))
L=D-A

l, U = la.eigh(L)
# fiedler
f = U[:,1]
labels = np.ravel(np.sign(f))
coord = nx.spring_layout(g1, iterations=100,seed=42)
fig = plt.figure(figsize=(15, 8))
nx.draw_networkx_nodes(g1, coord, node_size=25, node_color=labels, cmap = 'cool')


coord = nx.spectral_layout(g1)
fig = plt.figure(figsize=(15, 8))
nx.draw_networkx_nodes(g1, coord, node_size=25, node_color=labels, cmap = 'cool')

我得到了这种令人信服的光谱表示: enter image description here

现在,使用以下代码(以更系统的方式):

import networkx as nx
import sklearn
clustering = sklearn.cluster.SpectralClustering(n_clusters=2,
                                                assign_labels="discretize",
                                                random_state=0)
clustering = clustering.fit(A) 
labels = clustering.labels_ 
coord = nx.spring_layout(g1, iterations=100,seed=42)
fig = plt.figure(figsize=(15, 8))
nx.draw_networkx_nodes(g1, coord,node_size=25,node_color=labels, cmap = 'cool')

我得到一个非常糟糕的结果,看起来根本不一样。

所以我的问题是,为什么?可以给我解释一下,我到底如何获得不同的结果?

欢呼。

1 个答案:

答案 0 :(得分:0)

通过调用sklearn的光谱聚类的方式,您使用RBF内核将亲和矩阵解释为坐标。我对此并不感到奇怪,这并不奇怪。

输入错误->输出错误。

尝试affinity='precomputed'