Как выполнить спектральную кластеризацию на направленных сетях, используя python? - PullRequest
0 голосов
/ 27 января 2020

Я заинтересован в выполнении спектральной кластеризации в направленной сети. Для ненаправленной сети я использую спектральную кластеризацию из sklearn.cluster, которая, как я предполагаю, основана на матрице Лапласа, L = DA, где D и A обозначают матрицы степени и смежности соответственно.

Для направленной сети сеть, я попытался использовать ту же команду, просто чтобы посмотреть, что произойдет:

import numpy as np
from sklearn.cluster import SpectralClustering
A=np.matrix([[4,7,7,0,0],[3,0,6,0,0],[12,6,0,2,1],[0,0,2,0,4],[0,0,1,4,0]])
sc = SpectralClustering(2, affinity='precomputed', n_init=100) # specifying two clusters
sc.fit(A)

Это работает, но я получаю предупреждение о том, что, поскольку сеть была направлена, матрица смежности была принята за среднее исходной смежности и ее транспонирования, то есть L = 1/2 (A + A ^ t).

Мне известно, что существуют различные расширения матрицы Лапласа на направленные сети. (См., Например, кластеризация и обнаружение сообщества в управляемых сетях: исследование Fragkiskos D. Malliarosa, Michalis Vazirgiannis, стр. 42, доступно по адресу https://arxiv.org/pdf/1308.0971.pdf). Большинство требует построения матрицы вероятности перехода, соответствующей случайному блужданию по сети. Я бы предпочел использовать одно из этих расширений, а не просто L = 1/2 (A + A ^ t), потому что они выполняют кластеризацию более осмысленным образом.

Мне любопытно узнать, есть ли в моей сети простой инструмент python, разрешающий спектральную кластеризацию, который не потребует всей этой дополнительной работы (не то, что я не могу это сделать).

...