mech_optimiz  4.4.1
microkinetic mechanism investigation tool
Кластеризация данных

Кластеризация данных - один из метода анализа данных, поиска в них закономерностей.

Если данные многомерны - трудно оценить, как расположены точки в пространстве, образуют ли некоторые группы. Кластеризация помогает выявить сходство и различия в точках данных, разбить данные на группы. Далее, мы устанавливаем, какие признаки позволили произвести данное разбиение, то есть, какие признаки являются определяющими в сходстве и различии индивидуальных точек.

Выбор числа кластеров

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

Вообще, по мере приближение k к числу экспериментальных точек, средний силуэт растет. Но мы должны выбрать такое k, которое много меньше, чем число экспериментальных точек (когда в каждом кластере находится значительное число точек, тогда можно говорить о закономерностях в данных, о наличии кластеров).

Пример, который дан ниже по ссылке, наглядно это демонстрирует. Число кластеров (по правилу максимального силуэта) в данном случае: 2 (а не 148/149) Кластеризация 150 точек

Как же выбрать число кластеров?
Существует множество методов выбора числа кластеров, наиболее эффективные представлены ниже
  1. Расчет зазора ("gap") [12]
  2. Расчет функции оценки ("evaluation function") [7]
  3. Расчет силуэта ("silhouette") [9]

Мы используем метод 3, то есть, выбираем такое число кластеров, которое дает максимальный средний силуэт кластеров. Данный алгоритм выбора числа кластеров также хорошо описан в Wikipedia.

Кроме того, mech_optimiz имеет некоторые возможности выявления, какие параметры являются шумом в данных и лишь мешают правильной кластеризации. Для этого в mech_optimiz реализован подход Lleti и др. [6] поиска набора параметров, соответствующих максимальному среднему силуэту, поиск выполняется с помощью генетического алгоритма. Мы усовершенствовали этот подход, одновременно позволив подбирать еще один параметр - число кластеров. Таким образом, можно достичь оптимальной кластеризации, как по числу кластеров, так и по числу содержательных (несущих информацию о сходстве/различии) параметрах одновременно.

Сама кластеризация выполняется с помощью алгоритма k-means++ [1] (ссылка), который представляет собой расширение k-means. Конкретно, k-means выбор точек, используемых в качестве начальных центроидов кластеров, производится из числа точек данных случайным образом. В k-means++ выбор начальных центроидов производится не случайным образом (так выбирается только первая точка), а в соответствии с взвешенным распределением вероятности, где в качестве веса используется расстояние от точки до ближайшего центроида.

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

В зависимости от количества кластеров, получаем разные результаты кластеризации. mech_optimiz кластеризует данные в 2..N-1 кластеров, где N - число точек данных. Кластеризация повторяется для каждого числа кластеров автоматически 10 раз. Наилучшая кластеризация используется как итоговая для данного числа кластеров. Результаты кластеризации сохраняются в текущей папке, что позволяет визуализировать выбранную кластеризацию позднее с помощью утилиты plotCL.sh. Повторы кластеризации нумеруются от 0 до 9. Если новая итерация (повтор) дает лучший средний силуэт, чем предыдущие, информация о предыдущих итерациях удаляется с диска. Таким образом, наименьший номер повтора в файлах в текущей директории соответствует наилучшей кластеризации (странная функциональность, пока не исправлена - октябрь 2015).

Информация о силуэтах для разного числа кластеров сохраняется в файле K-номер_итерации_ГА-номер_особи_ГА-silhouettes.txt Сами кластеры (координаты центров, а затем список точек с указанием в последнем столбце номера кластера, которому принадлежит точка) сохраняются в файлы K-номер_итерации_ГА-номер_особи_ГА.txt Если в кластеризации участвуют все параметры, то создается файл K-номер_итерации_ГА-full.txt Этот файл будет создан в случае, если особи ГА статичны, то есть мы не ищем с помощью ГА, какие параметры следует включить в кластеризацию, а выполняется обычная кластеризация точек с учетом всех параметров (измерений данных, столбцов). Решение прямых задач

Пример "Кластеризация 150 точек", представленный выше, содержит результаты кластеризации ирисов Фишера с помощью подхода максимального силуэта кластеров. Результаты показывают, что в ирисах Фишера содержится 2 кластера, то есть, два сорта цветов. Это известная проблема указанного набора данных при кластеризации. На самом деле, набор содержит данные о 3 сортах цветов. Однако для 3 кластеров, алгоритм k-means++ верно распределяет образцы по сортам.
Алгоритм вычисления среднего силуэта также реализован в Matlab, где могут получены аналогичные результаты (Matlab clustering example)
resultIRIS.txt - 2 кластера, получено с помощью mech_optimiz (ирисы Фишера)
data1.txt - Данные с ирисами, подготовленные для mech_optimiz (data1_ml.txt - для MLPACK Wikipedia.)
resultIRIS2.txt - кластеризация ирисов Фишера по 3-м кластерам, mech_optimiz
data1_mlpack_clust.txt - результаты, полученные с помощью MLPACK
data3.txt - другой набор данных Ruspini [10].
resultRUSPINI.txt - Ruspini data with mech_optimiz

Для получения картинок и видео результатов кластеризации создан bash-скрипт plotCL.sh. Он принимает на вход 4 аргумента:

  1. Номер итерации генетического алгоритма (ГА)
  2. Число параметров (измерений, столбцов) для кластеризуемых точек данных
  3. Число кластеров.
  4. Номер повтора запуска ГА

Для построения графиков и создания видео нужны временные файлы, созданные программой в текущей директории (обычно - директории запуска mech_optimiz) при кластеризации. Если они удалены, необходимо повторить кластеризацию.

./plotCL.sh 1 4 3 5

  • 1 итерация ГА
  • с 4 параметрами (mech_optimiz использует подход [6] - ГА гены 0/1 для игнорирования/включения параметров (столбцов).
  • 3 кластера
  • 5 - номер повтора (сейчас делается 10 повторов ГА, номера 0..9, для каждой кластеризации в заданное число кластеров. kmsolver выбирает наилучшую кластеризацию, соответствующую максимальному среднему силуэту)