Разные результаты между fpc::dbscan и dbscan::dbscan

#r #dbscan

#r #dbscan

Вопрос:

Я хочу реализовать DBSCAN в R для некоторых координат GPS. У меня есть матрица расстояний (dist_matrix), которую я ввел в следующие функции:

dbscan::dbscan(dis_matrix, eps=50, minPts = 5, пограничные точки = TRUE) fpc ::dbscan(dis_matrix,eps = 50,minPts = 5, метод = «dist»)

и я получаю очень разные результаты от обеих функций с точки зрения количества кластеров и того, является ли точка точкой шума или принадлежит кластеру. В основном, результаты несовместимы между двумя алгоритмами. Я понятия не имею, почему они генерируют эти очень разные результаты, хотя здесь http://www.sthda.com/english/wiki/wiki.php?id_contents=7940 мы видим, что для данных iris обе функции выполнили то же самое.

моя матрица расстояний [поступает из функции (geosphere:: distm), которая вычисляет пространственное расстояние между более чем 2000 координатами.

Кроме того, я закодировал dbscan в соответствии с этим псевдокодовым источником:https://cse.buffalo.edu /~jing/cse601 /fa13/materials/clustering_density.pdf Мои результаты равны тому, что я получил из пакета fpc. Кто-нибудь может заметить, почему они отличаются. Я уже просмотрел обе функции и ничего не нашел.

Ответ №1:

В документации geosphere::distm говорится, что он возвращает не dist объект, а матрицу. dbscan::dbscan предполагается, что у вас есть матрица данных, а не расстояния. Преобразуйте вашу матрицу в dist объект с помощью as.dist first. Это должно решить проблему.