Этот пример показывает, как идентифицировать кластеры в данных радужной оболочки глаза Фишера.
Загрузите набор данных радужки Фишера.
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
The 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