Алгоритм назначения уникальных групповых меток из бинарной матрицы дружбы - PullRequest
0 голосов
/ 11 января 2020

Я пишу алгоритм кластеризации друзей-друзей, в котором «цели» являются друзьями, если они удовлетворяют критерию расстояния двухмерного связывания. Цель состоит в том, чтобы идентифицировать кластеры, содержащие всех друзей и расширенных друзей. Результатом алгоритма является матрица дружбы, в которой каждая запись представляет, являются ли две цели в этой индексной паре друзьями. Например:

[ 1 0 0 1]
[ 0 1 0 1]
[ 0 0 1 0]
[ 1 1 0 1]

С первой строки цель # 1 дружит с # 4, а со второй строки # 2 дружит с # 4. Третий ряд показывает, что № 3 изолирован. Таким образом, физическим результатом являются два кластера: кластер N = 3, содержащий (# 1, # 2, # 4) и кластер N = 1, содержащий только (# 3). Моя цель состоит в том, чтобы переписать эту матрицу в вектор, содержащий уникальные номера групп, т.е.

[ 1 ]
[ 1 ]
[ 2 ]
[ 1 ]

Где группа 1 содержит (# 1, # 2, # 4), а группа 2 является изолированной (# 3 ).

Существуют ли в Python какие-либо алгоритмы, позволяющие это сделать? Я хочу расширить это до произвольного размера (что-то вроде 1e+4 целей, поэтому нужно помнить о времени выполнения / скорости).

Примечание: я нашел этот пост, Преобразование двоичной матрицы в groups , что похоже на то, что я хочу, но мне нужно решение Python -specifi c. Я также смотрел на SpectralClustering от sklearn, но не уверен, подходит ли он для такого рода задач матрицы смежности.

...