exponenta event banner

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 с использованием связи Уорда.

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

Один минус коэффициент 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', '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