r - DBSCAN (кластеризация на основе плотности) описывает единицу измерения для eps - PullRequest
0 голосов
/ 13 июня 2018

Я пытался использовать пакет dbscan в R, чтобы попытаться сгруппировать некоторые пространственные данные.Функция dbscan::dbscan принимает eps и minpts в качестве ввода.У меня есть датафрейм с двумя столбцами longitude и latitude, выраженными в десятичных градусах, как показано ниже:

df <- data.frame(lon = c(seq(1,5,1), seq(1,5,1)), 
                   lat = c(1.1,3.1,1.2,4.1,2.1,2.2,3.2,2.4,1.4,5.1))

, и я применяю алгоритм:

 db <- fpc::dbscan(df, eps = 1, MinPts = 2)

будет eps здесь определяться в градусах или в каких-то других единицах?Я действительно пытаюсь понять, в какой единице выражено это максимальное расстояние eps, поэтому любая помощь приветствуется

1 Ответ

0 голосов
/ 13 июня 2018

Никогда не используйте пакет fpc, всегда используйте dbscan::dbscan.

Если у вас широта и долгота, вам нужно , чтобы выбрать подходящую функцию расстояния, такую ​​как Haversine.

Функция расстояния по умолчанию, евклидова, игнорирует сферическую природу Земли.Тогда значение eps представляет собой смесь градусов широты и долготы, но они не соответствуют одинаковым расстояниям!Один градус к востоку на экваторе на намного дальше, чем на один градус к востоку в Ванкувере.

Даже в этом случае вам нужно обращать внимание на единицы.Одна реализация Haversine может давать радианы, другая - метры, и, конечно, кто-то сумасшедший будет работать за мили.

К сожалению, насколько я могу судить, ни одна из реализаций R не может ускорить расстояние Haversine.Таким образом, вместо кластеризации данных в ELKI может быть на намного быстрее (хотя вы должны сами добавить индекс).

Если ваши данные достаточно малы, вы можете использовать предварительно вычисленное расстояниематрица (dist объект) в R. Но это займет O (n²) времени и памяти, поэтому она не очень масштабируема.

...