Я хотел бы реализовать простой алгоритм кластеризации, используя python. Сначала я опишу проблему:
У меня есть несколько точек, каждая точка представлена id
, и между каждой парой существует вероятность пары, то есть prob(id1, id2)=some_value
. Это расположено в numpy массиве формы [N,3]
, где N - количество всех возможных пар точек. Для большей ясности приведем пример массива:
a = np.array([[1,2, 0.9],
[2,3, 0.63],
[3,4, 0.98],
[4,5, 0.1],
[5,6, 0.98],
[6,7, 1]])
, где первые две записи - это идентификаторы точек, а третья запись - вероятность того, что они принадлежат друг другу.
Кластеризация проблема заключается в соединении точек, которые проходят вероятность сокращения cut=0.5
, то есть точки 1,2,3,4 принадлежат одному кластеру, а 5,6,7 принадлежат другому кластеру. Текущее решение, которое у меня есть, - составить список списков (идентификаторов точек), то есть l=[[1,2,3,4],[5,6,7]]
, дважды зацикливая уникальные идентификаторы точек и массив a
. Есть ли более умный и быстрый способ сделать это?