Кластеризация методом K-средних и векторное квантование (scipy.cluster.vq)#

Предоставляет процедуры для k-средних кластеризации, генерации кодовых книг из моделей k-средних и квантования векторов путём сравнения их с центроидами в кодовой книге.

whiten(obs[, check_finite])

Нормализовать группу наблюдений на основе каждого признака.

vq(obs, code_book[, check_finite])

Назначьте коды из кодовой книги наблюдениям.

kmeans(obs, k_or_guess[, iter, thresh, ...])

Выполняет k-средних на наборе векторов наблюдений, формируя k кластеров.

kmeans2(data, k[, iter, thresh, minit, ...])

Классифицирует набор наблюдений в k кластеров с использованием алгоритма k-средних.

Основная информация#

Алгоритм k-средних принимает на вход количество кластеров для генерации, k, и набор векторов наблюдений для кластеризации. Он возвращает набор центроидов, по одному для каждого из k кластеров. Вектор наблюдения классифицируется с номером кластера или индексом центроида ближайшего к нему центроида.

Вектор v принадлежит кластеру i, если он ближе к центроиду i, чем к любому другому центроиду. Если v принадлежит i, мы говорим, что центроид i является доминирующим центроидом для v. Алгоритм k-средних пытается минимизировать искажение, которое определяется как сумма квадратов расстояний между каждым вектором наблюдения и его доминирующим центроидом. Минимизация достигается путем итеративной переклассификации наблюдений в кластеры и пересчета центроидов до достижения конфигурации, в которой центроиды стабильны. Также можно задать максимальное количество итераций.

Поскольку векторное квантование является естественным применением для k-means, часто используется терминология теории информации. Индекс центроида или индекс кластера также называется "кодом", а таблица, сопоставляющая коды с центроидами и наоборот, часто называется "кодовой книгой". Результат k-means, набор центроидов, может быть использован для квантования векторов. Квантование направлено на поиск кодирования векторов, которое уменьшает ожидаемое искажение.

Все процедуры ожидают, что obs будет массивом M на N, где строки являются векторами наблюдений. Кодовая книга — это массив k на N, где i-я строка является центроидом кодового слова i. Векторы наблюдений и центроиды имеют одинаковую размерность признаков.

В качестве примера предположим, что мы хотим сжать 24-битное цветное изображение (каждый пиксель представлен одним байтом для красного, одним для синего и одним для зеленого) перед отправкой по сети. Используя меньшее 8-битное кодирование, мы можем уменьшить объем данных на две трети. В идеале цвета для каждого из 256 возможных 8-битных значений кодирования должны быть выбраны так, чтобы минимизировать искажение цвета. Запуск k-means с k=256 генерирует кодбук из 256 кодов, который заполняет все возможные 8-битные последовательности. Вместо отправки 3-байтового значения для каждого пикселя передается 8-битный индекс центроида (или кодовое слово) доминирующего центроида. Кодбук также отправляется по сети, чтобы каждый 8-битный код можно было преобразовать обратно в 24-битное представление значения пикселя. Если интересующее изображение было изображением океана, мы ожидали бы, что многие 24-битные синие цвета будут представлены 8-битными кодами. Если это было изображение человеческого лица, больше телесных тонов было бы представлено в кодбуке.