4

Я реализую проект, которому необходимо сгруппировать географические точки. Алгоритм OPTICS представляется очень приятным решением. В качестве входных данных (MinPts и Epsilon) требуется всего 2 параметра, которые представляют собой, соответственно, минимальное количество точек, необходимых для их рассмотрения в качестве кластера, а значение расстояния, используемое для сравнения, если две точки находятся внутри, можно разместить в одном кластере.ОПТИКА Алгоритм кластеризации. Как получить лучший epsilon

Моя проблема заключается в том, что из-за экстремального разнообразия точек я не могу установить фиксированный эпсилон. Просто взгляните на изображение ниже.

the problem http://s13.postimage.org/u5a08nwvb/Immagine.png

То же точки структура, но в другом масштабе привело бы к очень разные. Предположим установить MinPts = 2 и epsilon = 1Km. Слева алгоритм будет создавать 2 кластера (красный и синий), но справа он создаст один кластер, содержащий все точки (красный), но я хотел бы получить 2 кластера даже справа.

Итак, мой вопрос: есть ли способ вычислить динамическое значение epsilon для получения этого результата?

EDIT 5 июня 2012 3:15 вечера: Я думал, что с помощью реализации алгоритма OPTICS из библиотеки javaml, но мне кажется, что на самом деле является DBSCAN реализация алгоритма. Итак, вопрос в том, знает ли кто-нибудь о реализации алгоритма OPTICS на основе Java?

Большое спасибо и извините за мой бедный английский.

Marco

+0

Являются ли кластеры (почти) линейно разделяемыми? –

+0

Что вы подразумеваете под линейно разделяемым кластером? –

+1

Линейно разделяемое означает, что вы можете нарисовать одну «прямую» линию, разделяющую точки. «Прямо» может быть не декартовым/евклидовым, потому что вы можете трансформировать оси, например главные компоненты. Ваш пример выглядит линейно разделимым. – user949300

ответ

3

Значение epsilon в OPTICS равно только ограничивает сложность выполнения при использовании индексных структур. Если у вас нет индекса ускорения, вы можете установить его на бесконечность.

Цитирую Википедию на OPTICS

Параметр \ varepsilon, строго говоря, не является необходимым. Его можно установить на максимальное значение. Когда имеется пространственный индекс, он, однако, играет практическую роль, когда дело доходит до сложности.

У вас, похоже, больше похоже на DBSCAN, чем на ОПТИКУ. В OPTICS вам не нужно выбирать epsilon (его авторы должны были называть max-epsilon!), Но ваш метод извлечения кластера позаботится об этом. Используете ли вы экстракцию Xi, предложенную в документе OPTICS?

minPts гораздо важнее. Вы должны попробовать значение не менее 5 или 10, а не 2. С 2, вы, по существу, выполняете односвязную кластеризацию!

Пример, который вы указали выше, должен работать нормально, как только вы увеличиваете minPts!

Re: Редактировать: Как вы можете даже видеть в статье в Википедии, ELKI имеет правильную реализацию OPTICS, и она находится на Java.

+0

Что такое бумага OPTICS? На самом деле я провел некоторое исследование алгоритмов кластеризации и нашел OPTICS, но я не читал статью об этом –

+0

Первая статья в статье Википедии о OPTICS: Михаэль Анкерст, Маркус М. Бруниг, Ханс-Питер Кригель, Йорг Сандер: ОПТИКА: точки заказа для определения структуры кластеризации. В: Международная конференция ACM SIGMOD по управлению данными. Допустим, вы используете неполную реализацию OPTICS в Weka? –

+0

Спасибо. Нет, я использую эту реализацию: http://java-ml.sourceforge.net/ –

0

В вашем объяснении выше, это изменение в масштабе, который создает неопределенность. Когда ваш масштаб увеличивается, ваш эпсилон должен соответствующим образом измениться. Поскольку они находятся в двух очень разных масштабах, два изображения, которые вы представили, не являются одинаковым набором точек. Они не будут одинаково реагировать на ваш алгоритм OPTICS без изменения параметров.

Одним словом, нет. нет никакого способа динамически вычислить epsilon, чтобы получить этот результат. Кластеризация подобна уже NP-Hard, и эти алгоритмы кластеризации (оптика, k-средства, верони) могут приближать только оптимальное решение.

+0

Приведенный выше пример позволяет вам понять проблему. Точки помещаются таким же образом, потому что я их скопировал и вставил, но, в общем, я говорю о разных моментах. –

+2

Фактически OPTICS является 'O (n log n)' с поддержкой индексов и не нуждается в epsilon. Реализация багги, которую он использовал (weka/java-ml), фактически делает DBSCAN в реализации «O (n^2)», так как она не имеет индекса. И я не знаю, насколько я знаю. k-mean есть, но модель связи DBSCAN с плотностью связана с «O (n)», когда у вас есть списки соседей; вычисление соседей - самая дорогая часть. –

+0

-1 за количество неправильной информации в этом ответе, извините. –

1

Вы можете попытаться масштабировать epsilon на общий размер охватывающего прямоугольника. Например, ваши левые данные составляют около 4 км x 6 км (с помощью измерительного ящика Mark I), а справа - около 2 км x 2 км. Итак, эпсилон справа должен быть примерно в 2,5 раза меньше.

Конечно, это не работает надежно. Если по вашим правым данным была дополнительная одиночная точка в 4 км вправо и на 2 км вниз, это сделало бы прямоугольник с закрытием справа таким же, как и слева, и вы получите похожие (неправильные) результаты.

+0

Я уже думал о таком решении, но, как вы сказали, он не работает должным образом (по той же причине вы объяснили :)) –

+0

Интересно, можете ли вы использовать алгоритм типа ближайшего соседа, чтобы получить ощущение расстояния между «типичными» точками, затем используйте это для вычисления оценки для epsilon. – user949300

+0

Можете ли вы привести пример? –

1

Вы можете попробовать минимальное остовное дерево, а затем удалить самый длинный край. Оставшееся остовное дерево и центр их - лучший центр для ОПТИКИ, и вы можете подсчитать количество точек вокруг него.

+0

Фактически OPTICS вычисляет нечто близкое к минимальному остовному дереву. Вычисление другого минимального связующего дерева для выбора порога * остановки для OPTICS не имеет большого смысла. Вы можете просто использовать бесконечность. –

Смежные вопросы