Спектральная кластеризация с использованием scikit Learn на графе, сгенерированном через networkx

У меня есть векторная матрица признаков 3000x50. Я получил для этого матрицу подобия, используя sklearn.metrics.pairwise_distances в качестве «Матрицы подобия». Теперь я использовал networkx для создания графика, используя матрицу сходства, созданную на предыдущем шаге, как G=nx.from_numpy_matrix(Similarity_Matrix). Я хочу выполнить спектральную кластеризацию на этом графике G сейчас, но несколько поисковых запросов в Google не смогли предоставить достойный пример спектральной кластеризации scikit Learn на этом графике :( Официальная документация показывает, как можно выполнить спектральную кластеризацию для некоторых данных изображения, которые крайне неясны. по крайней мере новичку вроде меня.

Может ли кто-нибудь дать мне образец кода для этого или для сокращения графа или разделения графа с использованием networkx, scikit Learn и т. д.

Бесконечно благодарен!


person user3641802    schedule 15.05.2014    source источник
comment
pairwise_distances создает матрицу расстояний, но вам нужна матрица сходства (матрица Грама ядра). Я не понимаю, почему вы также ставите NetworkX в цикл.   -  person Fred Foo    schedule 16.05.2014
comment
Спасибо за ответ. Чтобы выполнить спектральную кластеризацию, мне сказали преобразовать данные в виде графика. Следовательно, я использую networkx для этого. Другие идеи приветствуются.   -  person user3641802    schedule 20.05.2014
comment
Графики представлены в scikit-learn в виде матриц связности. scikit-learn не общается с NetworkX.   -  person Fred Foo    schedule 20.05.2014


Ответы (1)


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()
person Amogh Mishra    schedule 05.05.2019