Оценка кластеров

Этот пример показывает, как идентифицировать кластеры в данных радужной оболочки глаза Фишера.

Загрузите набор данных радужки Фишера.

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)

Figure contains an axes. The axes contains 2 objects of type line.

Большинство алгоритмов кластеризации нуждаются в предварительных знаниях о количестве кластеров. Когда эта информация не доступна, используйте методы оценки кластера, чтобы определить количество кластеров, присутствующих в данных, на основе заданной метрики.

Три кластера согласуются с тремя видами, содержащимися в данных.

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

Figure contains an axes. The axes contains 3 objects of type line. These objects represent setosa, versicolor, virginica.

См. также

|