В этом примере показано, как идентифицировать кластеры в ирисовых данных Фишера.
Загрузите ирисовый набор данных Фишера.
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: [NaN 513.9245 561.6278 530.4871 456.1279 469.5068 ... ] OptimalK: 3
OptimalK
значение указывает, что на основе критерия Calinski-Harabasz оптимальное количество кластеров равняется трем.
Визуализируйте 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