我有一个 3000x50 的特征向量矩阵。我为此使用 sklearn.metrics.pairwise_distances
作为“Similarity_Matrix”获得了一个相似度矩阵。现在我使用 networkx
使用上一步中生成的相似度矩阵作为 G=nx.from_numpy_matrix(Similarity_Matrix)
创建一个图形。我现在想在这个图 G
上执行光谱聚类,但是几个谷歌搜索未能提供一个很好的例子来说明 scikit 在这个图上学习光谱聚类:( 官方文档显示了如何在一些非常不清楚的图像数据上完成光谱聚类至少对于我这样的新手来说。
任何人都可以给我一个代码示例,用于使用 networkx、scikit learn 等进行图形切割或图形分区。
太感谢了!
最佳答案
adj_matrix = nx.from_numpy_matrix
将帮助您创建一个邻接矩阵,这将是您的亲和度矩阵。您需要像这样将其提供给 scikit-learn:SpectralClustering(affinity = 'precomputed', assign_labels="discretize",random_state=0,n_clusters=2).fit_predict(adj_matrix)
如果您没有任何相似度矩阵,您可以将 'affinity' 参数的值更改为 'rbf' 或 'nearest_neighbors'。下面的示例解释了整个光谱聚类管道:
import sklearn
import networkx as nx
import matplotlib.pyplot as plt
'''Graph creation and initialization'''
G=nx.Graph()
G.add_edge(1,2) # default edge weight=1
G.add_edge(3,4,weight=0.2) #weight represents edge weight or affinity
G.add_edge(2,3,weight=0.9)
G.add_edge("Hello", "World", weight= 0.6)
'''Matrix creation'''
adj_matrix = nx.to_numpy_matrix(G) #Converts graph to an adj matrix with adj_matrix[i][j] represents weight between node i,j.
node_list = list(G.nodes()) #returns a list of nodes with index mapping with the a
'''Spectral Clustering'''
clusters = SpectralClustering(affinity = 'precomputed', assign_labels="discretize",random_state=0,n_clusters=2).fit_predict(adj_matrix)
plt.scatter(nodes_list,clusters,c=clusters, s=50, cmap='viridis')
plt.show()
关于cluster-analysis - 在通过 networkx 生成的图上使用 scikit learn 进行频谱聚类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23684746/