2010-01-12 1 views
7

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

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

Я ищу алгоритм, который позволил бы мне:

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

ответ

5

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

Оценка максимального правдоподобия mixtures models is implemented in Matlab.

Ваше требование о том, что количество компонентов неизвестно, делает вашу модель более сложной. Доминирующий вероятностный подход состоит в том, чтобы провести процесс Дирихле до распределения смеси и оценить по байесовскому методу. Например, см. this paper on infinite Gaussian mixture models. Модель смесителя DP даст вам представление о количестве компонентов и компонентов, к которым принадлежат все элементы, что именно вы хотите. В качестве альтернативы вы можете выполнить выбор модели по количеству компонентов, но это, как правило, менее изящно.

Существует много вариантов моделей моделей смесителей DP, но они могут быть не такими удобными. Например, вот Matlab implementation.

Ваш график показывает, что вы являетесь пользователем R. В этом случае, если вы ищете готовые решения, ответ на ваш вопрос лежит на этом Task View for cluster analysis.

3

Я думаю, что вы ищете что-то по линиям k-means clustering algorithm.

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

2

Вам нужен один из алгоритмов кластеризации. Все они могут быть подразделены на 2 группы:

  1. указывается количество групп (кластеры) - 2 кластера в вашем примере
  2. алгоритм пытается угадать правильное количество кластеров, сам по себе

Если вам нужен алгоритм 1-го типа, тогда K-Means - это то, что вам действительно нужно.

Если вам нужен алгоритм 2-го типа, то вам, вероятно, понадобится один из иерархических алгоритмов кластеризации. Я никогда их не реализовал. Но я вижу простой способ улучшить K-средства таким образом, что нет необходимости указывать количество кластеров.

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