- •Лабораторная работа 1. Кластерный анализ объектов, заданных набором признаков
- •Текущий каталог
- •Средства языка программирования matlab
- •Создание массивов ячеек
- •Визуализация массивов ячеек
- •Управляющие структуры Условный оператор
- •Структура переключателя
- •Циклы типа for...End
- •Циклы типа while...End
- •Диалоговый ввод
- •Функции в matlab(м-функции)
- •Некоторые функции и средства визуализации
- •Иерархические методы кластерного анализа
- •Методы объединения или связи
- •Алгоритм k-средних (k-means)
- •Описание алгоритма
- •С помощью функции fcm
Алгоритм k-средних (k-means)
Наиболее распространен среди неиерархических методов алгоритм k-средних. В отличие от иерархических методов, которые не требуют предварительных предположений относительно числа кластеров, для возможности использования этого метода необходимо иметь гипотезу о наиболее вероятном количестве кластеров.
Алгоритм k-средних строит k кластеров, расположенных на возможно больших расстояниях друг от друга. Основной тип задач, которые решает алгоритм k-средних, - наличие предположений относительно числа кластеров, при этом они должны быть различны настолько, насколько это возможно. Выбор числа k может базироваться на результатах предшествующих исследований, теоретических соображениях или интуиции.
Общая идея алгоритма: заданное фиксированное число k кластеров наблюдения сопоставляются кластерам так, что средние в кластере (для всех переменных) максимально возможно отличаются друг от друга.
Описание алгоритма
Первоначальное распределение объектов по кластерам.
Выбирается число k, и на первом шаге эти точки считаются центрами кластеров. Каждому кластеру соответствует один центр.
Выбор начальных центров может осуществляться следующим образом:
выбор k-наблюдений для максимизации начального расстояния;
случайный выбор k-наблюдений;
выбор первых k-наблюдений.
В результате каждый объект назначен определенному кластеру.
Итеративный процесс.
Вычисляются центры кластеров, которыми затем и далее считаются покоординатные средние кластеров. Объекты опять перераспределяются.
Процесс вычисления центров и перераспределения объектов продолжается до тех пор, пока не выполнено одно из условий:
кластерные центры стабилизировались, т.е. все наблюдения принадлежат кластеру, которому принадлежали до текущей итерации;
число итераций равно максимальному числу итераций.
На рис. приведен пример работы алгоритма k-средних для k, равного двум.
Рис. Пример работы алгоритма k-средних (k=2)
Метод субтрактивной кластеризации. Часто число классов, необходимых для работы любого алгоритма кластеризации, априори является неизвестным. В этом случае целесообразно использовать алгоритм субтрактивной кластеризации. Идея этого метода состоит в том, что каждая точка данных предполагается в качестве центра потенциального кластера, после чего следует вычислить некоторую меру способности каждой точки данных представлять центр кластера. Эта количественная мера основана на оценке плотности точек данных вокруг соответствующего центра кластера.
Данный алгоритм, который является обобщением метода кластеризации Р. Ягера, основан на выполнении следующих действий:
1. Выбрать точку данных с максимальным потенциалом для представления центра первого кластера.
2. Удалить все точки данных в окрестности центра первого кластера, величина которого задается, чтобы определить следующий нечеткий кластер и координаты его центра. Эти две процедуры повторяются до тех пор, пока все точки данных не окажутся внутри окрестностей заданного радиуса искомых центров кластеров.
Задача нечеткой кластеризации. В общем случае задачей нечеткой кластеризации является нахождение нечеткого разбиения или нечеткого покрытия множества элементов исследуемой совокупности, которые образуют структуру нечетких кластеров, присутствующих в рассматриваемых данных.
Постановка задачи нечеткой кластеризации. Исследуемая совокупность данных представляет собой конечное множество элементов Aa1,a2,…,an, которое называется множеством объектов кластеризации. Введем в рассмотрение конечное множество признаков P p1,p2,…,pq.
Предполагается,
что для каждого из объектов кластеризации
некоторым образом измерены все признаки
множества Р. Таким образом, каждому из
элементов ai
A поставлен в соответствие некоторый
вектор, где
-
количественное значение признака pj
P для объекта данных ai
A. Векторы значений признаков
удобно
представить в виде так называемой
матрицы данных D размерности (nq),
каждая строка которой равна значению
вектора
.
Дадим
определение нечеткого покрытия и
нечеткого разбиения нечеткого множества
(НМ). Нечеткое покрытие НМ представляет
собой систему нечетких подмножеств
A)
Ak
|Ak
A
нечеткого множества A, если выполняется
следующее условие:
,
( Ak
B),
то есть объединение всех (или части)
подмножеств из B(A)
совпадает с исходным нечетким множеством
А («покрывает множество А»).
Алгоритм решения задачи нечеткой кластеризации методом нечетких с-средних Один из вариантов конкретизации задачи нечеткого кластерного анализа основан на алгоритме ее решения методом нечетких с-средних. Предполагается, что искомые нечеткие кластеры представляют собой нечеткие множества Ak , образующие нечеткое покрытие исходного множества объектов кластеризации А, для которого выполняется условие:
где
с - общее количество нечетких кластеров
A (k 2,
c)
k
, которое считается предварительно
заданным (c
N, c
1),
-
функция принадлежности.
Далее
для каждого нечеткого кластера вводятся
в рассмотрение так называемые типичные
представители или центры
искомых
нечетких кластеров Ak
, которые
рассчитываются для каждого из нечетких
кластеров и по каждому из признаков по
следующей формуле:
,
где m - некоторый параметр, называемый
экспоненциальным весом и равный
некоторому действительному числу (m>1).
Каждый из центров кластеров представляет
собой вектор
в
некотором q- мерном пространстве.
В качестве целевой функции будем рассматривать сумму квадратов взвешенных отклонений координат объектов кластеризации от центров искомых нечетких кластеров:
Сформулируем
задачу нечеткой кластеризации следующим
образом: для заданных матрицы данных D
, количества нечетких кластеров с (c
N, c
1), параметра m определить матрицу U
значений функций принадлежности объектов
кластеризации ai
A нечетким кластерам Ak
(k
2,
c),
которые доставляют минимум целевой
функции (3) и удовлетворяют ограничениям
(1), (2).
Решение задач классификации с помощью пакета MATLAB
Предварительная оценка числа кластеров
Функция subclust реализует алгоритм субтрактивной кластеризации.
Она имеет следующий формат:
[C]=subclust(X, radii, xBounds, options)
и находит центры кластеров данных |
При этом матрица Х размера MxN содержит данные для кластеризации, каждая строка которой соответствует координатам отдельной точки данных
(M- число наблюдений, N – число признаков).
Параметр radii представляет собой вектор, компоненты которого принимают значения из интервала [0,1] и задают диапазон расчета центров кластеров по каждому из признаков измерений. Если radii скаляр, то это значение применяется ко всем измерениям данных. Наилучшие результаты получаются при значениях radii между 0.2 и 0.5.
Аргумент xBounds представляет собой матрицу размерности 2xN, которая определяет способ отображения матрицы данных Х в некотором единичном гиперкубе. Здесь N - количество рассматриваемых признаков в множестве данных. Если xBounds – пустая матрица или отсутствует, то xBounds по умолчанию - минимальные и максимальные значения по каждому признаку.
Для изменения заданных по умолчанию параметров алгоритма кластеризации может быть использован дополнительный вектор options.
Пример. Рассмотрим решение задачи определения количества кластеров для множества ирисов Фишера размерности 150х4, которые содержатся в файле fisheriris.dat. В этом случае вызов функции субтрактивной кластеризации может быть реализован следующим образом:
load fisheriris;
[C] = subclust(meas,0.4);
kk=size(C,1)
Поскольку для множества данных используется 4 признака, то по каждому из признаков задается радиус окрестности, равный 0.4. Коэффициенты шкалирования для отображения множества данных в единичный гиперкуб получаются на основе минимального и максимального значений данных.
В результате выполнения этого фрагмента команд будет получено количество центров кластеров:
kk = 4
Метод k-среднего
kmeans - Разбиение на k классов по методу среднего.
[IDX, C] = kmeans(X, K) - подразделяет точки в матрице данных X размера MxN на K кластеров. Это разбиение минимизирует сумму расстояний по всем кластерам от центров кластеров. Строки X соответствуют наблюдениям, столбцы соответствуют признакам. По умолчанию kmeans использует квадрат эвклидова расстояния. kmeans возвращает вектор IDX из M элементов, содержащий номера кластеров каждой точки. Кроме того, возвращается положение центров K кластеров в матрице C размера KхN.
[...] = kmeans(...,параметр1,значение1,параметр2,значение2,...) позволяет определить необязательные пары параметр/значение. Имя параметра и возможные значения приведены в таблице.
Таблица. Параметры kmeans
Параметр |
Значение |
|
'distance' |
Измерение расстояние в p-мерном пространстве признаков. kmeans минимизирует по отношению к этому параметру и вычисляет центры кластеров. |
|
|
'sqEuclidean' |
Квадрат эвклидова расстояния (по умолчанию). Каждый центр – это среднее значение точек кластера. |
|
'cityblock' |
Сумма абсолютных разностей. |
Агломеративный иерархический кластерный анализ Это последовательное выполнение трех функций pdist, linkage и cluster или выполнение одной функции clusterdata.
pdist - Расчет парных расстояний между объектами исходного множества данных |
||
Y = pdist(X,метрика) Функция позволяет рассчитать вектор расстояний Y между парами объектов исходного множества данных, заданных матрицей Х. Размерность матрицы Х равна MxN, где M - число наблюдений, N – число признаков. Количество пар расстояний для M объектов, будет определяться по формуле (M-1)M/2.
Входной параметр метрика определяет вид расстояния между объектами исходного множества данных; он задается как строковая переменная. Предусмотрены следующие виды расстояний между объектами (Таблица):
Таблица Значения параметра метрика
Значение параметра метрика |
Метод расчета расстояний между объектами |
'euclidean' |
Евклидово расстояние. Значение по умолчанию. |
'seuclidean' |
Нормализованное евклидово расстояние. |
'cityblock' |
Расстояние по Манхеттену. Определяется как сумма абсолютных величин отклонений по всем измерениям. |
Выходной параметр Y является вектором, содержащим значения парных расстояний между объектами. Число элементов Y равно (M-1)M/2.
linkage –Построение иерархического кластерного дерева
Z = linkage(Y,метод,метрика) выполняет построение кластерного дерева определенным методом с использованием определенной метрики. Входной аргумент Y является вектором расстояний между парами объектов исходной матрицы наблюдений. Это результат функции pdist.
Входной аргумент метод позволяет задать алгоритм кластеризации. Значение входного аргумента метод задается как текстовая строка. Предусмотрены следующие алгоритмы кластеризации (таблица):
Таблица. Значения параметра метод
Значение метода |
Название алгоритма |
'single' |
ближайшее расстояние |
'complete' |
наибольшее расстояние |
'average' |
среднее расстояние |
'centroid' |
центр расстояния масс (имеет смысл, только если расстояние равно ‘euclidean’ |
'median' |
Расстояние взвешенного центра масс, подходит только для евклидовых расстояний |
Z – матрица (M – 1)x3, где M – число наблюдений в исходной матрице X. Столбцы 1 и 2 матрицы Z содержит номера кластеров, связанных в пары для построения бинарного дерева. Листья нумеруются от 1 до M. Листья – это единичные кластеры, из которых строятся все кластеры более высоких уровней. Имеется M-1 кластеров более высокого уровня, которые соответствуют внутренним узлам кластерного дерева. Z(I,3) содержит расстояние между двумя кластерами, объединенными в строке Z(I,:).
cluster – Конструирование кластеров из матрицы, сформированной функцией linkage
T = cluster(Z,'maxclust',n) конструирует максимум n кластеров. Выходная величина T – вектор размера M, содержащий номер кластера для каждого наблюдения.
Z – результат функции linkage
clusterdata конструирование кластеров из данных.
T = clusterdata(X, CUTOFF)
X –матрица размера MxN, где M – число наблюдений и N – число признаков. CUTOFF – максимальное число классов. Выходная величина T – вектор размера M, содержащий номер кластера для каждого наблюдения.
T = clusterdata(X,'параметр1',значение1,'параметр2',значение2,...) позволяет задать больше информации через пары параметр/значение.
Допустимые параметры представлены в таблице:
Параметр |
Значение |
Назначение |
'distance' |
'euclidean'
|
Эвклидово расстояние |
|
'seuclidean'
|
Стандартизованное эвклидово расстояние, деление исходных данных на среднеквадратичное отклонение соответствующих переменных; |
'linkage' |
'single' |
ближайшее расстояние |
|
'complete' |
наибольшее расстояние |
|
'average' |
среднее расстояние |
|
'centroid' |
центр расстояния масс (имеет смысл, только если ‘distance’ равно ‘euclidean’ |
|
'median' |
Расстояние взвешенного центра масс, подходит только для евклидовых расстояний |
'maxclust' |
Целое число |
Максимальное число формируемых кластеров |
fcm – нечеткая кластеризация
[CENTER, U, OBJ_FCN] = fcm(DATA, K) - находит K функций принадлежности кластеров в множестве данных DATA. Это матрица размера MхN, где M – число точек данных и N – число признаков каждой точки. Координаты центра каждого кластера возвращаются в виде строк матрицы CENTER размера KxN. Функция принадлежности (матрица U размера KxM) содержит степень принадлежности каждой точки DATA каждому кластеру. Значения 0 и 1 указывают отсутствие принадлежности и полную принадлежность соответственно. На каждой итерации целевая функция минимизируется для нахождения лучшего положения кластеров, и ее значение возвращается в OBJ_FCN.
Процесс кластеризации останавливается, либо когда достигнуто максимальное число итераций, либо когда целевая функция на двух соседних итерациях отличается на величину, меньшую параметра сходимости.
Пример. Выполнить кластерный анализ ирисов Фишера на 3 кластера.
load fisheriris;
% определение центров кластеров
[center, U, obj_fcm] = fcm( meas, 3);
В окно команд будет выдано:
Iteration count = 1, obj. fcn = 287.962244
Iteration count = 2, obj. fcn = 209.786351
Iteration count = 3, obj. fcn = 152.413859
Iteration count = 4, obj. fcn = 110.073915
Iteration count = 5, obj. fcn = 105.307401
Iteration count = 6, obj. fcn = 102.890536
Iteration count = 7, obj. fcn = 92.963519
Iteration count = 8, obj. fcn = 73.605877
Iteration count = 9, obj. fcn = 65.756885
Iteration count = 10, obj. fcn = 62.920525
Iteration count = 11, obj. fcn = 61.625572
Iteration count = 12, obj. fcn = 61.014753
Iteration count = 13, obj. fcn = 60.731617
Iteration count = 14, obj. fcn = 60.603968
Iteration count = 15, obj. fcn = 60.547820
Iteration count = 16, obj. fcn = 60.523574
Iteration count = 17, obj. fcn = 60.513237
Iteration count = 18, obj. fcn = 60.508868
Iteration count = 19, obj. fcn = 60.507031
Iteration count = 20, obj. fcn = 60.506262
Iteration count = 21, obj. fcn = 60.505940
Iteration count = 22, obj. fcn = 60.505806
Iteration count = 23, obj. fcn = 60.505750
Iteration count = 24, obj. fcn = 60.505727
Iteration count = 25, obj. fcn = 60.505718
Способы визуализации результатов кластеризации и их оценивание
Для многих функций визуализации нужен массив номеров классов для каждого объекта выборки.
Для функций cluster, clusterdata и kmeans такой массив является результатом.
Для функции fcm этот массив можно сформировать.
[center,U,objFcn] = fcm(X,k);
%определение максимальной степени принадлежности % отдельного элемента данных кластеру
maxU = max(U);
% распределение строк матрицы данных между соответствующими %кластерами
for i=1:k
index = find(U(i,:) == maxU)
clust(index)=i;
end
%index – массив номеров объектов i-го класса, для которых значение %функции принадлежности максимально
%clust - массив номеров классов для каждого объекта выборки
Функции scatter/scatter3
scatter рисует двумерный график
scatter(X,Y,S,C) выводит цветные маркеры в положениях, определенных векторами X и Y (которые должны быть одного размера).
S определяет размер каждого маркера. Параметр может быть вектором той же длины, что X и Y или скаляром.
C определяет цвет каждого маркера.
scatter3 рисует трехмерный график
Пример. Вывод результатов нечеткой классификации ирисов Фишера и центров кластеров
load fisheriris
[center,U,obj_fcm]=fcm(meas, 3);
maxU=max(U);
ptsymb = {'bs','r+','go','c+'};
for i = 1:3
% формирование массива номеров точек кластера
index = find(U(i,:) == maxU);
clust(index)=i;
end
% Вывод трехмерного графика точек кластера одним цветом
scatter3(meas(:,1),meas(:,3),meas(:,4),30,clust,'filled');
hold on
% Вывод центров кластеров
for i=1:3
scatter3(center(i,1),center(i,3),center(i,4),100,'ko','filled');
end
grid on
Результат показан на рис.
Рис. Вывод результатов кластерного анализа
