Кластеризация методом K-средних и векторное квантование (scipy.cluster.vq)#
Предоставляет процедуры для k-средних кластеризации, генерации кодовых книг из моделей k-средних и квантования векторов путём сравнения их с центроидами в кодовой книге.
|
Нормализовать группу наблюдений на основе каждого признака. |
|
Назначьте коды из кодовой книги наблюдениям. |
|
Выполняет k-средних на наборе векторов наблюдений, формируя k кластеров. |
|
Классифицирует набор наблюдений в 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-битными кодами. Если это было изображение человеческого лица, больше телесных тонов было бы представлено в кодбуке.