В этом примере показано, как идентифицировать кластеры в данных радужки Фишера.
Загрузите набор данных радужки Фишера.
load fisheriris
X = meas;
y = categorical(species);X - числовая матрица, содержащая два измерения лепестка для 150 ирисов. Y - клеточный массив символьных векторов, который содержит соответствующие виды радужки.
Вычислите несколько кластеров от 1 до 10.
eva = evalclusters(X,'kmeans','CalinskiHarabasz','KList',1:10)
eva =
CalinskiHarabaszEvaluation with properties:
NumObservations: 150
InspectedK: [1 2 3 4 5 6 7 8 9 10]
CriterionValues: [1x10 double]
OptimalK: 1
OptimalK значение указывает, что на основе критерия Калински-Харабаша оптимальное число кластеров равно трем.
Визуализировать eva для просмотра результатов для каждого числа кластеров.
plot(eva)

Большинство алгоритмов кластеризации нуждаются в предварительном знании количества кластеров. Когда эта информация недоступна, используйте методы кластерной оценки, чтобы определить количество кластеров, присутствующих в данных, на основе заданной метрики.
Три кластера согласуются с тремя видами в данных.
categories(y)
ans = 3x1 cell
{'setosa' }
{'versicolor'}
{'virginica' }
Вычислите неотрицательное ранговое приближение данных для целей визуализации.
Xred = nnmf(X,2);
Исходные элементы сводятся к двум элементам. Поскольку ни один из элементов не является отрицательным, nnmf также гарантирует неотрицательность элементов.
Подтвердите три кластера визуально, используя график рассеяния.
gscatter(Xred(:,1),Xred(:,2),y) xlabel('Column 1') ylabel('Column 2') grid on
