Кластеризация/группировка на основе показателей/плотности

У меня есть конечное количество точек (облаков) с определенной на них метрикой. Я хочу найти максимальное количество кластеров в этом облаке, чтобы:

1) максимальное расстояние между любыми двумя точками в одном кластере меньше данного эпсилон (const)

2) в каждом кластере ровно k (const) точек.

Я рассмотрел все виды различных методов кластеризации, и кластеризация с ограничением на внутреннее максимальное расстояние не является проблемой (на основе плотности). 2) ограничение и требование найти «максимальное количество кластеров s.t.» хотя вроде проблематично. Любые предложения для эффективного решения?

Спасибо, А~


person aZen    schedule 15.02.2013    source источник
comment
возможный дубликат изменения алгоритма K-средних с одинаковым размером кластера   -  person Has QUIT--Anony-Mousse    schedule 17.02.2013
comment
Не дубликат. На самом деле вопрос совсем в другом.   -  person aZen    schedule 19.02.2013


Ответы (2)


Учитывая ваши ограничения, решения может и не быть. А на самом деле такое может происходить довольно часто...

Самый очевидный случай, когда у вас нет кратного k очков.

Но также, если epsilon установлено слишком низко, могут быть точки, которые больше нельзя помещать в кластеры.

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

Также подумайте, действительно ли вам нужно найти гарантированный максимум или просто хорошее решение.

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

person Has QUIT--Anony-Mousse    schedule 15.02.2013
comment
Не могли бы вы немного указать очевидные подходы? Для меня они (к сожалению) не очевидны. Кроме того, если ограничения не выполняются (нет решения), значение эпсилон будет увеличено, а запрос будет выполнен повторно (если больше k точек). - person aZen; 16.02.2013

У меня такое же впечатление, как у @Anony-Mousse, на самом деле: вы еще не поняли свою проблему и требования.

Если вы хотите, чтобы размеры вашего кластера были k, нет никаких сомнений в том, сколько кластеров вы получите: это, очевидно, n /k. Таким образом, вы можете попробовать использовать вариант k-средних, который создает кластеры того же размера, что и, например. описано в этом руководстве: Учебное пособие по k-средним одинакового размера и установите желаемое количество кластеров на n/k.

Обратите внимание, что это не особенно разумный или хороший алгоритм кластеризации. Он что-то делает для удовлетворения ограничений, но кластеры не очень значимы с точки зрения кластерного анализа. Это удовлетворение ограничений, но не кластерный анализ.

Чтобы также удовлетворить ваше ограничение эпсилон, вы можете начать с этого начального решения (которое, вероятно, является тем, что @Anony-Mousse назвал «очевидными подходами») и попытаться выполнить тот же тип оптимизации путем замены элементов. чтобы удовлетворить условию эпсилон.

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

Смотрите также:

Группировать n точек в k кластеров одинакового размера

Вариация алгоритма K-средних с одинаковым размером кластера

по существу избыточные вопросы.

person Erich Schubert    schedule 16.02.2013
comment
Спасибо за ответ. Большинство точек не будут принадлежать ни одному кластеру, поэтому кластеризация в k кластеров одинакового размера мне не поможет (на самом деле я нашел те вопросы, на которые вы ссылались ранее). Я мог бы использовать DBScan с моим значением эпсилон, а затем разделить кластеры, которые имеют значение ›= 2*k. Похоже, это может сработать! - person aZen; 18.02.2013
comment
У меня сложилось впечатление, что вы ищете не кластерный анализ, а вариант Проблема покрытия максимального набора. Смотрите: кластеризация пытается найти структуру, тогда как у вас есть предопределенная структура, и вы ищете максимально возможное покрытие, используя эту структуру. - person Erich Schubert; 19.02.2013
comment
Спасибо! Этот последний ответ действительно помог мне лучше понять мою проблему. - person aZen; 20.02.2013