Проблема кластеризации - PullRequest
       34

Проблема кластеризации

4 голосов
/ 08 октября 2010

Мне было поручено найти N кластеров, содержащих наибольшее количество точек для определенного набора данных, учитывая, что кластеры ограничены определенным размером. В настоящее время я пытаюсь сделать это, подключив мои данные к дереву kd, перебирая данные и находя ближайшего соседа, а затем объединяя точки, если кластер, который они создают, не превышает лимит. Я не уверен, что этот подход даст мне глобальное решение, поэтому я ищу способы его подправить. Если бы вы могли сказать мне, к какому типу проблем это приведет, это тоже было бы здорово.

Ответы [ 3 ]

7 голосов
/ 08 октября 2010

Проверьте scipy.clustering для начала. Поиск по ключевым словам может затем дать много информации о различных алгоритмах, которые там используются. Кластеризация - это большая область, с большим количеством исследований и практических применений, а также с рядом простых подходов, которые, как было найдено, работают достаточно хорошо, поэтому вы можете не захотеть начинать с собственного.

При этом алгоритмы кластеризации, как правило, довольно легко программировать, и, если вы действительно хотите запрограммировать свое собственное, k-means и агломерационная кластеризация являются одними из фаворитов, которые можно быстро выполнить.

Наконец, я не уверен, что ваше представление о ровно N кластерах, ограниченных определенным размером, является самосогласованным, но оно зависит от того, что именно вы подразумеваете под «размером» и «кластером» (являются ли отдельные точки кластер?).

Обновление:

Следуя комментариям ОП ниже, я думаю, что стандартные методы кластеризации не дадут оптимального решения этой проблемы, потому что нет непрерывной метрики для «расстояния» между точками, которое можно оптимизировать. Хотя они могут дать хорошее решение или приближение в некоторых случаях. Для кластерного подхода я бы попробовал k-means, так как предпосылка этого метода имеет фиксированное значение N.

Но вместо кластеризации это больше похоже на проблему покрытия ( т.е. , у вас есть N прямоугольников фиксированного размера, и вы пытаетесь покрыть все точки ими ), но я не знаю много об этом, поэтому я оставлю это кому-то еще.

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

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

1) Предположим, что под «определенным размером» мы можем сказать, что «любой кластер должен полностью содержаться внутри круга с радиусом r».

2) Все ваши очки являются кандидатами в «начальные» точки в центре кластера.

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

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

Если ваше число кластеров фиксировано, и вы хотите максимизировать количество точек, которые есть в этих кластерах, тогда я думаю, что жадное решение было бы хорошо:

  • найдите прямоугольник, который может содержатьмаксимальное количество точек,
  • удалить эти точки,
  • найти следующий прямоугольник
  • ...

Итак, как найти прямоугольникмаксимальной области A (фактически каждый прямоугольник будет иметь эту область), которая содержит максимальное количество точек?

Прямоугольник не является обычным для евклидова расстояния, прежде чем пытаться решить это, не могли бы вы уточнить, действительно ли вынужен прямоугольник или просто какой-то король ограничения по размеру кластера?Будет ли работать круг / эллипс?

РЕДАКТИРОВАТЬ : жадность не будет работать (см. Комментарий ниже), и это действительно должны быть прямоугольники ...

...