Ошибка в моем алгоритме DBSCAN. Версия Matlab - PullRequest
0 голосов
/ 29 апреля 2018

В настоящее время я использую алгоритм DBSCAN для кластеризации своих данных, но у меня возникла некоторая проблема. Как вы знаете, DBSCAN нужно 3 параметра перед запуском. Первый - это эпсилон, который является диапазоном поиска ключевой точки. Во-вторых, это MinPts или вы можете сказать минимальное количество точек для формирования кластера. Третий - это набор данных.

DBSCAN начать работу, прыгнув в случайную точку. Эту точку можно назвать основной точкой кандидата. С помощью эпсилона мы оцениваем, есть ли точки Minpts-1 в радиусе эпсилона. Мы получили точное MinPts очко в этом эпсилоне. Таким образом, мы можем сформировать кластер. Затем мы вызовем функцию expandcluster, чтобы расширить кластер, все точки в радиусе эпсилона снова будут выполнять поиск с радиусом эпсилона, поэтому кластер станет больше. Этот шаг останавливается, пока кластер не может быть расширен. Мы перейдем к другой точке, которая не назначена в кластере. Если точка имеет радиус меньше MinPts внутри радиуса, мы пометим эту точку как шум и продолжим указывать точку и находим новый кластер.

Я использую алгоритм кластеризации dbscan

Проблема в том, что у меня есть набор данных, и я установил MinPts 4, Eps 65,5. Я получил 3 кластера, но 1 кластер имел только 3 балла. Если мы посмотрим на теорию, этого не должно быть.

Спасибо, что пришли на этот вопрос, и я надеюсь, что смогу найти ответ ...

1 Ответ

0 голосов
/ 30 апреля 2018

DBSCAN может производить кластеры меньше minPts.

Это общеизвестный факт, хотя исключения встречаются довольно редко.

DBSCAN Revisited, Пересмотрено: почему и как вы должны (все еще) использовать DBSCAN. ACM Trans. База Сист. 42, 3, статья 19 (июль 2017), 21 стр. https://doi.org/10.1145/3068335

Сноска 1 гласит:

[уникальные метки для пограничных точек] в редких случаях могут привести к кластеру с количеством точек minPts, если слишком много пограничных точек достижимо другими кластерами и ранее были назначены другим кластерам.

Кластер имеет как минимум 1 базовую точку. Это на самом деле гарантировано.

Тем не менее, вероятно, будет хорошей идеей, если вы дважды проверите случайный код, который вы скачали из интернета, с одной из наиболее широко известных реализаций.

...