clusterdata

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

Описание

пример

T = clusterdata(X,cutoff) возвращает индексы кластера для каждого наблюдения (строки) матрицы входных данных X, учитывая пороговое значение cutoff для вырезания агломеративного иерархического дерева, которое linkage функция генерирует из X.

clusterdata поддерживает агломеративную кластеризацию и включает в себя pdist, linkage, и cluster функций, которые можно использовать отдельно для более детального анализа. Для получения дополнительной информации смотрите Описание алгоритма.

пример

T = clusterdata(X,Name,Value) задает опции кластеризации, используя один или несколько аргументы пары "имя-значение". Необходимо указать любой из Cutoff или MaxClust. Для примера задайте 'MaxClust',5 найти максимум пять кластеров.

Примеры

свернуть все

Найдите и визуализируйте максимум три кластера в случайным образом сгенерированном наборе данных с помощью двух различных подходов:

  1. Задайте значение для cutoff входной параметр.

  2. Задайте значение для 'MaxClust' аргумент пары "имя-значение".

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

rng('default');  % For reproducibility
X = [gallery('uniformdata',[10 3],12); ...
    gallery('uniformdata',[10 3],13)+1.2; ...
    gallery('uniformdata',[10 3],14)+2.5];
y = [ones(10,1);2*(ones(10,1));3*(ones(10,1))]; % Actual classes

Создайте график поля точек данных.

scatter3(X(:,1),X(:,2),X(:,3),100,y,'filled')
title('Randomly Generated Data in Three Clusters');

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

Найдите в данных максимум три кластера путем определения значения 3 для cutoff входной параметр.

T1 = clusterdata(X,3);

Потому что значение cutoff больше 2, clusterdata интерпретирует cutoff как максимальное количество кластеров.

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

scatter3(X(:,1),X(:,2),X(:,3),100,T1,'filled')
title('Result of Clustering');

Figure contains an axes. The axes with title Result of Clustering contains an object of type scatter.

Найдите максимум три кластера с помощью значения 3 для 'MaxClust' аргумент пары "имя-значение".

T2 = clusterdata(X,'Maxclust',3); 

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

scatter3(X(:,1),X(:,2),X(:,3),100,T2,'filled')
title('Result of Clustering');

Figure contains an axes. The axes with title Result of Clustering contains an object of type scatter.

Используя оба подхода, clusterdata определяет три различных кластера в данных.

Создайте иерархическое дерево кластеров и найдите кластеры за один шаг. Визуализируйте кластеры с помощью 3-D точечные графики.

Создайте матрицу 20 000 на 3 выборочных данных, сгенерированных из стандартного равномерного распределения.

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

Найдите максимум четыре кластера в иерархическом дереве кластеров, созданном с помощью ward СПОСОБ редактирования. Задайте 'SaveMemory' как 'on' чтобы создать кластеры, не вычисляя матрицу расстояний. В противном случае вы можете получить ошибку нехватки памяти, если вашей машине не хватает памяти, чтобы удерживать матрицу расстояния.

T = clusterdata(X,'Linkage','ward','SaveMemory','on','Maxclust',4);

Постройте график данных с каждым кластером, показанным в другом цвете.

scatter3(X(:,1),X(:,2),X(:,3),10,T)

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

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

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

свернуть все

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

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

Порог для сокращения иерархического дерева, заданное как linkage, заданный как положительная скалярная величина между 0 и 2 или положительное целое число ≥ 2. clusterdata ведет себя по-разному в зависимости от значения, заданного для cutoff.

  • Если 0 < cutoff < 2, затем clusterdata формирует кластеры, когда inconsistent значения больше cutoff.

  • Если cutoff является целым числом ≥ 2, затем clusterdata формирует максимум cutoff кластеры.

Когда вы задаете cutoff, вы не можете задать какие-либо аргументы пары "имя-значение".

Пример: clusterdata(X,3)

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

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: clusterdata(X,'Linkage','ward','MaxClust',3) задает создание не более трех кластеров X используя Ward linkage.

Критерий для определения кластеров в иерархическом дереве кластеров, заданный как разделенная разделенными запятой парами, состоящая из 'Criterion' и любой из них 'inconsistent' или 'distance'. Когда вы задаете 'Criterion'необходимо также задать значение для MaxClust или Cutoff.

Пример: clusterdata(X,'Criterion','distance','Cutoff',.5)

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

Отсечение для критерия несогласованности или расстояния, заданное как разделенная разделенными запятой парами, состоящая из 'Cutoff' и положительная скалярная величина. clusterdata использует Cutoff как порог для высот или коэффициентов несоответствия узлов, в зависимости от значения Criterion. Если вы задаете значение для 'Cutoff' не задавая критерий для определения кластеров, clusterdata использует 'inconsistent' критерий по умолчанию.

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

  • Если 'Criterion' является 'inconsistent', затем inconsistent значения узла и всех его подузлов должны быть меньше Cutoff для clusterdata чтобы сгруппировать их в кластер.

Необходимо указать любой из Cutoff или MaxClust.

Пример: clusterdata(X,'Cutoff',0.2)

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

Глубина для вычисления несогласованных значений, заданная как разделенная разделенными запятой парами, состоящая из 'Depth' и числовой скаляр. clusterdata оценивает несогласованные значения, просматривая заданную глубину под каждым узлом в иерархическом дереве кластера. Когда вы задаете 'Depth'необходимо также задать значение для MaxClust или Cutoff.

Пример: clusterdata(X,'Depth',3,'Cutoff',0.5)

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

Метрика расстояния, заданная как разделенная разделенными запятой парами, состоящая из 'Distance' и любая метрика расстояния, принятая pdist функция, как описано в следующей таблице. Когда вы задаете 'Distance'необходимо также задать значение для MaxClust или Cutoff.

МетрикаОписание
'euclidean'

Евклидово расстояние (по умолчанию)

'squaredeuclidean'

Квадратное Евклидово расстояние. (Эта опция предусмотрена только для эффективности. Это не удовлетворяет неравенству треугольника.)

'seuclidean'

Стандартизированное евклидово расстояние. Каждое различие координат между наблюдениями масштабируется путем деления на соответствующий элемент стандартного отклонения, S = std(X,'omitnan').

'mahalanobis'

Расстояние Махаланобиса с помощью выборочной ковариации X, C = cov(X,'omitrows')

'cityblock'

Расстояние между блоками

'minkowski'

Расстояние Минковского. Экспонента по умолчанию является 2. Чтобы использовать другую экспоненту P, задайте P после 'minkowski', где P является положительная скалярная величина значением: 'minkowski',P.

'chebychev'

Расстояние Чебычева (максимальное различие координат)

'cosine'

Один минус косинус включенного угла между точками (рассматривается как векторы)

'correlation'

Один минус корреляция выборки между точками (рассматривается как последовательности значений)

'hamming'

Расстояние Хемминга, которое является процентом координат, которые различаются

'jaccard'

Один минус коэффициент Жаккарда, который является процентом ненулевых координат, которые различаются

'spearman'

Один минус выборки корреляции ранга Спирмена между наблюдениями (рассматриваются как последовательности значений)

distfun

Пользовательский указатель на функцию расстояния. Функция расстояния имеет вид

function D2 = distfun(ZI,ZJ)
% calculation of distance
...
где

  • ZI является 1-by- n вектор, содержащий одно наблюдение.

  • ZJ является m2-by- n матрица, содержащая несколько наблюдений. distfun необходимо принять матрицу ZJ с произвольным количеством наблюдений.

  • D2 является m2-by- 1 вектор расстояний, и D2(k) - расстояние между наблюдениями ZI и ZJ(k,:).

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

Для получения дополнительной информации см. «Метрики расстояния».

Пример: clusterdata(X,'Distance','minkowski','MaxClust',4)

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

Алгоритм вычисления расстояния между кластерами, заданный как разделенная разделенными запятой парами, состоящая из 'Linkage' и любой алгоритм, принятый linkage функция, как описано в следующей таблице. Когда вы задаете 'Linkage'необходимо также задать значение для MaxClust или Cutoff.

АлгоритмОписание
'average'

Невзвешенное среднее расстояние (UPGMA)

'centroid'

Расстояние центроида (UPGMC), соответствующее только евклидовым расстояниям

'complete'

Самое дальнее расстояние

'median'

Взвешенное расстояние по центру масс (WPGMC), соответствующее только евклидовым расстояниям

'single'

Кратчайшее расстояние

'ward'

Внутреннее квадратное расстояние (алгоритм минимального отклонения), соответствующее только евклидовым расстояниям

'weighted'

Средневзвешенное расстояние (WPGMA)

Для получения дополнительной информации см. Редактирования»

Пример: clusterdata(X,'Linkage','median','MaxClust',4)

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

Максимальное количество кластеров в форме, заданное как разделенная разделенными запятой парами, состоящая из 'MaxClust' и положительное целое число.

Необходимо указать любой из Cutoff или MaxClust.

Пример: clusterdata(X,'MaxClust',4)

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

Опция для сохранения памяти, заданная как разделенная разделенными запятой парами, состоящая из 'SaveMemory' и любой из них 'on' или 'off'. Когда вы задаете 'SaveMemory'необходимо также задать значение для MaxClust или Cutoff.

The 'on' причины настройки clusterdata чтобы создать кластеры, не вычисляя матрицу расстояний. The 'on' установка применяется, когда оба из этих условий удовлетворены:

  • Linkage является 'centroid', 'median', или 'ward'.

  • Distance является 'euclidean' (по умолчанию).

Когда применяются эти два условия, значение по умолчанию для 'SaveMemory' является 'on' если X имеет 20 столбцов или меньше, или если на компьютере недостаточно памяти для хранения матрицы расстояний. В противном случае значение по умолчанию для 'SaveMemory' является 'off'.

Когда 'SaveMemory' является 'on', linkage время выполнения пропорционально количеству размерностей (количеству столбцов X). Когда 'SaveMemory' является 'off', linkage требование к памяти пропорционально N2, где N количество наблюдений. Выбор оптимальной (в наименьшие сроки) настройки для 'SaveMemory' зависит от размерностей задачи, количества наблюдений и доступной памяти. Значение по умолчанию 'SaveMemory' Установка является грубым приближением оптимальной настройки.

Пример: 'SaveMemory','on'

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

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

свернуть все

Индексы кластера, возвращенные как числовой вектор-столбец. T имеет столько строк, сколько Xи каждую строку T указывает назначение кластером соответствующего наблюдения в X.

Совет

  • Если 'Linkage' является 'centroid' или 'median', затем linkage может создать дерево кластеров, которое не является монотонным. Этот результат происходит, когда расстояние от объединения двух кластеров, r и s, до третьего кластера меньше, чем расстояние между r и s. В этом случае в дендрограмме, нарисованной с ориентацией по умолчанию, путь от листа к корневому узлу делает несколько шагов вниз. Чтобы избежать этого результата, задайте другое значение для 'Linkage'. На следующем изображении показано немонотонное дерево кластеров.

    В этом случае кластер 1 и кластер 3 соединяются в новый кластер, в то время как расстояние между этим новым кластером и кластером 2 меньше, чем расстояние между кластером 1 и кластером 3.

Алгоритмы

Если вы задаете значение c для cutoff входной параметр, затем T = clusterdata(X, c) выполняет следующие шаги:

  1. Создайте вектор Евклидова расстояния между парами наблюдений в X при помощи pdist.

    Y = pdist(X, 'euclidean')

  2. Создайте агломеративное иерархическое дерево кластеров из Y при помощи linkage с 'single' способ вычисления кратчайшего расстояния между кластерами.

    Z = linkage(Y, 'single')

  3. Если 0 < c < 2, использование cluster для определения кластеров из Z когда несогласованные значения меньше c.

    T = cluster(Z, 'Cutoff', c)

  4. Если c является целым числом значения ≥ 2, использование cluster чтобы найти максимум c кластеры из Z.

    T = кластер (Z, 'MaxClust', c)

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

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

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