两种不同的聚类方法(通过光谱分析)和两种不同的结果……发生了啥?

Posted

技术标签:

【中文标题】两种不同的聚类方法(通过光谱分析)和两种不同的结果……发生了啥?【英文标题】:Two different methods for clustering (by spectral analysis) and two different results... what's hapenning?两种不同的聚类方法(通过光谱分析)和两种不同的结果……发生了什么? 【发布时间】:2020-04-15 04:18:30 【问题描述】:

我很生气,因为我使用了(它必须是)两种等效的方法。 我的目标是将图表聚类到不同的组中。为此,一方面我是“手工”完成的,计算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')

我得到了这个非常令人信服的光谱表示:

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

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】:

通过调用 sklearn 的谱聚类的方式,您使用 RBF 内核将您的亲和矩阵解释为坐标。我并不惊讶这不能很好地工作。

错误的输入 -> 错误的输出。

试试affinity='precomputed'

【讨论】:

您介意解释一下亲和力的作用吗?请。它如何影响结果 我问是因为结果仍然不同。这个想法是有的(其中一个分支是集群),但它仍然缺少几点。而且由于我想聚集在 2 个以上的组中,我需要确保这两种方法是一致的。 参见光谱聚类的文档和理论。它使用亲和力。一个合理的默认值是使用数据中的 rbf 内核来计算它。它也几乎可以保证结果会有所不同,因为它涉及随机...在 sklearn 中运行两次,您可能会得到两个不同的结果。 你能确认我的第一种方法更好吗?但是对于多集群,第二个是强制性的吗? 很抱歉,但我知道理论,您的回答仍然提高了两者之间的相似性,但并没有解决问题。无论我说什么随机统计,我仍然得到相同的不同结果!

以上是关于两种不同的聚类方法(通过光谱分析)和两种不同的结果……发生了啥?的主要内容,如果未能解决你的问题,请参考以下文章

K均值聚类法和系统聚类法有啥区别,这两种聚类方法的适用条件都是啥?

浅谈聚类算法

数据归一化和两种常用的归一化方法

数据归一化和两种常用的归一化方法

岩体结构面组蚁群ATTA聚类算法

数据归一化和两种常用的归一化方法