Может ли k-означает кластеризацию?

Я хочу знать, может ли алгоритм кластеризации k-mean выполнять классификацию?

Если я сделал простую кластеризацию k-средних.

Предположим, что у меня много данных, я использую k-средние кластеры, затем получаю 2 кластера A, B. и метод вычисления центра тяжести - это евклидово расстояние.

Кластер A на левой стороне.

Кластер B с правой стороны.

Итак, если у меня есть одна новая информация. Что мне делать?

  • Запустите алгоритм кластеризации k-mean снова и может получить, к какому кластеру принадлежат новые данные?

  • Запишите последний центр и используйте эвклидовое расстояние для вычисления, чтобы определить, какие новые данные принадлежат?

  • другой метод?

Ответ 1

Простейшим методом, конечно, является 2., присваивать каждому объекту ближайший центроид (технически использовать квадраты чисел, а не евклидово расстояние, это более корректно для k-средних и экономит вам вычисление sqrt).

Метод 1. является хрупким, поскольку k-средство может дать вам совершенно другое решение; в частности, если он не соответствовал вашим данным в первую очередь (например, слишком высокие размеры, кластеры с разным размером, слишком много кластеров,...)

Однако следующий метод может быть еще более разумным:

3. Обучите реальный классификатор.

Да, вы можете использовать k-средства для создания начального разбиения, тогда предположите, что разделы k-mean могут быть разумными классами (вы действительно должны проверить это в какой-то момент), а затем продолжить, как если бы данные были бы помечены пользователем.

т.е. запускать k-средства, направить SVM на результирующие кластеры. Затем используйте SVM для классификации.

Классификация

k-NN или даже назначение каждого объекта ближайшему центру кластера (вариант 1) можно рассматривать как очень простые классификаторы. Последний является классификатором 1NN, "обученным" только для центроидов кластера.

Ответ 2

Да, мы можем сделать классификацию.

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

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

Существуют структуры данных, которые позволяют более эффективно определять ближайший центроид (например, kd-tree), но приведенное выше является основным идея.

Ответ 3

Если вы уже сделали кластеризацию k-значений на ваших данных, чтобы получить два кластера, вы можете использовать k Ближайшие соседи на новом data point, чтобы узнать, к какому классу принадлежит.

Ответ 4

Если вы проводите анализ в реальном времени, где хотите распознавать новые условия во время использования (или адаптироваться к изменяющейся системе), тогда вы можете выбрать некоторый радиус вокруг центроидов, чтобы решить, начнет ли новый пункт новый кластер или должен быть включенным в существующую. (Это общая потребность в мониторинге данных о заводе, например, где могут потребоваться годы после установки до того, как возникнут некоторые условия эксплуатации.) Если мониторинг в реальном времени - ваш случай, проверьте RTEFC или RTMAC, которые являются эффективными, простыми в режиме реального времени варианты К-сред. RTEFC, в частности, не итеративный. См. http://gregstanleyandassociates.com/whitepapers/BDAC/Clustering/clustering.htm

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