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 object. The axes object 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 object. The axes object 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 object. The axes object 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 object. The axes object 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 имя аргумента и 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 сгруппировать их в кластер.

Необходимо задать любой 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'

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

'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- n вектор, содержащий одно наблюдение.

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

  • D2 m2- 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.

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

  • Linkage 'centroid'медиана, или '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 = clusterdataXC выполняет следующие шаги:

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

    Y = pdistX, 'евклидов')

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

    Z = linkage(Y, 'single')

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

    T = cluster(Z, 'Сокращение', c)

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

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

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

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

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