Назначения кластеров иногда различаются в двух реализациях DBSCAN.

Я реализовал алгоритм DBSCAN в R, и я сопоставляю кластерные назначения с реализацией DBSCAN библиотеки fpc. Тестирование выполняется на синтетических данных, которые генерируются, как показано в примере dbscan библиотеки fpc:

n <- 600
x <- cbind(runif(10, 0, 10)+rnorm(n, sd=0.2), runif(10, 0, 10)+rnorm(n, sd=0.3))

Кластеризация выполняется с параметрами, как показано ниже:

eps = 0.2
MinPts = 5

Я сравниваю назначения кластера fpc::dbscanс моей реализацией dbscan. Максимум запусков показывает, что каждая точка была классифицирована одинаково обеими реализациями.

Но бывают случаи, когда 1 или 2 точки, а в редких случаях 5 или 6 точек назначаются другим кластерам в моей реализации, чем в реализации fpc. Я заметил, что отличается только классификация пограничных точек. После построения графика я увидел, что точки, чье членство в кластере не совпадает в реализациях, находятся в таком положении, что их можно отнести к любому из окружающих его кластеров, в зависимости от того, из исходной точки какого кластера они были обнаружены первыми.

Я показываю изображение со 150 точками (во избежание беспорядка), где классификация по 1 точке отличается. Обратите внимание, что номер кластера точек несоответствия в моей реализации всегда больше, чем в реализации fpc.

График кластеров.

Верхняя вставка — fpc::dbscan, нижняя вставка — моя реализация dbscan

Plot of clusters. Top inset is fpc::dbscan, bottom inset is my dbscan implementation

Примечание Точка, отличающаяся от моей реализации, помечена восклицательным знаком (!) Я также загружаю увеличенные изображения раздела несоответствия:


Вывод моей реализации dbscan

+— основные точки

o— граничные точки

— точки шума

] ! выделяет отличающуюся точку

my dbscan implementation


вывод реализации fpc::dbscan

треугольники — это основные точки цветные круги — это граничные точки черные кружки — шумовые точки enter image description here


Другой пример:

Вывод реализации моего dbscan

enter image description here


Вывод реализации fpc::dbscan

enter image description here


РЕДАКТИРОВАТЬ

Пример с равным xy масштабированием

По запросу Anony-Mousse

В разных случаях иногда кажется, что моя реализация правильно классифицировала точку несоответствия, и иногда кажется, что реализация fpc правильно классифицировала несоответствие. См. ниже:

fpc::dbscan (с треугольными диаграммами), кажется, правильно классифицировал точку несоответствия

enter image description here

моя реализация dbscan (с + диаграммами), кажется, правильно классифицировала точку несоответствия

enter image description here

Вопрос

  • Я новичок в кластерном анализе, поэтому у меня есть еще один вопрос: допустимы ли такие различия?

  • В моей реализации я сканирую от первой точки до последней точки, как указано, также в fpc::dbscanточки сканируются в том же порядке. В таком случае обе реализации должны были обнаружить точку несоответствия (отмеченную ! ) из одного и того же центра кластера.Также я сгенерировал несколько случаев, когда fpc::dbscanпомечает точку как шум, но моя реализация назначает ее некоторым кластерам. В этом случае, почему возникает эта разница?

Сегменты кода по запросу.

5
задан Anony-Mousse 19 September 2012 в 17:51
поделиться