Как я могу найти максимальное / минимальное расстояние между участниками кластера с помощью DBSCAN?

поэтому у меня есть задача кластеризации, в которой мне нужно было создать кластеры, в которых расстояние между каждой точкой не превышает 30 км. У меня были только долгота и широта. Поэтому я использовал для этого алгоритм DBSCAN (получил нужный мне результат), преобразовал точки широты и долготы в расстояние в километрах и получил 11 кластеров. Здесь вы можете увидеть, как они построены здесь.

Как видите, некоторые кластеры имеют только 1 балл. Но в любом случае мой вопрос: как найти максимальное и минимальное расстояние между точками кластера? Другими словами, мне нужно найти две точки кластера, которые находятся ближе всего друг к другу, и две точки, которые наиболее удалены друг от друга, и найти их расстояния. Я нашел какие-то решения с другими кластерными алгоритмами, но ничего не нашел для DBSCAN.


person olukaso    schedule 16.12.2019    source источник
comment
сколько у тебя очков? Можно ли применить грубую силу, просто вычислив расстояние между всеми точками кластера A и B, а затем взяв max, min и соответствующий идентификатор? с парой 1000 очков у numpy не должно возникнуть проблем с этим.   -  person Magellan88    schedule 16.12.2019


Ответы (1)


Вы должны вычислить их самостоятельно, потому что DBSCAN не использует попарные расстояния.

Существуют функции для вычисления попарных расстояний, а затем вы можете просто вызвать max() и min() (здесь вы должны обратить внимание, чтобы не включать диагональ).

Если это слишком медленно, вы можете изучить методы ограничения, используя неравенство треугольника. Для самых дальних точек, если возможно, начните с пограничной точки, найдите самую дальнюю точку к этой; а потом еще раз. Это даст вам хороших кандидатов для дальнейшего поиска.

person Has QUIT--Anony-Mousse    schedule 16.12.2019