Кластерный анализ 1. Метод ближней связи 1. Подготовка тестовых данных. Подготовьте несколько примеров данных для последующих упражнений. А именно: 1) Набор точек, формирующих два кластера (рис. 1а). Например, это могут быть выборки из двух нормальных распределений с разными средними значениями. (а) (б) Рис. 1. 2) Точки, разбросанные вокруг окружности (см. рис. 1б). 3) Придумайте сами. Результатом должна стать матрица X размером N 2 , ставящая в соответствие каждому из N объектов (точек на плоскости в данных примерах) его параметры (координаты в данном случае). 2. Примеры реальных данных. Приходят в голову: (а) Ирисы Фишера (классика кластерного анализ): см. http://ru.wikipedia.org/wiki/Ирисы_Фишера. Требуется провести кластеризацию и сравнить результат с известной биологической классификацией. (б) Поиск однотипных участков в нестационарном временном ряде типа ЭЭГ. (в) Классификация эпилептических припадков у крыс. (г) Можно накачать с сайта Госкомстата (http://www.gks.ru/dbscripts/Cbsd/) таблиц с разнообразными социально-экономическим показателями регионов России, провести кластеризацию, затем отобразить кластеры регионов на карте разными цветами, например, с помощью открытого API Яндекс.Карт (http://api.yandex.ru/maps/). (д) Можно принять участие в ежегодном студенческом соревновании по анализу данных Data Mining Cup 2010 (http://www.data-mining-cup.de/en/dmc-competition/). Краткое описание задачи: Интернет магазин (http://www.libri.de/) собирает доступную информацию о своих клиентах. Чтобы стимулировать повторные покупки предлагается рассылать клиентам ваучеры, стоимостью 5 евро. Однако слать их всем подряд – не лучшая идея. Возможно, человек захочет сделать следующую покупку и без всякого ваучера. В этом случае магазин теряет 5 евро. Задача состоит в том, чтобы предсказать, сделает ли человек следующую покупку сам или его надо стимулировать. Один из возможных подходов к решению задачи – провести кластеризацию клиентов, а затем выдавать рекомендации по отсылке ваучера в зависимости от принадлежности к тому или иному кластеру. Творческая часть решения при этом сводится к выбору меры расстояния между клиентами. 1 3. Функции, вычисляющие меры расстояния. Создайте функции, вычисляющие различные меры расстояния (евклидово, манхэттенское, супремум-норму она же расстояние Чебышева). Параметрами должны быть номера объектов и матрица X. 4. Вычисление матрицы расстояний. Создайте процедуру, вычисляющую матрицу расстояний. 5. Сортировка элементов матрицы расстояний, построение зависимости расстояния от номера в отсортированном массиве. Возможность задания порогового расстояния. 6. Переход от матрицы расстояний к матрице смежности. 7. Выделение кластеров (односвязных элементов на графе) по матрице смежности. Новый вариант алгоритма (без рекурсии): Для хранения информации о принадлежности точек к кластеру используется одномерный целочисленный массив {Ci }iN01 с числом элементов равным числу точек. Значение i-го элемента массива это номер кластера, к которому принадлежит i-я точка. Для нахождения этого массива делаем следующее: 1) Предполагаем, что каждая точка принадлежит своему собственному кластеру, то есть заполняем массив числами 1, 2, 3, …, N ( Ci i ). 2) Перебираем элементы верхней половины матрицы смежности. Если встречается 1 (пусть это будет элемент с индексами i и j), то это значит, что i-ю и j-ю точки надо отнести к одному кластеру. То есть, если Ci C j , то кластеры C i и C j надо объединить. Для этого смотрим, какой из номеров кластеров больше (например, Ci C j ), и меняем номер в массиве C всем точкам, относящимся к этому кластеру. То есть для всех k, таких что C k Ci , выполняем C k : C j . После выполнения описанной операции в нумерации кластеров образуется пропуск (не будет кластера с номером C i ). Для удобства дальнейшей работы с кластерами этот пропуск лучше устранить. Для этого номера всех кластеров больших C i следует уменьшить на 1. Конец алгоритма. Для удобства дальнейшей работы удобно хранить общее количество кластеров в одной переменной. Для его вычисления на первом шаге делаем это количество равным числу точек. Каждый раз, объединяя кластеры, уменьшайте это количество на 1. 8. Вывод результатов. Для тестовых примеров следует вывести точки в Chart, покрасив их в соответствии с принадлежностью к кластеру. Можно предусмотреть 5-6 цветов для наиболее крупных кластеров, а остальные покрасить серым цветом. После выполнения алгоритма каждый кластер имеет уникальный номер. Для правильной раскраски следует подсчитать, сколько элементов попадает в каждый кластер, а затем перенумеровать кластеры так, чтобы нумерация соответствовала убыванию числа точек. 2