clusterdata

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

Синтаксис

T = clusterdata(X,cutoff)
T = clusterdata(X,Name,Value)

Описание

пример

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

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

пример

T = clusterdata(X,Name,Value) задает дополнительные опции с помощью одного или нескольких аргументов пары "имя-значение". Например, можно задать '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');

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

T1 = clusterdata(X,3);

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

Отобразите данные на графике с получившимися кластерными присвоениями.

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

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

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

Отобразите данные на графике с получившимися кластерными присвоениями.

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

Используя оба подхода, 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)

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

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

свернуть все

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

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

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

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

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

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

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

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

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

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

Критерий определения кластеров в иерархическом кластерном дереве, заданном как пара, разделенная запятой, состоящая из '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, чтобы сгруппировать их в кластер.

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

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

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

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

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

Метрика расстояния, заданная как пара, разделенная запятой, состоящая из 'Distance' и любой метрики расстояния, принятой функцией pdist, как замечено в этой таблице.

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

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

'squaredeuclidean'

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

'seuclidean'

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

'mahalanobis'

Расстояние Mahalanobis с помощью выборочной ковариации X, C = nancov(X)

'cityblock'

Расстояние городского квартала

'minkowski'

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

'chebychev'

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

'cosine'

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

'correlation'

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

'hamming'

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

'jaccard'

Один минус коэффициент 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, как описано в этой таблице.

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

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

'centroid'

Центроидное расстояние (UPGMC), подходящий для Евклидовых расстояний только

'complete'

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

'median'

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

'single'

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

'ward'

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

'weighted'

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

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

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

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

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

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

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

Опция для того, чтобы сохранить память, заданную как пара, разделенная запятой, состоящая из 'SaveMemory' и или 'on' или 'off'. Установка 'on' заставляет clusterdata создавать кластеры, не вычисляя матрицу расстояния. Установка '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 = cluster(Z,'MaxClust',c)

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

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

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