#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. Это должно решить проблему.