Статьи

Кластеризация пространственных данных – k-means и иерархические алгоритмы

ГИС Программирование
Время прочтения: 8 минут
В прошлом посте этой серии мы уже поговорили в общих словах о кластеризации геоданных и обсудили ее основные принципы. Сейчас сделаем следующий шаг — разберем, какие есть основные алгоритмы кластеризации и сравним их между собой.
Для иллюстрации каждого алгоритма рассмотрим пример кластеризации пациентов, выделенных по одной болезни. Наша цель – определить, какой метод лучше подходит, чтобы кластеризовать точки и выделить места скопления заболевших.
Что есть в этой статье:
  • Пара слов о кластеризации
  • Разделительные алгоритмы и их типы
  • Алгоритм кластеризации k-means
  • Работа с k-means с примерами кода на Python
  • Иерархические алгоритмы и их типы
  • Агломеративная кластеризация с примерами кода на Python
Набор данных с точками для кластеризации

Пара слов о кластеризации

Кластеризация — это задача группировки данных таким образом, чтобы данные в одной группе (называемой кластером) были более похожи друг на друга, чем данные из других кластеров.
Алгоритмы кластеризации и заданные входные параметры отвечают за то, как именно данные будут разбиты на кластеры, а значит и за правильность кластеризации.

Три основных типа алгоритмов кластеризации:

  • разделительные – основаны на поэтапном улучшении разбиения исходного набора данных;
  • иерархические – создают иерархию вложенных разбиений;
  • алгоритмы на основе плотности – разбивают объекты на кластеры на основе оценки плотности распределения.
Поговорим подробнее о разделительных и иерархических алгоритмах.

Разделительные алгоритмы и их типы

Разделительные алгоритмы (partition clustering) делят объекты данных на непересекающиеся группы. Ни один объект не может находится в более чем одном кластере, и в каждом кластере должен быть хотя бы один объект.
Разделительные алгоритмы чаще всего используются при работе с большими наборами данных, так как они основаны на несложных вычислениях.

Примеры разделительных алгоритмов:

  • K-means (ниже рассмотрим, как он работает)
  • CLARANS (кластеризация больших приложений на основе рандомизированного поиска)

Где используются разделительные алгоритмы:

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

Алгоритм кластеризации k-means

K-means (или метод k-средних) – один из наиболее популярных методов кластеризации. Он не сильно подходит для пространственных данных, но является простым и важным для понимания.
Например, если данных очень много, использовать другие алгоритмы будет затруднительно, и даже в случае геоданных удобнее применить k-means.

Основная идея метода — итеративное повторение двух шагов:

  • распределение объектов выборки по кластерам;
  • пересчет центров кластеров.

Шаги работы алгоритма кластеризации K-means

  1. В начале работы алгоритма выбираются K случайных центров.
  2. Каждый объект выборки относят к тому кластеру, к центру которого объект оказался ближе.
  3. Далее центры кластеров подсчитывают как среднее арифметическое векторов признаков всех вошедших в этот кластер объектов (то есть центр масс кластера). Центры кластеров обновляются.
  4. Объекты заново перераспределяются по кластерам, а затем можно снова уточнить положение центров.
  5. Процесс продолжается до тех пор, пока центры кластеров не перестанут меняться.

Преимущества алгоритма K-means

  1. Алгоритм k-средних хорошо справляется с задачей кластеризации в случае, когда кластеры линейно разделимы и представляют собой отдельные скопления точек.
  2. Быстрая работа алгоритма.

Недостатки алгоритма K-means

  1. Не гарантируется достижение глобального минимума суммарного квадратичного отклонения V, а только одного из локальных минимумов.
  2. Результат зависит от выбора исходных центров кластеров, их оптимальный выбор неизвестен.
  3. Число кластеров надо знать заранее.

Реализация k-means на примере

Все расчеты проводились в Python с библиотекой sk-learn.
На вход алгоритму k-means необходимо задать гиперпараметр – количество кластеров, на которое будут разбиты данные. Первым шагом необходимо определить это значение. Для этого итерационно запускаем алгоритм с количеством кластеров от 1 до 100 и при этом оптимизируем четыре основные метрики кластеризации (о метриках качества поговорим в следующих статьях).
Функция для подбора гиперпараметра – нужного количества кластеров
На выходе функции получаем датасет с количеством кластеров и значением метрик кластеризации. Берем пять первых значений.
В результате мы получили, что оптимальным количеством будет 10, 40, 55, 45, 30 кластеров.
Оптимальное количество кластеров
Далее переходим к запуску алгоритма.
Для каждого алгоритма кластеризации были написаны функции:
  • Функция, которая принимает на вход данные и список с наилучшим количеством кластеров.
  • В ходе работы функции ко всем точкам из датасета добавляется поле с номером кластера, к которому они были отнесены.
  • Для более понятной визуализации точки с одинаковым значением кластера объединяются в альфа-форму – полигон, который объединяет самые выпуклые точки. Подсчитывается количество точек в каждой альфе-форме. Файлы с альфа-формами сохраняются в формате geojson.
Функция для кластеризации методом k-means
Давайте посмотрим, какие кластеры у нас получились. На выходе получаем столько видов кластеризации, сколько различных гиперапараметров было задано – в нашем случае получили 5 вариаций.
На картах цветовая шкала кластеров зависит от количества точек. Поверх отображены сами точки.
Алгоритм k-means. 30 кластеров.
Алгоритм k-means. 10 кластеров.
Алгоритм k-means. 45 кластеров.
Алгоритм k-means. 55 кластеров.
Алгоритм k-means. 40 кластеров.
Результат – с k-means точки довольно четко группируются на кластеры. Заметно, что при 10 кластерах в одном кластере может быть до двух-трех скоплений точек, что в нашем случае не является правильным. При 20 кластерах таких случаев меньше, и кластеры довольно четко разделены.
Если мы берем еще меньшее деление, видно, что некоторые скопления делятся на два и более частей, что неправильно для нашей задачи. Поэтому лучший вариант, основанный на визуальной составляющей – это 20 кластеров.
На всех примерах заметно, что есть значительная часть точек-выбросов, которые находятся далеко от центра кластера, из-за чего альфа-формы получаются неправильной формы. Этого можно избежать, используя плотностные алгоритмы, которые умеют определять выбросы, или заранее отфильтровать датасет и выявить выбросы.

Иерархические алгоритмы кластеризации

Алгоритмы иерархической кластеризации используются для обнаружения основных закономерностей в наборе данных для проведения статистических исследований.

Типы иерархических алгоритмов кластеризации:

  • Агломеративные (от меньшего к большему) – одиночные объекты постепенно объединяются в кластер.
  • Разделительная кластеризация (от большего к меньшему): все данные собираются в один кластер и далее происходит деление на два, четыре и так далее кластеров.
Источник: https://quantdare.com/hierarchical-clustering/

Принцип работы алгоритма

Для работы этих алгоритмов определяется матрица близости, которая содержит попарные расстояния между всеми объектами. На основании нее происходит объединение или разделение объектов.
Когда в одном кластере более одного объекта, берется среднее расстояние.
После каждой итерации заново рассчитывается матрица близости.

Условия окончания работы алгоритма

Для завершения работы алгоритма можно выбрать одно из условий:
  1. Получено нужное количество кластеров.
  2. Достигнуто определенное условие, связанное с расстоянием между кластерами – например, если оно сильно изменилось с прошлой итерации.
  3. Анализ по дендрограмме. На практике обычно кластеризацию проводят вплоть до одного кластера, включающего в себя всю выборку, а затем анализируют получившуюся иерархическую структуру с помощью дендрограммы.

Пример агломеративной кластеризации

Проведем агломеративную кластеризацию, используя в качестве точки остановки заданное количество кластеров.
Для агломеративной кластеризации тоже сначала рассчитаем оптимальное количество кластеров исходя из метрик кластеризации, как и с методом k-means. Для этого напишем функцию, которая разбивает данные от одного до ста кластеров и сравнивает полученные кластеры по трем метрикам.
Функция для расчета оптимального числа кластеров
Оптимальное количество кластеров: 40, 25, 45, 20 и 35.
Наилучшее число кластеров
Следующий шаг – написать функцию, которая производит кластеризацию с нужными гиперпараметрами.
Функция для агломеративной кластеризации
Как и в k-means, на вход этой функции подается датасет с точками. Далее производится кластеризация. В итоге мы получаем альфа-формы и датасет с точками, которые имеет значение кластеров.
Посмотрим на кластеры, которые у нас получились.
Агломеративная кластеризация. 40 кластеров.
Агломеративная кластеризация. 30 кластеров.
В случае алгомеративной кластеризации наиболее оптимальным числом кластеров мне показалось 30. В этом случае четче всего выделяются скопления точек. Однако, как и в алгоритме k-means, мы видим, что кластеры объединяют даже те точки, которые можно было считать выбросами.
Агломеративная кластеризация. 20 кластеров.
Агломеративная кластеризация. 25 кластеров.
Можно сделать вывод, что методы разбиения и иерархическая кластеризация помогают находить кластеры более-менее ровной формы, а с кластерами нетипичной формы они справляются хуже.
K-means и иерархическая кластеризация отлично справляются с задачей кластеризации компактных и хорошо разделенных кластеров.
В следующем тексте этой серии рассмотрим плотностные алгоритмы, наиболее подходящие для кластеризации пространственных данных. И если вы хотите узнать больше, мы всегда готовы научить вас работе с геоданными в Python и QGIS.
Материал подготовила Анна Пикулева

А еще у нас есть рассылка с лучшими статьями и новостями мира геотехнологий. Собираем все лучшее и отправляем в письме раз в две недели ⭐