Scipy clustering: какой метод использовать в fcluster для простой группировки?

116
9

В модуле scipy clustering имеется множество опций, и я хотел бы быть уверенным, что правильно их использую. У меня симметричная матрица расстояний DR и я бы хотел найти все кластеры таким образом, чтобы в любой точке кластера был сосед с расстоянием не более 1,2.

L = linkage(DR,method='single')
F = fcluster(L, 1.2)

В linkage я уверен, что single - это то, что я хочу (алгоритм ближайшей точки). Однако для fcluster я думаю, что мне нужен дефолт, "непоследовательный" метод:

'несогласованность: если узел кластера и все его потомки имеют несогласованное значение, меньшее или равное t, то все его потомки листа принадлежат одному плоскому кластеру. Если ни один неэлементный кластер не соответствует этому критерию, каждый узел присваивается его собственному кластеру. (По умолчанию)

Но, может быть, это метод расстояния:

'distance: Формирует плоские кластеры, так что исходные наблюдения в каждом плоском кластере не имеют более сильного расстояния, чем t.

... Я не уверен. Какой из них использовать? Что означает в этом контексте копейское расстояние?

спросил(а) 2021-01-25T12:33:17+03:00 4 месяца, 4 недели назад
1
Решение
64

Возможно, вам стоит взглянуть на DBSCAN. См. Статью в Википедии. Похоже, вы ищете выход DBSCAN с minPts = 1 и epsilon = 1.2

Достаточно просто реализовать суждение из псевдокода в википедии, в частности, поскольку у вас уже есть матрица расстояний. Просто сделай это сам.

ответил(а) 2021-01-25T12:33:17+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема