Иерархическая кластеризация

Введение в иерархическую кластеризацию

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

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

Чтобы выполнить агломерационный иерархический кластерный анализ на наборе данных с помощью функций Statistics and Machine Learning Toolbox™, выполните следующую процедуру:

  1. Найдите подобие или различие между каждой парой объектов в наборе данных. На этом шаге вы вычисляете расстояние между объектами, используя pdist функция. The pdist функция поддерживает много различных способов вычислить это измерение. Смотрите Измерения Подобия для получения дополнительной информации.

  2. Сгруппировать объекты в двоичное иерархическое дерево кластеров. На этом шаге вы связываете пары объектов, которые находятся в непосредственной близости, используя linkage функция. The linkage функция использует информацию о расстоянии, сгенерированную на шаге 1, чтобы определить близость объектов друг к другу. Когда объекты спарены в двоичные кластеры, вновь сформированные кластеры сгруппированы в большие кластеры, пока не сформировано иерархическое дерево. Для получения дополнительной информации см. редактирования».

  3. Определите, где срезать иерархическое дерево в кластеры. На этом шаге вы используете cluster функция для обрезки ветвей в нижней части иерархического дерева и назначения всех объектов под каждым вырезом одному кластеру. Это создает раздел данных. The cluster функция может создать эти кластеры путем обнаружения естественных группировок в иерархическом дереве или путем отсечения иерархического дерева в произвольной точке.

В следующих разделах приведены дополнительные сведения о каждом из этих шагов.

Примечание

Функция clusterdata выполняет все необходимые шаги для вас. Вам не нужно выполнять pdist, linkage, или cluster функционирует отдельно.

Меры подобия

Вы используете pdist функция для вычисления расстояния между каждой парой объектов в наборе данных. Для набора данных, состоящего из m объектов, в наборе данных есть m * (m - 1 )/2 пары. Результат этого расчета обычно известен как матрица расстояния или различия.

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

Примечание

Можно, опционально, нормализовать значения в наборе данных перед вычислением информации о расстоянии. В наборе данных реального мира переменные могут быть измерены относительно различных шкал. Например, одна переменная может измерить счета теста Intelligence Quotient (IQ), а другая переменная может измерить окружность головы. Эти расхождения могут искажать вычисления близости. Использование zscore можно преобразовать все значения в наборе данных в ту же пропорциональную шкалу. Посмотрите zscore для получения дополнительной информации.

Для примера рассмотрим набор данных, X, состоящий из пяти объектов, где каждый объект является набором координат x, y.

  • 1:1 объекта, 2

  • Объект 2: 2.5, 4.5

  • 3:2 объекта, 2

  • Объектные 4:4, 1,5

  • Объектные 5:4, 2,5

Можно задать этот набор данных как матрицу

rng default;  % For reproducibility
X = [1 2;2.5 4.5;2 2;4 1.5;...
    4 2.5];

и передайте его в pdist. The pdist функция вычисляет расстояние между объектом 1 и объектом 2, объектом 1 и объектом 3 и так далее, пока не будут вычислены расстояния между всеми парами. Следующий рисунок строит графики этих объектов. Евклидово расстояние между объектом 2 и объектом 3 показано, чтобы проиллюстрировать одну интерпретацию расстояния.

Информация о расстоянии

pdist функция возвращает эту информацию о расстоянии в векторе, Y, где каждый элемент содержит расстояние между парой объектов.

Y = pdist(X)
Y = 1×10

    2.9155    1.0000    3.0414    3.0414    2.5495    3.3541    2.5000    2.0616    2.0616    1.0000

Чтобы облегчить просмотр связи между информацией о расстоянии, сгенерированной pdist и объекты в исходном наборе данных, можно переформатировать вектор расстояния в матрицу, используя squareform функция. В этой матрице элемент i, j соответствует расстоянию между объектом i и объектом j в исходном наборе данных. В следующем примере элемент 1,1 представляет расстояние между объектом 1 и самим собой (что равняется нулю). Элемент 1,2 представляет расстояние между объектом 1 и объектом 2 и так далее.

squareform(Y)
ans = 5×5

         0    2.9155    1.0000    3.0414    3.0414
    2.9155         0    2.5495    3.3541    2.5000
    1.0000    2.5495         0    2.0616    2.0616
    3.0414    3.3541    2.0616         0    1.0000
    3.0414    2.5000    2.0616    1.0000         0

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

После вычисления близости между объектами в наборе данных можно определить, как объекты в наборе данных должны быть сгруппированы в кластеры, используя linkage функция. The linkage функция принимает информацию о расстоянии, сгенерированную pdist и связывает пары объектов, которые близки друг к другу, в двоичные кластеры (кластеры, состоящие из двух объектов). The linkage затем функция связывает эти вновь сформированные кластеры друг с другом и с другими объектами, чтобы создать большие кластеры, пока все объекты в исходном наборе данных не будут связаны вместе в иерархическом дереве.

Для примера, учитывая вектор расстояния Y сгенерирован pdist из выборочных множеств x данных и y-координат, linkage функция генерирует иерархическое дерево кластеров, возвращая информацию о редактировании в матрице Z.

Z = linkage(Y)
Z = 4×3

    4.0000    5.0000    1.0000
    1.0000    3.0000    1.0000
    6.0000    7.0000    2.0616
    2.0000    8.0000    2.5000

В этом выходе каждая строка определяет ссылку между объектами или кластерами. Первые два столбца определяют объекты, которые были связаны. Третий столбец содержит расстояние между этими объектами. Для множества x выборочных данных и y-координат linkage функция начинается путем группировки объектов 4 и 5, которые имеют самую близкую близость (значение расстояния = 1,0000). The linkage функция продолжается путем группировки объектов 1 и 3, которые также имеют значение расстояния 1,0000.

Третья строка указывает, что linkage сгруппированные по функциям объекты 6 и 7. Если исходный набор выборочных данных содержал только пять объектов, что такое объекты 6 и 7? Объект 6 является вновь сформированным двоичным кластером, созданным группировкой объектов 4 и 5. Когда linkage функция группирует два объекта в новый кластер, она должна назначить кластеру уникальное значение индекса, начиная со значения m + 1, где m - количество объектов в исходном наборе данных. (Значения от 1 до m уже используются исходным набором данных.) Точно так же объект 7 является кластером, образованным группировками объектов 1 и 3.

linkage использует расстояния, чтобы определить порядок, в котором он кластеризует объекты. Вектор расстояния Y содержит расстояния между исходными объектами с 1 по 5. Но редактирование должно также быть способно определять расстояния с участием кластеров, которые оно создает, таких как объекты 6 и 7. По умолчанию linkage использует метод, известный как одно редактирование. Однако существует ряд различных методов. См. linkage Страница с описанием для получения дополнительной информации.

Как конечный кластер, linkage сгруппированный по функциям объект 8, вновь сформированный кластер, состоящий из объектов 6 и 7, с объектом 2 из исходного набора данных. Следующий рисунок графически иллюстрирует способ linkage группирует объекты в иерархию кластеров.

Древовидные диаграммы

Иерархическое двоичное дерево кластера, созданное linkage функция наиболее легко понимается при просмотре графически. Функция dendrogram строит график дерева следующим образом.

dendrogram(Z)

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

На рисунке цифры вдоль горизонтальной оси представляют индексы объектов в исходном наборе данных. Ссылки между объектами представлены в виде перевернутых U-образных линий. Высота U указывает расстояние между объектами. Для примера ссылка, представляющая кластер, содержащий объекты 1 и 3, имеет высоту 1. Ссылка, представляющая кластер, который группирует объект 2 вместе с объектами 1, 3, 4 и 5 (которые уже кластеризованы как объект 8), имеет высоту 2,5. Высота представляет расстояние linkage вычисляет между объектами 2 и 8. Для получения дополнительной информации о создании схемы дендрограммы смотрите dendrogram страница с описанием.

Проверьте дерево кластеров

После связывания объектов в наборе данных в иерархическое дерево кластеров может потребоваться проверить, что расстояния (то есть высоты) в дереве точно отражают исходные расстояния. В сложение можно хотеть исследовать естественные деления, которые существуют между ссылками между объектами. Statistics and Machine Learning Toolbox доступны для обеих этих задач, как описано в следующих разделах.

Проверьте несоответствие

В иерархическом дереве кластеров любые два объекта в исходном наборе данных в конечном счете связываются вместе на некотором уровне. Высота ссылки представляет расстояние между двумя кластерами, которые содержат эти два объекта. Эта высота известна как копенетическое расстояние между двумя объектами. Один из способов измерения того, насколько хорошо дерево кластера сгенерировано linkage функция отражает ваши данные, чтобы сравнить кофенетические расстояния с исходными данными о расстоянии, сгенерированными pdist функция. Если кластеризация действительна, связывание объектов в дереве кластеров должно иметь сильную корреляцию с расстояниями между объектами в векторе расстояния. cophenet функция сравнивает эти два множеств значений и вычисляет их корреляцию, возвращая значение, называемое кофенетическим коэффициентом корреляции. Чем ближе значение коэффициента копенетической корреляции к 1, тем точнее решение кластеризации отражает ваши данные.

Можно использовать кофенетический коэффициент корреляции, чтобы сравнить результаты кластеризации того же набора данных с помощью различных методов вычисления расстояния или алгоритмов кластеризации. Для примера можно использовать cophenet функция для вычисления кластеров, созданных для набора выборочных данных.

c = cophenet(Z,Y)
c = 0.8615

Z - матрица, выводимая linkage функции и Y - вектор расстояния, выходной параметр pdist функция.

Выполните pdist снова на том же наборе данных, на этот раз задав метрику городского блока. После запуска linkage функция на этом новом pdist выход с использованием метода среднего редактирования, вызов cophenet для оценки решения кластеризации.

Y = pdist(X,'cityblock');
Z = linkage(Y,'average');
c = cophenet(Z,Y)
c = 0.9047

Кофенетический коэффициент корреляции показывает, что использование другого метода расстояния и редактирования создает дерево, которое представляет исходные расстояния немного лучше.

Проверьте согласованность

Один из способов определить естественные кластерные деления в наборе данных - сравнить высоту каждой ссылки в дереве кластеров с высотами соседних ссылок под ним в дереве.

Ссылка, которая имеет примерно ту же высоту, что и ссылки, расположенные под ней, указывает на отсутствие различных делений между объектами, соединенными на этом уровне иерархии. Эти ссылки, как говорят, показывают высокий уровень согласованности, потому что расстояние между соединяемыми объектами приблизительно совпадает с расстояниями между содержащимися в них объектами.

С другой стороны, ссылка, высота которого заметно отличается от высоты ссылок под ним, указывает, что объекты, соединенные на этом уровне в дереве кластеров, намного дальше друг от друга, чем их компоненты, когда они были объединены. Эта ссылка, как говорят, несовместима со ссылками под ним.

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

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

Относительная согласованность каждой ссылки в иерархическом дереве кластера может быть количественно определена и выражена как коэффициент несоответствия. Это значение сравнивает высоту ссылки в иерархии кластеров со средней высотой ссылок ниже нее. Ссылки, которые присоединяются к отдельным кластерам, имеют высокий коэффициент несогласованности; ссылки, которые соединяются в неясные кластеры, имеют низкий коэффициент несоответствия.

Чтобы сгенерировать список коэффициентов несоответствия для каждой ссылки в дереве кластера, используйте inconsistent функция. По умолчанию в inconsistent функция сравнивает каждую ссылку в иерархии кластеров со смежными ссылками, которые находятся ниже двух уровней в иерархии кластеров. Это называется глубиной сравнения. Можно также задать другие глубины. Объекты в нижней части дерева кластеров, называемые листовыми узлами, которые не имеют других объектов ниже них, имеют коэффициент несогласованности нуля. Кластеры, которые соединяются с двумя листьями, также имеют нулевой коэффициент несогласованности.

Для примера можно использовать inconsistent функция для вычисления значений несогласованности для ссылок, созданной linkage функция в редактированиях.

Во-первых, пересчитайте значения расстояния и редактирования с помощью настроек по умолчанию.

Y = pdist(X);
Z = linkage(Y);

Далее используйте inconsistent для вычисления значений несогласованности.

I = inconsistent(Z)
I = 4×4

    1.0000         0    1.0000         0
    1.0000         0    1.0000         0
    1.3539    0.6129    3.0000    1.1547
    2.2808    0.3100    2.0000    0.7071

The inconsistent функция возвращает данные о ссылках в матрице (m-1) -by-4, столбцы которой описаны в следующей таблице.

СтолбецОписание

1

Среднее значение высот всех ссылок, включенных в расчет

2

Стандартное отклонение всех ссылок, включенных в расчет

3

Количество ссылок, включенных в расчет

4

Коэффициент несогласованности

В выходе выборки первая строка представляет ссылку между объектами 4 и 5. Этому кластеру присваивается индекс 6 linkage функция. Поскольку оба 4 и 5 являются листовыми узлами, коэффициент несоответствия для кластера равен нулю. Вторая строка представляет ссылку между объектами 1 и 3, оба из которых также являются листовыми узлами. Этому кластеру присвоен индекс 7 функцией редактирования.

Третья строка оценивает ссылку, которая соединяет эти два кластера, объекты 6 и 7. (Этому новому кластеру назначается индекс 8 в linkage выход). Столбец 3 указывает, что в вычислении рассматриваются три ссылки: сама ссылка и две ссылки непосредственно под ним в иерархии. Столбец 1 представляет среднее значение высоты этих ссылок. The inconsistent функция использует информацию о высоте, выводимую linkage функция для вычисления среднего значения. Столбец 2 представляет стандартное отклонение между ссылками. Последний столбец содержит значение несогласованности для этих ссылок 1.1547. Это - различие между высотой ссылки тока и средним значением, нормированная стандартным отклонением.

(2.0616 - 1.3539) / .6129
ans = 1.1547

Следующий рисунок иллюстрирует ссылки и высоты, включенные в этот расчет.

Примечание

На предыдущем рисунке нижний предел на оси y установлен в 0 для отображения высот ссылок. Чтобы установить нижний предел равным 0, выберите Axes Properties в Edit меню щелкните вкладку Y Axis и введите 0 в поле сразу справа от Y Limits.

Строка 4 в выходной матрице описывает ссылку между объектом 8 и объектом 2. Столбец 3 указывает, что в этом вычислении включены две ссылки: сама ссылка и непосредственно под ним в иерархии. Коэффициент несоответствия для этой ссылки 0,7071.

Следующий рисунок иллюстрирует ссылки и высоты, включенные в этот расчет.

Создание кластеров

После создания иерархического дерева двоичных кластеров можно срезать дерево, чтобы разбить данные на кластеры, используя cluster функция. The cluster позволяет создавать кластеры двумя способами, как описано в следующих разделах:

Поиск естественных делений в данных

Иерархическое дерево кластеров может естественно разделить данные на отдельные, хорошо разделенные кластеры. Это может быть особенно очевидно в схеме дендрограммы, созданной из данных, где группы объектов плотно упакованы в определенных областях, а не в других. Коэффициент несоответствия ссылок в дереве кластера может идентифицировать эти деления, где сходства между объектами резко изменяются. (Дополнительные сведения о коэффициенте несоответствия см. в разделе «Проверка дерева кластеров».) Вы можете использовать это значение, чтобы определить, где cluster функция создает контуры кластера.

Для примера, если вы используете cluster функция для группирования набора выборочных данных в кластеры, задающая порог коэффициента несоответствия 1.2 как значение cutoff аргумент, cluster функция группирует все объекты в наборе выборочных данных в один кластер. В этом случае ни одна из ссылок в иерархии кластера не имела коэффициента несоответствия, большего 1.2.

T = cluster(Z,'cutoff',1.2)
T = 5×1

     1
     1
     1
     1
     1

The cluster функция выводит вектор, T, то есть того же размера, что и исходный набор данных. Каждый элемент в этом векторе содержит номер кластера, в который был помещен соответствующий объект из исходного набора данных.

Если вы снижаете порог коэффициента несоответствия до 0.8, а cluster функция разделяет набор выборочных данных на три отдельных кластера.

T = cluster(Z,'cutoff',0.8)
T = 5×1

     3
     2
     3
     1
     1

Этот выход указывает, что объекты 1 и 3 находятся в одном кластере, объекты 4 и 5 находятся в другом кластере, а объект 2 находится в своем собственном кластере.

Когда кластеры формируются таким образом, значение среза применяется к коэффициенту несоответствия. Эти кластеры могут, но не обязательно, соответствовать горизонтальному срезу через дендрограмму на определенной высоте. Если необходимо, чтобы кластеры соответствовали горизонтальному срезу дендрограммы, можно использовать criterion опция, чтобы указать, что срез должен основываться на расстоянии, а не на несогласованности, или можно задать количество кластеров непосредственно, как описано в следующем разделе.

Задайте произвольные кластеры

Вместо того, чтобы позволить cluster function создают кластеры, определяемые естественными делениями в наборе данных, можно задать количество кластеров, которые необходимо создать.

Например, можно указать, что вы хотите, чтобы cluster функция для разбиения набора выборочных данных на два кластера. В этом случае cluster функция создает один кластер, содержащий объекты 1, 3, 4 и 5, и другой кластер, содержащий объект 2.

T = cluster(Z,'maxclust',2)
T = 5×1

     2
     1
     2
     2
     2

Чтобы помочь вам визуализировать, как cluster функция определяет эти кластеры, следующий рисунок показывает дендрограмму иерархического дерева кластеров. Горизонтальная штриховая линия пересекается с двумя линиями дендрограммы, соответствующими настройке 'maxclust' на 2. Эти две строки разбивают объекты на два кластера: объекты под левой линией, а именно 1, 3, 4 и 5, принадлежат одному кластеру, в то время как объект под правой линией, а именно 2, принадлежит другому кластеру.

С другой стороны, если вы задаете 'maxclust' на 3функция кластера группирует объекты 4 и 5 в одном кластере, объекты 1 и 3 во втором кластере и объект 2 в третьем кластере. Следующая команда иллюстрирует это.

T = cluster(Z,'maxclust',3)
T = 5×1

     2
     3
     2
     1
     1

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

Похожие темы