кластер

Создайте агломерационные кластеры из связей

Синтаксис

T = cluster(Z,'Cutoff',C)
T = cluster(Z,'Cutoff',C,'Depth',D)
T = cluster(Z,'Cutoff',C,'Criterion',criterion)
T = cluster(Z,'MaxClust',N)

Описание

T = cluster(Z,'Cutoff',C) задает кластеры от агломерационного иерархического кластерного древовидного Z. Входом Z является вывод функции linkage для матрицы входных данных X. cluster сокращает Z в кластеры, с помощью C в качестве порога для коэффициентов несоответствия (или значения inconsistent) узлов в дереве. Вывод T содержит кластерные присвоения каждого наблюдения (строка X).

пример

T = cluster(Z,'Cutoff',C,'Depth',D) оценивает значения inconsistent, смотря на глубину D ниже каждого узла.

пример

T = cluster(Z,'Cutoff',C,'Criterion',criterion) использование или 'inconsistent' (значение по умолчанию) или 'distance' как criterion для определения кластеров. criterion должен быть меньше, чем C для cluster, чтобы задать кластеры.

пример

T = cluster(Z,'MaxClust',N) задает максимум кластеров N с помощью 'distance' в качестве критерия определения кластеров.

Примеры

свернуть все

Выполните агломерационную кластеризацию на случайным образом сгенерированных данных путем оценки противоречивых значений на глубину четыре ниже каждого узла.

Случайным образом сгенерируйте выборочные данные.

rng('default'); % For reproducibility
X = [(randn(20,2)*0.75)+1;
    (randn(20,2)*0.25)-1];

Создайте график рассеивания данных.

scatter(X(:,1),X(:,2));
title('Randomly Generated Data');

Создайте иерархическое кластерное дерево с помощью метода связи ward.

Z = linkage(X,'ward');

Создайте график данных древовидной схемы.

dendrogram(Z)

График рассеивания и график древовидной схемы, кажется, показывают два кластера в данных.

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

T = cluster(Z,'cutoff',3,'Depth',4);
gscatter(X(:,1),X(:,2),T)

cluster идентифицирует два кластера в данных.

Выполните агломерационную кластеризацию на наборе данных fisheriris с помощью 'distance' в качестве критерия определения кластеров. Визуализируйте кластерные присвоения данных.

Загрузите набор данных fisheriris.

load fisheriris

Визуализируйте 2D график рассеивания разновидностей использования данных как группирующая переменная. Задайте цвета маркера и символы маркера для трех различных разновидностей.

gscatter(meas(:,1),meas(:,2),species,'rgb','do*')
title("Actual Clusters of Fisher's Iris Data")

Создайте иерархическое кластерное дерево с помощью метода 'average' и метрики 'chebychev'.

Z = linkage(meas,'average','chebychev');

Кластеризируйте данные с помощью порога 1,5 для критерия 'distance'.

T = cluster(Z,'cutoff',1.5,'Criterion','distance')
T = 150×1

     2
     2
     2
     2
     2
     2
     2
     2
     2
     2
      ⋮

T содержит числа, которые соответствуют кластерным присвоениям. Найдите количество классов, которые идентифицирует cluster.

length(unique(T))
ans = 3

cluster идентифицирует три класса для заданных значений cutoff и Criterion.

Визуализируйте 2D график рассеивания кластеризирующихся результатов с помощью T в качестве группирующей переменной. Задайте цвета маркера и символы маркера для трех различных классов.

gscatter(meas(:,1),meas(:,2),T,'rgb','do*')
title("Cluster Assignments of Fisher's Iris Data")

Кластеризация правильно идентифицирует setosa класс (класс 2) как принадлежащий отличному кластеру, но плохо различает versicolor и virginica классы (классы 1 и 3, соответственно). Обратите внимание на то, что график рассеивания маркирует классы с помощью чисел, содержавшихся в T.

Найдите максимум трех кластеров в наборе данных fisheriris и сравните кластерные присвоения цветов к их известной классификации.

Загрузите выборочные данные.

load fisheriris

Создайте иерархическое кластерное дерево с помощью метода 'average' и метрики 'chebychev'.

Z = linkage(meas,'average','chebychev');

Найдите максимум трех кластеров в данных.

T = cluster(Z,'maxclust',3);

Создайте график древовидной схемы Z. Чтобы видеть эти три кластера, используйте 'ColorThreshold' с сокращением на полпути между третьими последними и предпредпоследними связями.

cutoff = median([Z(end-2,3) Z(end-1,3)]);
dendrogram(Z,'ColorThreshold',cutoff)

Отобразите последние две строки Z, чтобы видеть, как эти три кластера объединены в один. linkage комбинирует 293-й (синий) кластер с 297-м (красным) кластером, чтобы сформировать 298-й кластер со связью 1.7583. linkage затем комбинирует 296-й (зеленый) кластер с 298-м кластером.

lastTwo = Z(end-1:end,:)
lastTwo = 2×3

  293.0000  297.0000    1.7583
  296.0000  298.0000    3.4445

Смотрите, как кластерные присвоения соответствуют трем разновидностям. Например, один из кластеров содержит цветы 50 вторых разновидностей и цветы 40 третьих разновидностей.

crosstab(T,species)
ans = 3×3

     0     0    10
     0    50    40
    50     0     0

Случайным образом сгенерируйте выборочные данные с 20 000 наблюдений.

rng('default') % For reproducibility
X = rand(20000,3);

Создайте иерархическое кластерное дерево с помощью метода связи ward. В этом случае опция 'SaveMemory' функции clusterdata установлена в 'on' по умолчанию. В целом задайте оптимальное значение для 'SaveMemory' на основе размерностей X и доступной памяти.

Z = linkage(X,'ward');

Кластеризируйте данные максимум в четырех групп и постройте результат.

c = cluster(Z,'Maxclust',4);
scatter3(X(:,1),X(:,2),X(:,3),10,c)

cluster идентифицирует четыре группы в данных.

Входные параметры

свернуть все

Агломерационное иерархическое кластерное дерево, которое является выводом функции linkage, заданной как числовая матрица. Для матрицы входных данных X со строками m (или наблюдения), linkage возвращается (m – 1)-by-3 матричный Z. Для объяснения того, как linkage создает кластерное дерево, смотрите Z.

Пример: Z = linkage(X), где X является матрицей входных данных

Типы данных: single | double

Порог для определения кластеров, заданных как положительная скалярная величина или вектор положительных скалярных величин. cluster использует C в качестве порога или для высот или для коэффициентов несоответствия узлов, в зависимости от criterion для определения кластеров в иерархическом кластерном дереве.

  • Если критерием определения кластеров является 'distance', то cluster группирует все листы в или ниже узла в кластер, при условии, что высота узла является меньше, чем C.

  • Если критерием определения кластеров является 'inconsistent', то значения inconsistent узла и всех его подузлов должны быть меньше, чем C для cluster, чтобы сгруппировать их в кластер. cluster начинается с корня кластерного древовидного Z и уходит через дерево, пока это не сталкивается с узлом, значение inconsistent которого является меньше, чем порог C, и чьи подузлы (или потомки) имеют противоречивые значения меньше, чем C. Затем cluster группирует все листы в или ниже узла в кластер (или одиночный элемент, если сам узел является листом). cluster следует за каждым ответвлением в дереве, пока все вершины не находятся в кластерах.

Пример: cluster(Z,'Cutoff',0.5)

Типы данных: single | double

Глубина для вычисления противоречивых значений, заданных в виде числа. cluster оценивает противоречивые значения, смотря на глубину D ниже каждого узла.

Пример: cluster(Z,'Cutoff',0.5,'Depth',3)

Типы данных: single | double

Критерий определения кластеров, заданных как 'inconsistent' или 'distance'.

Если критерием определения кластеров является 'distance', то cluster группирует все листы в или ниже узла в кластер (или одиночный элемент, если сам узел является листом), при условии, что высота узла является меньше, чем C. Высота узла в дереве представляет расстояние между двумя подузлами, которые объединены в том узле. Определение 'distance' приводит к кластерам, которые соответствуют горизонтальному срезу графика dendrogram Z.

Если критерием определения кластеров является 'inconsistent', то cluster группирует узел и все его подузлы в кластер, при условии, что коэффициенты несоответствия (или значения inconsistent) узла и подузлов являются меньше, чем C. Определение 'inconsistent' эквивалентно cluster(Z,'Cutoff',C).

Пример: cluster(Z,'Cutoff',0.5,'Criterion','distance')

Типы данных: char | string

Максимальное количество кластеров, чтобы сформироваться, заданный как положительное целое число или вектор положительных целых чисел. cluster создает максимум кластеров N, с помощью 'distance' в качестве критерия определения кластеров. Высота каждого узла в дереве представляет расстояние между этими двумя подузлами, объединенными в том узле. cluster находит наименьшую высоту, на которой горизонталь прорубила дерево, оставит N или меньше кластеров. Смотрите Задают Произвольные Кластеры для получения дополнительной информации.

Пример: cluster(Z,'MaxClust',5)

Типы данных: single | double

Выходные аргументы

свернуть все

Кластерное присвоение, возвращенное как числовой вектор или матрица. Для (m – 1)-by-3 иерархический кластерный древовидный Z (вывод linkage, данного вход X), T содержит кластерные присвоения строк m (наблюдения) за X.

Размер T зависит от соответствующего размера C или N.

  • Если C является положительной скалярной величиной, то T является вектором длины m.

  • Если N является положительным целым числом, то T является вектором длины m.

  • Если C является длиной вектор l положительных скалярных величин, то T является m-by-l матрица с одним столбцом на значение в C.

  • Если N является длиной вектор l положительных целых чисел, то T является m-by-l матрица с одним столбцом на значение в N.

Альтернативная функциональность

Если у вас есть матрица входных данных X, можно использовать clusterdata, чтобы выполнить агломерационную кластеризацию и возвратить кластерные индексы для каждого наблюдения (строка) в X. Функция clusterdata выполняет все необходимые шаги для вас, таким образом, вы не должны выполнять pdist, linkage, и cluster функционирует отдельно.

Представлено до R2006a