алгоритм кластеризации данных без учета плотности - PullRequest
2 голосов
/ 03 октября 2010

Я работаю над программой кластерного анализа, которая принимает набор точек S в качестве входных данных и помечает каждую точку тем индексом кластера, которому она принадлежит. Я реализовал алгоритмы DBScan и OPTICS, и они оба работают как положено. Однако результаты этих алгоритмов могут сильно отличаться в зависимости от начальных значений MinPts и Epsilon. Я искал по всей сети и прочитал множество статей о интеллектуальном анализе данных и кластерном анализе, и, тем не менее, я не могу найти способ анализа данных без необходимости использования MinPts и Epsilon, чтобы определить, находится ли точка в таком кластере. Я предполагаю, что кластерный анализ на основе плотности не подходит для моего случая.

Кто-нибудь имеет идею или знает об алгоритме, который я мог бы использовать, который не требует такой конфигурации? Или просто укажи мне правильное направление. Любая помощь приветствуется.

Спасибо!

Это школьный проект, который я пытаюсь завершить, в котором у меня есть набор 2D координат, представляющих точки на плоскости, и я должен определить, к какому кластеру относится каждая точка. Теперь я сделал это, используя OPTICS, и он работает нормально, но мне нужно настроить значение Eps так, чтобы мои выходные данные соответствовали полученным в качестве примера выходным данным. Но поскольку у меня нет описания того, что представляет собой кластер в субъекте или каковы его характеристики, я никак не могу основываться исключительно на расстоянии между точками или плотности точек в данном регионе. Кроме того, я не знаю количество кластеров заранее, поэтому я использую алгоритм OPTICS. Так что, по моему мнению, либо я делаю это очень неправильно, либо в теме отсутствует важная часть информации. А также, я не ищу никого, кто бы сделал мою домашнюю работу или дал мне какой-либо исходный код, просто некоторые идеи или рекомендации, так как я в значительной степени заблудился, как получить точные результаты, приведенные в примерах набора данных (я Также не допускается получение неправильных значений, если я считаю, что проект провалился, поэтому алгоритмы с полями ошибок не могут быть использованы).

Еще раз спасибо, и извините за длинный пост.

Ответы [ 2 ]

1 голос
/ 03 октября 2010

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

Почему вы возражаете против MinPts и Epsilon? Если вам не нравится то, что происходит, когда вы их меняете, не меняйте их. Серьезно.

EDIT:
Какое странное назначение! Ваша кластеризация должна идеально соответствовать их, без других подсказок? Я предположу, что они не являются идиотами или садистами, и сделаю следующее предположение: в примерах есть «естественная» кластеризация, которая очевидна для глаз. Я прав? Если так, то есть способ, которым мы можем установить параметры программно, как функцию расстояний в наборе точек. Сколько примеров есть, и можно ли опубликовать один?

EDIT:
Хах! Я знал это! Вот правило, которое правильно разделит этот случай на кластеры: найдите наибольшее расстояние от любой точки до ее ближайшего соседа, и, если какие-либо две точки находятся на расстоянии менее чем в два раза больше этого расстояния, они принадлежат одному кластеру. Держу пари, что это сработает и в других случаях.

0 голосов
/ 03 октября 2010

Вы можете попробовать найти множество других кластерных алгоритмов . У вас есть вероятностная кластеризация (EM), секционная кластеризация (KMeans), иерархическая кластеризация и многие другие ... Конечно, для каждой из них требуется свой тип конфигурации

Также обязательно попробуйте Weka , инструмент с открытым исходным кодом, содержащий множество алгоритмов машинного обучения (классификация, кластеризация, предварительная обработка, ...). Я считаю, что он имеет реализацию (Java) для всех упомянутых алгоритмов .


Редактировать : Вопрос о том, какая кластеризация является наилучшей, очень зависит от предметной области. И все это сводится к тому, как кластеры используются в контексте вашего приложения, которое определяет, насколько они полезны (кроме того, может быть более одной естественной кластеризации ваших данных).

...