cluster

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

Описание

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');

Figure contains an axes. The axes with title Randomly Generated Data contains an object of type scatter.

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

Z = linkage(X,'ward');

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

dendrogram(Z)

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

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

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

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

Figure contains an axes. The axes contains 2 objects of type line. These objects represent 1, 2.

cluster определяет два кластера в данных.

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

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

load fisheriris

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

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

Figure contains an axes. The axes with title Actual Clusters of Fisher's Iris Data contains 3 objects of type line. These objects represent setosa, versicolor, virginica.

Создайте иерархическое дерево кластеров с помощью '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.

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

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

Figure contains an axes. The axes with title Cluster Assignments of Fisher's Iris Data contains 3 objects of type line. These objects represent 1, 2, 3.

Кластеризация правильно определяет класс 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)

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

Отображение последних двух строк 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)

Figure contains an axes. The axes contains an object of type scatter.

cluster определяет четыре группы в данных.

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

свернуть все

Агломеративное иерархическое дерево кластера, которое является выходом linkage функция, заданная как числовая матрица. Для матрицы входных данных X с m строками (или наблюдениями), linkage возвращает (m - 1) -на-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) -на-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