DEV//UNIT

k-means

Кластеризация без учителя: центроиды притягивают точки, точки перетягивают центроиды.

время O(итераций · n · k)память O(n + k)уровень: средний
Что происходит сейчас0/0
Нажмите Play, чтобы запустить сценарий
TypeScript — активная строка подсвечена шагом
1function kMeans(pts: Array<[x: number, y: number]>, k: number, iters: number) {
2 let centroids = pts.slice(0, k) // первые k точек как старт
3
4 for (let it = 0; it < iters; it++) {
5 // 1. назначение: каждая точка к ближайшему центроиду
6 const assign = pts.map((p) =>
7 argmin(centroids, (c) => dist2(p, c)),
8 )
9
10 // 2. пересчёт: центроид = среднее своих точек
11 centroids = range(k).map((c) => {
12 const mine = pts.filter((_, i) => assign[i] === c)
13 return avg(mine)
14 })
15 }
16
17 return { centroids }
18}

Проблема

Кластеризация без учителя: центроиды притягивают точки, точки перетягивают центроиды.

Что вы видите

Каждая точка приписывается ближайшему центроиду; центроид = среднее своих точек; повторять до сходимости.

Как это работает

Минимизирует сумму квадратов расстояний до центроидов. Чувствителен к старту (k-means++ решает), k выбирается заранее. Рабочая лошадка кластеризации.

Пошаговый разбор

  1. 01

    Назначение

    Точка → ближайший центроид.

  2. 02

    Пересчёт

    Центроид = среднее.

  3. 03

    Сходимость

    Назначения стабильны.

Complexity и ограничения

time
O(итераций · n · k)
space
O(n + k)

Сложность см. в шапке страницы.

Edge cases

  • Пустой вход

    Корректная тривиальная обработка.

  • Вырожденный случай

    Минимум работы — сразу ответ.

Где встречается в реальности

Маркетинг

Сегментация клиентов.

Изображения

Квантование цветов (палитры).

Новости

Группировка тематик.

Связанные алгоритмы

Shorts

«Разложить по кучкам без учителя: k-means»

Тот же сценарий StepSequence в вертикальной композиции — с safe zones и записью WebM ниже на странице.

Shorts 9:16

Вертикальная композиция строится той же последовательностью шагов, что и страница: safe zones отмечены пунктиром (там живёт UI платформ), биты сценария подсвечиваются по прогрессу. Кнопка записи сохраняет WebM — детерминированная StepSequence даёт воспроизводимый ролик без монтажа.

Разложить по кучкам без учителя: k-means
Нажмите Play
Бит 1/6 · 0–2 с
Hook
script-setup.ru/algorithms/k-means