K-означает не алгоритм кластеризации на основе расстояния .
K-означает поиск минимальной суммы назначения квадратов , то есть он минимизирует ненормализованную дисперсию (= total_SS
), назначая точки центрам кластеров.
Для того чтобы k-средства сходились, вам нужны два условия:
- переназначение точек уменьшает сумму квадратов
- пересчет среднего уменьшает сумму квадратов
Поскольку существует только конечное число комбинаций, вы не можете бесконечно уменьшать это значение, и алгоритм должен в какой-то момент сходиться к локальному оптимуму.
Всякий раз, когда вы намереваетесь изменить функции присваивания, вы рискуете сделать так, чтобы алгоритм больше не прерывался, как собака, преследующая свой собственный хвост. По сути, оба шага должны согласовать целевую функцию. Мы знаем, что среднее арифметическое является оптимальным выбором по сумме квадратов . И для первого шага мы можем просто вычислить для каждого среднего и выбрать тот, который минимален. Технически здесь нет вычисления расстояния . Математически назначение по наименьшей сумме квадратов равно назначению по евклидову расстоянию с замкнутым квадратом, которое (если вы тратите циклы ЦП на вычисления ) равно минимальному евклидовому расстоянию. Итак, интуиция jΣя( хя- μJ я)2Jsqrt
назначение каждой точки ближайшему среднему является правильным, но не то, что делает проблема оптимизации.
between_SS
Вероятно, это взвешенная сумма квадратов между двумя средними, чтобы измерить, насколько хорошо центры кластеров разделены (примечание: центры кластеров не сравнивают фактические кластеры - технически, кластерная ячейка Вороного касается соседних кластерных ячеек Вороной).
Обратите внимание, что с помощью k-средних вы можете улучшить качество наивной кластеризации, увеличив k. Измеренное здесь качество является математическим значением, которое может не соответствовать требованиям пользователей. Радужная оболочка на самом деле является довольно хорошим примером, где k-means часто сходится к менее чем удовлетворительным результатам, даже учитывая внешнюю информацию, что должно быть ровно 3 кластера.
Если вы хотите основанное на расстоянии изменение k-средних , посмотрите на k-medoids . Здесь сходимость обеспечивается путем замены среднего значения на медоид:
- Каждый объект назначается ближайшему кластеру (по произвольной дистанции)
- Центр кластера обновляется до самого центрального объекта кластера, то есть с наименьшим средним расстоянием до всех остальных.
На каждом шаге сумма расстояний уменьшается; существует конечное число комбинаций, поэтому алгоритм должен завершаться на некотором локальном минимуме.