Вопрос

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

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

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

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

Решение

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

Максимальная оценка вероятности Модели смесей реализованы в Matlab.

Ваше требование о том, чтобы количество компонентов было неизвестно, делает вашу модель более сложной. Доминирующий вероятностный подход заключается в том, чтобы разместить процесс дирихлера перед распределением смесей и оценить некоторым байесовским методом. Например, см. Эта статья о бесконечных моделях смеси гаусса. Анкет Модель смеси DP даст вам вывод о количестве компонентов и компонентов, к которым принадлежат каждое элементы, что именно вы хотите. В качестве альтернативы вы можете выполнить выбор модели по количеству компонентов, но это, как правило, менее элегантно.

Существует много моделей моделей смесей DP, но они могут быть не так удобны. Например, вот Реализация MATLAB.

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

Другие советы

Я думаю, вы ищете что -то вроде Кластеризационный алгоритм K-Means.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top