Итак, используя грубый алгоритм, мы разбили вершины на некоторые начальные кластеры.
Если качество кластеризации на данном этапе нас не устроило, можно проделать следующие дополнительные действия.
Первым делом определить критерий оптимальности. Пусть это будет сумма расстояний от вершин до центра кластера, где центр кластера находится как среднее арифметическое координат вершин кластера.
Проще говоря, у "хорошего" кластера все вершины будут рядом с его центром.
- Для каждого кластера G1:
-- Найти центр C1 кластера G1.
-- Для каждой вершины V1 кластера G1:
--- Для каждого кластера G2, не равного G1:
---- Найти центр C2 кластера G2.
---- Найти в кластере G2 вершину, ближайшую к C1. Пусть это будет вершина V2.
---- Проверить, как изменится критерий оптимальности для G1 и G2 (с помощью C1 и C2), если V1 включить в G2, а V2 включить в G1. Если стало лучше, то меняем вершины и начинаем всё заново.
Таким образом, те вершинки, который грубый алгоритм отнес к неправильным кластерам, неспешно переползут в нужные кластеры.
Если я, конечно, не ошибаюсь :)