Взгляните на фото .. так выглядит бардак.. после того как дочка поиграла и бросила на полу в своей комнате вещи. При виде такого безобразия, ей тут же прилетает задача прибраться в комнате, а это значит что ей нужно произвести кластеризацию вещей по признаку, то есть игрушки отнести в одну группу, книжки– в другую, а карандаши в третью и т.д., чтобы затем убрать все на свои места.
Признак, по которому мы собираем одни предметы в одну группу, а другие в другую, называется метрикой. Грубо говоря, метрика – это просто способ отделить один предмет от другого. Самый распространненый вариант – это когда метрикой является расстояние.
Кластеризация (деление на кластеры) может быть и немного другой. Например, если поставить задачу разделить все вещи на четыре кучи (кластера), то при этом наверняка игрушки попадут в одну кучу с книжками или карандашами, т.е перемешаются. Такой метод называется алгоритм кластеризации К-средних, то есть мы заранее задаем количество кластеров, а алгоритм сам разделяет объекты на это количество.
Описание алгоритма кластеризации «для чайников»
Описание алгоритма кластеризации
Одно время были книжки из серии «для чайников», и там по-простому говорилось о «сложных материях». Попробую объяснить по-простому, как работает сам алгоритм кластеризации. Он итерационый, то есть повторяется несколько раз, пока не «сойдется». Сходимость в данном случае значит, что с каждой итерацией (повторением вычислений) мы все точнее приближаемся к правильному ответу. А «сошелся» в данном случае значит, что мы нашли правильный ответ или мы очень близко к нему (то есть нашлось число с небольшой погрешностью, на которую мы плюем и топчем ногами).
В данном случае мы будем работать с точками на плоскости размером 20 на 20 (не важно даже каких единиц). Например, дано 50 точек, расположенных случайным образом. Нужно распределить эти точки по кластерам алгоритмом К-средних (или K-means).
Действуем так:
Сначала случайным образом выставляем на этой же плоскости несколько центров кластеров, например 4. Центр кластера называется центроидом. Без начального положения центроидов не удастся запустить алгоритм (увидите, почему). Как их расставить – дело ваше, можно самостоятельно вводить координаты, можно применить еще какой-нибудь алгоритм. Далее начинается вычисление кластеров в цикле. Делается это так:
- Сначала мы «привязываем» каждую точку к тому центроиду, к которому она ближе, т.к. центроид является центром кластера, то можно сказать, что мы относим каждую точку к тому кластеру, к центру которого она ближе.
- Когда все точки привязаны и ни одна от нас не убежала, нужно пересчитать координаты центроидов. Для этого мысленно вписываем весь кластер в прямоугольник и ставим центроид туда, где пересекутся его диагонали (в середину, короче). Квадратики – это центры кластеров. Линии от точек до центров нужны просто для наглядности, чтобы сразу видеть, к какому центру принадлежит точка.
- Повторяем для нового центра действия с шага 1 до тех пор, пока центроиды не перестанут менять своего положения. Если они перестали менять положение, значит алгоритм сошелся и мы теперь крутые перцы. Кстати, как правило алгоритм сходится где-то за 2-6 итераций. Но в теории возможно, что алгоритм не сойдется вообще, поэтому на всякий случай нужно включить в него «защиту» – прервать его после например 30 итераций. Это гарантирует, что программа не зависнет.
Теперь для тех, кто все-таки добрался до этого места и не сбежал, приведу более строгое математическое описание метода и пример расчета.
Описание алгоритма кластеризации
Для выборки данных, содержащей n записей (объектов), задается число кластеров k , которое должно быть сформировано. Затем алгоритм разбивает все объекты выборки на k разделов (k < n), которые и представляют собой кластеры.
Одним из наиболее простых и эффективных алгоритмов кластеризации является алгоритм k-means (Mac-Queen, 1967) или в русскоязычном варианте k-средних (от англ. mean – среднее значение). Он состоит из четырех шагов, но сначала задается число кластеров k, которое должно быть сформировано из объектов исходной выборки.
1. Случайным образом выбирается k записей исходной выборки, которые будут служить начальными центрами кластеров μ. Такие начальные точки, из которых потом «вырастает» кластер, часто называют «семенами» (от англ. seeds – семена, посевы). Каждая такая запись будет представлять собой своего рода «эмбрион» кластера, состоящий только из одного элемента.
2. Для каждого центройда вычислить расстояния до всех точек
Ключевым моментом алгоритма k-means является вычисление на каждой итерации расстояния между записями и центрами кластеров, что необходимо для определения, к какому из кластеров принадлежит данная запись. Правило, по которому производится вычисление расстояния в многомерном пространстве признаков, называется метрикой. Наиболее часто в практических задачах кластеризации используются следующие метрики.
- Евклидово расстояние или метрика L2
Пример. Для лучшего понимания методики воспользуемся геометрической интерпретацией определения, к какому из центров кластеров ближе всего расположена та или иная запись. Границей между двумя кластерами является точка, равноудаленная от четырех центров. Из геометрии известно, что множество точек, равноудаленных от двух точек A и B, будут образовывать прямую, перпендикулярную отрезку AB и пересекающую его по середине. Принцип поиска границ будущих кластеров поясняется с помощью рисунке. Для простоты рассматривается 2-мерный случай, когда пространство признаков содержит всего два измерения (X1,X2). Пусть на первом шаге были отобраны три точки A, B и C. Тогда линия 1, проходящая перпендикулярно отрезку AB через его середину, будет состоять из точек, равноудаленных от точек A и B. Аналогично строится прямая 2 для точек A и C, а также прямая 3 для точек B и C.Используя данные линии можно определить, к какому из центров оказывается ближе та или иная точка.
Однако, такая «геометрическая» интерпретация определения того, в «сферу влияния» какого центра кластера входит та или иная запись, полезна только для лучшего понимания. На практике для этого вычисляется расстояние от каждой записи до каждого центра в многомерном пространстве признаков, и выбирается то «семя», для которого данное расстояние минимально (более подробно это рассмотрено ниже).
Например, если в кластер вошли три записи с наборами признаков , то координаты его центроида будут рассчитываться следующим образом:Затем старый центр кластера смещается в его центроид. На рисунке центры тяжести кластеров представлены в виде крестиков.Таким образом, центроиды становятся новыми центрами кластеров для следующей итерации.
Шаги 3 и 4 повторяются до тех пор, пока выполнение алгоритма не будет прервано либо не будет выполнено условие в соответствии с некоторым критерием сходимости.
Остановка алгоритма производится тогда, когда границы кластеров и расположения центроидов не перестанут изменяться от итерации к итерации, т.е. на каждой итерации в каждом кластере будет оставаться один и тот же набор записей. На практике алгоритм k-means обычно находит набор стабильных кластеров за несколько десятков итераций.
Что касается критерия сходимости, то чаще всего используется критерий суммы квадратов ошибок между центроидом кластера и всеми вошедшими в него записями, т.е.
где — произвольная точка данных, принадлежащая кластеру — центроид данного кластера. Иными словами, алгоритм алгоритм остановится тогда, когда ошибка E достигнет достаточно малого значения.
Одним из основных недостатков, присущих этому алгоритму, является отсутствие четких критериев выбора числа кластеров, целевой функции их инициализации и модификации. Кроме этого, он является очень чувствительным к шумам и аномальным значениям в данных, поскольку они способны значительно повлиять на среднее значение, используемое при вычислении положений центроидов (см. рис. 1-4).
Чтобы снизить влияние таких факторов, как шумы и аномальные значения, иногда на каждой итерации используют не среднее значение признаков, а их медиану. Данная модификация алгоритма называется k-mediods (k-медиан).
Есть встроенная в 1с8 Функция Кластеризации. Я всё никак не дождусь хорошего (практического) примера использования данной функции. Начал было сам двигаться, да не хватило свободного времени и заинтересованности заказчика…
В базе УТ10 хранились в виде свойств географические координаты… Там ещё эпопея была с Широтой/Долготой Торговой точки с форматом Число(14, 11) проблема была — решили. Отображение точек на карте получали…
Оставалось сделать кластеризацию по Координатам и Типам торговых точек (СвойствоОбъектов) обсчитать… И на выходе получить оптимизированный График доставки…
(0) Он интерактивный, то есть повторяется несколько раз, пока не «сойдется».
Думаю, не «интерактивный», а «ИТЕРАТИВНЫЙ». Чаще употребляется «ИТЕРАЦИОННЫЙ».
(2) kapustinag, спасибо .. поправил