- •Лабораторная работа 1. Кластерный анализ объектов, заданных набором признаков
- •Текущий каталог
- •Средства языка программирования matlab
- •Создание массивов ячеек
- •Визуализация массивов ячеек
- •Управляющие структуры Условный оператор
- •Структура переключателя
- •Циклы типа for...End
- •Диалоговый ввод
- •Функции в matlab(м-функции)
- •Циклы типа while...End
- •Некоторые функции и средства визуализации
- •Иерархические методы кластерного анализа
- •Методы объединения или связи
- •Алгоритм k-средних (k-means)
- •Описание алгоритма
- •С помощью функции fcm
С помощью функции fcm
Дендрограмма
Для иерархического кластерного анализа удобным средством визуализации результатов кластерного анализа является функция dendrogram, которая выводит дерево дендрограммы.
dendrogram(Z,0,'colorthreshold','default') генерирует график дендрограммы иерархического бинарного кластерного дерева Z– матрицы (M-1)х3, сгенерированной функцией linkage где M– число наблюдений в исходном наборе данных.
Дендрограмма содержит линии в форме U, содержащие объекты иерархического дерева.
Высота каждого U представляет расстояние между двумя связанными объектами.
Каждой группе узлов дендрограммы, для которого функция linkage меньше определенного порога, назначается уникальный цвет.
Пример. Покажем результаты иерархического кластерного анализа ирисов Фишера в виде дендрограммы.
load fisheriris;
Y=pdist(meas);
Z = linkage(Y,'complete');
dendrogram(Z,0,'colorthreshold','default');
На рис. можно увидеть 3 кластера
Рис. Дендрограмма для примера
Функция silhouette
silhouette(X,clust, метрика) выводит график матрицы данных X, с кластерами, определенными в векторе clust.
Строки X соответствуют наблюдениям, столбцы соответствуют признакам. clust – числовой вектор, содержащий номер кластера для каждой точки.
Значения метрики:
'Euclidean' эвклидово расстояние
'sqEuclidean' квадратичное эвклидово расстояние (по умолчанию)
'cityblock' расстояние городских кварталов – сумма абсолютных разностей координат
s = silhouette(X,clust, метрика) вычисляет значения силуэта в векторе s, но не выводит график силуэтов.
Значение силуэта каждой точки есть мера ее близости к точкам своего класса в сравнении с мерой близости к точкам других классов и находится в диапазоне от -1 до +1.
Значение силуэта для i- ой точки, Si, определяется по формуле:
Si = (bi-ai)/ max(ai,bi), где ai – среднее расстояние от i- ой точки до других точек того же кластера, а bi - минимальное среднее расстояние от i – ой точки до точек других кластеров.
Пример. Вывод силуэтов для результатов иерархической классификации ирисов Фишера
load fisheriris
Z=linkage(meas,'average');
clust=cluster(Z, 3);
silhouette(meas,clust);
График показан на рис.
Рис. График силуэта для примера
cophenet - расчет коэффициента качества разбиения исходных данных на кластеры (чем его значение ближе к 1, тем лучше выполнено разбиение на кластеры)
c = cophenet(Z,Y) – вычисляет коэффициент качества для иерархического кластерного дерева, представленного переменной Z (выходной переменной функции linkage). Y содержит попарные расстояния (выходная переменная функции pdist).
Коэффициент c определяется формулой:
,
где
Yij – расстояние между объектами i и j в Y;
Zij – расстояние между объектами i и j из Z(:,3).
y и z – среднее из Y и Z(:,3), соответственно.
При выполнении иерархического кластерного анализа нужно подбирать алгоритм в linkage так, чтобы значение коэффициента качества разбиения было максимально.
confusionmat Вычисление матрицы различий
C = confusionmat(индексы фактические, индексы предсказанные) возвращает матрицу отличий C между известными и предсказанными номерами точек. Оба параметра – массивы одной длины и одного типа (целые, строковые). C – квадратная матрица с размерами, равными числу различных элементов в массивов параметров. C(i,j) – это количество наблюдений, которые фактически находятся в кластере i, но предсказаны в кластере j.
Пример. Оценка числа верно классифицированных наблюдений по методу k-means в ирисах Фишера.
load fisheriris
% Классифицирующие значения
for i=1:50
Y(i,1)=1;
end
for i=51:100
Y(i,1)=2;
end
for i=101:150
Y(i,1)=3;
end
Y_t = kmeans(meas,3);
% Вычисление матрицы confusion
C_t = confusionmat(Y,Y_t);
0 0 50
48 2 0
14 36 0
Исходя из этого, можно сказать, что 50 объектов 1 класса отнесены алгоритмом к 3 классу, 48 объектов 2 класса отнесены алгоритмом к 1 классу, 36 объектов 2 класса отнесены алгоритмом ко 2 класса.
Можно сделать пересчет в проценты, используя функцию bsxfun.
C = bsxfun(fun,A,B) применяет поэлементную операцию, определенную функцией fun к массивам A и B. fun может быть одной из встроенных функций:
plus |
Сложение |
minus |
Вычитание |
times |
Умножение |
rdivide |
Деление |
power |
Возведение в степень |
eq |
Равенство |
ne |
Неравенство |
gt |
Больше чем |
ge |
Больше или равно чем |
lt |
Меньше чем |
le |
Меньше или равно чем |
В продолжение примера
% Оценка матрицы confusion для каждого класса в % по отношению к реальной классификации
C_tp = bsxfun(@rdivide,C_t,sum(C_tp,2)) * 100;
