Открыть сервис

K-средние

K-средние (англ. k-means) — это один из наиболее популярных и простых алгоритмов кластеризации в машинном обучении и анализе данных. Он относится к методам обучения без учителя и предназначен для разбиения множества объектов (точек данных) на заранее заданное число кластеров \( k \) таким образом, чтобы объекты внутри одного кластера были максимально похожи друг на друга (близки по выбранной метрике), а объекты из разных кластеров — максимально различны. Алгоритм стремится минимизировать сумму квадратов расстояний от каждой точки до центра её кластера (центроида).

История

Алгоритм k-средних был независимо предложен несколькими исследователями в середине XX века. Впервые идея, близкая к современной версии, была описана Хуго Штейнгаузом в 1956 году в контексте задачи оптимального квантования сигнала. В 1957 году Стюарт Ллойд (Bell Labs) разработал алгоритм для импульсно-кодовой модуляции, который фактически является стандартной реализацией k-средних, но его работа долгое время оставалась внутренним отчётом и была опубликована лишь в 1982 году. В 1965 году Э. В. Форги опубликовал метод, который также известен как алгоритм k-средних. Термин «k-средние» (k-means) впервые был использован Джеймсом МакКуином в 1967 году. С тех пор алгоритм стал одним из базовых инструментов в статистике, интеллектуальном анализе данных и машинном обучении.

Описание алгоритма

Исходные данные и цель

На вход алгоритма подаётся набор из \( n \) объектов (точек) в многомерном пространстве признаков и целое число \( k \) — количество кластеров, которое необходимо выделить. Цель — найти такое разбиение множества объектов на \( k \) непересекающихся подмножеств (кластеров) \( S = \{S_1, S_2, \dots, S_k\} \), чтобы минимизировать целевую функцию — сумму квадратов расстояний от каждого объекта до центроида его кластера:

\[ \arg\min_{S} \sum_{i=1}^{k} \sum_{x \in S_i} \| x - \mu_i \|^2 \]

где \( \mu_i \) — центроид (среднее арифметическое) всех точек, принадлежащих кластеру \( S_i \), а \( \| x - \mu_i \| \) — евклидово расстояние (хотя могут использоваться и другие метрики).

Этапы работы (алгоритм Ллойда)

Стандартная реализация алгоритма (алгоритм Ллойда) является итеративной и состоит из следующих шагов:

  1. Инициализация центроидов. Выбираются \( k \) начальных центроидов. Это может делаться случайно (выбор \( k \) точек из исходного набора данных) или с помощью более сложных методов, например, k-means++ (см. раздел «Модификации»).
  2. Назначение точек к кластерам. Для каждого объекта вычисляется расстояние до каждого из \( k \) центроидов. Объект относится к тому кластеру, центроид которого оказался ближайшим.
  3. Пересчёт центроидов. Для каждого из \( k \) кластеров вычисляется новый центроид как среднее арифметическое всех точек, входящих в этот кластер.
  4. Проверка сходимости. Если центроиды изменились (или изменилось разбиение на кластеры) относительно предыдущей итерации, алгоритм возвращается к шагу 2. В противном случае алгоритм завершается.

Сходимость и ограничения

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

Выбор числа кластеров

Одной из ключевых проблем при использовании k-средних является выбор подходящего числа кластеров \( k \). Существует несколько эвристических методов, помогающих определить оптимальное значение:

Модификации и улучшения

k-means++

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

Mini-batch k-means

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

K-medoids (PAM)

Альтернатива k-средних, где центроидом кластера является не среднее арифметическое, а один из реальных объектов (медоид), наиболее центральный в кластере. Это делает алгоритм более устойчивым к выбросам, но и более вычислительно затратным.

Kernel k-means

Модификация, позволяющая выделять кластеры нелинейной формы. Данные с помощью ядровой функции (kernel trick) отображаются в пространство более высокой размерности, где кластеры становятся линейно разделимыми, после чего применяется стандартный алгоритм k-средних.

Применение

Благодаря своей простоте, скорости и масштабируемости, k-средние широко применяется в различных областях:

Критика и ограничения

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →