дендрограмма#
- scipy.cluster.hierarchy.дендрограмма(Z, p=30, truncate_mode=None, color_threshold=None, get_leaves=True, ориентация='top', метки=None, count_sort=False, distance_sort=False, show_leaf_counts=True, no_plot=False, no_labels=False, leaf_font_size=None, leaf_rotation=None, leaf_label_func=None, show_contracted=False, link_color_func=None, ax=None, above_threshold_color='C0')[источник]#
Построить иерархическую кластеризацию в виде дендрограммы.
Дендрограмма иллюстрирует, как каждый кластер состоит из подкластеров, рисуя U-образную связь между неединичным кластером и его дочерними элементами. Верхняя часть U-связи указывает на слияние кластеров. Две ножки U-связи показывают, какие кластеры были объединены. Длина двух ножек U-связи представляет расстояние между дочерними кластерами. Это также копфенетическое расстояние между исходными наблюдениями в двух дочерних кластерах.
- Параметры:
- Zndarray
Матрица связей, кодирующая иерархическую кластеризацию для отображения в виде дендрограммы. См.
linkageфункция для получения дополнительной информации о форматеZ.- pint, необязательный
The
pпараметр дляtruncate_mode.- truncate_modestr, optional
Дендрограмму может быть сложно читать, когда исходная матрица наблюдений, из которой получена связь, велика. Усечение используется для сжатия дендрограммы. Существует несколько режимов:
NoneУсечение не выполняется (по умолчанию). Примечание:
'none'является псевдонимом дляNoneоставлено для обратной совместимости.'lastp'Последний
pнесинглетонные кластеры, образованные в связи, являются единственными нелистовыми узлами в связи; они соответствуют строкамZ[n-p-2:end]вZ. Все другие несинглетонные кластеры свёрнуты в листовые узлы.'level'Не более чем
pуровни дендрограммы отображаются. «Уровень» включает все узлы сpслияния из финального слияния.Примечание:
'mtica'является псевдонимом для'level'оставлено для обратной совместимости.
- color_thresholddouble, опционально
Для краткости, пусть \(t\) будет
color_thresholdОкрашивает все дочерние связи ниже узла кластера \(k\) тот же цвет, если \(k\) является первым узлом ниже порога отсечения \(t\). Все связи, соединяющие узлы с расстояниями больше или равными порогу, окрашены цветом по умолчанию matplotlib'C0'. Если \(t\) меньше или равно нулю, все узлы окрашены'C0'. Еслиcolor_thresholdравно None или ‘default’, что соответствует поведению MATLAB(TM), порог устанавливается в0.7*max(Z[:,2]).- get_leavesbool, необязательно
Включает список
R['leaves']=Hв результирующем словаре. Для каждого \(i\),H[i] == j, узел кластераjпоявляется в позицииiв обходе листьев слева направо, где \(j < 2n-1\) и \(i < n\).- ориентацияstr, optional
Направление для построения дендрограммы, которое может быть любым из следующих строковых значений:
'top'Отображает корень вверху и связи потомков, идущие вниз. (по умолчанию).
'bottom'Отображает корень внизу и рисует дочерние связи, идущие вверх.
'left'Отображает корень слева и связи потомков, идущие вправо.
'right'Отображает корень справа и рисует связи потомков, идущие влево.
- меткиndarray, необязательно
По умолчанию,
labelsравно None, поэтому индекс исходного наблюдения используется для маркировки листовых узлов. В противном случае, это \(n\)-размерная последовательность, сn == Z.shape[0] + 1.labels[i]значение - это текст, который нужно поместить под \(i\) только если листовой узел соответствует исходному наблюдению, а не неодиночному кластеру.- count_sortstr или bool, опционально
Для каждого узла n порядок (визуально, слева направо) отрисовки двух связей-потомков n определяется этим параметром, который может быть любым из следующих значений:
FalseНичего не делается.
'ascending'илиTrueДочерний элемент с минимальным количеством исходных объектов в его кластере отображается первым.
'descending'Сначала отображается кластер с максимальным количеством исходных объектов.
Примечание,
distance_sortиcount_sortне могут быть одновременно True.- distance_sortstr или bool, опционально
Для каждого узла n порядок (визуально, слева направо) отрисовки двух связей-потомков n определяется этим параметром, который может быть любым из следующих значений:
FalseНичего не делается.
'ascending'илиTrueДочерний элемент с минимальным расстоянием между его прямыми потомками отображается первым.
'descending'Дочерний элемент с максимальным расстоянием между его прямыми потомками отображается первым.
Примечание
distance_sortиcount_sortне могут быть одновременно True.- show_leaf_countsbool, необязательно
Когда True, листовые узлы, представляющие \(k>1\) исходные наблюдения помечены количеством наблюдений, которые они содержат, в скобках.
- no_plotbool, необязательно
Если True, окончательная визуализация не выполняется. Это полезно, если нужны только структуры данных, вычисленные для визуализации, или если matplotlib недоступен.
- no_labelsbool, необязательно
Когда установлено в True, метки не отображаются рядом с листовыми узлами в визуализации дендрограммы.
- leaf_rotationdouble, опционально
Задает угол (в градусах) для поворота меток листьев. Если не указано, поворот основан на количестве узлов в дендрограмме (по умолчанию 0).
- leaf_font_sizeint, необязательный
Указывает размер шрифта (в пунктах) меток листьев. Когда не указан, размер основан на количестве узлов в дендрограмме.
- leaf_label_funclambda или функция, необязательно
Когда
leaf_label_funcявляется вызываемой функцией, для каждого листа с индексом кластера \(k < 2n-1\). Функция ожидает возврата строки с меткой для листа.Индексы \(k < n\) соответствуют исходным наблюдениям, в то время как индексы \(k \geq n\) соответствуют неодиночным кластерам.
Например, чтобы пометить синглтоны их идентификатором узла, а не-синглтоны их идентификатором, количеством и коэффициентом непротиворечивости, просто сделайте:
# First define the leaf label function. def llf(id): if id < n: return str(id) else: return '[%d %d %1.2f]' % (id, count, R[n-id,3]) # The text for the leaf nodes is going to be big so force # a rotation of 90 degrees. dendrogram(Z, leaf_label_func=llf, leaf_rotation=90) # leaf_label_func can also be used together with ``truncate_mode``, # in which case you will get your leaves labeled after truncation: dendrogram(Z, leaf_label_func=llf, leaf_rotation=90, truncate_mode='level', p=2)
- show_contractedbool, необязательно
Когда True, высоты неодиночных узлов, свернутых в листовой узел, отображаются как крестики вдоль связи, соединяющей этот листовой узел. Это действительно полезно только при использовании усечения (см.
truncate_modeпараметр).- link_color_funcвызываемый объект, необязательный
Если задано, link_color_function вызывается с каждым несинглтонным id, соответствующим каждой U-образной связи, которую он будет рисовать. Ожидается, что функция вернет цвет для рисования связи, закодированный как строковый код цвета matplotlib. Например:
dendrogram(Z, link_color_func=lambda k: colors[k])
окрашивает прямые связи под каждым нетривиальным узлом без усечения
kиспользуяcolors[k].- axэкземпляр matplotlib Axes, опционально
Если None и no_plot не равно True, дендрограмма будет построена на текущих осях. В противном случае, если no_plot не является True, дендрограмма будет построена на заданной
Axesэкземпляре. Это может быть полезно, если дендрограмма является частью более сложной фигуры.- above_threshold_colorstr, optional
Эта строка цвета matplotlib устанавливает цвет связей выше color_threshold. По умолчанию
'C0'.
- Возвращает:
- Rdict
Словарь структур данных, вычисленных для отображения дендрограммы. Содержит следующие ключи:
'color_list'Список названий цветов. k-й элемент представляет цвет k-й связи.
'icoord'и'dcoord'Каждый из них — это список списков. Пусть
icoord = [I1, I2, ..., Ip]гдеIk = [xk1, xk2, xk3, xk4]иdcoord = [D1, D2, ..., Dp]гдеDk = [yk1, yk2, yk3, yk4], тогда k-я нарисованная связь — это(xk1, yk1)-(xk2, yk2)-(xk3, yk3)-(xk4, yk4).'ivl'Список меток, соответствующих листовым узлам.
'leaves'Для каждого i,
H[i] == j, узел кластераjпоявляется в позицииiв обходе листьев слева направо, где \(j < 2n-1\) и \(i < n\). Еслиjменьше чемn,i-й листовой узел соответствует исходному наблюдению. В противном случае он соответствует неединичному кластеру.'leaves_color_list'Список названий цветов. k-й элемент представляет цвет k-го листа.
Смотрите также
Примечания
Ожидается, что расстояния в
Z[:,2]должна быть монотонной, иначе в дендрограмме появляются пересечения.dendrogramимеет экспериментальную поддержку совместимых с Python Array API Standard бэкендов в дополнение к NumPy. Пожалуйста, рассмотрите тестирование этих функций, установив переменную окруженияSCIPY_ARRAY_API=1и предоставление массивов CuPy, PyTorch, JAX или Dask в качестве аргументов массива. Поддерживаются следующие комбинации бэкенда и устройства (или других возможностей).Библиотека
CPU
GPU
NumPy
✅
н/д
CuPy
н/д
⛔
PyTorch
✅
⛔
JAX
⚠️ нет JIT
⛔
Dask
⚠️ вычисляет граф
н/д
См. Поддержка стандарта array API для получения дополнительной информации.
Примеры
>>> import numpy as np >>> from scipy.cluster import hierarchy >>> import matplotlib.pyplot as plt
Очень простой пример:
>>> ytdist = np.array([662., 877., 255., 412., 996., 295., 468., 268., ... 400., 754., 564., 138., 219., 869., 669.]) >>> Z = hierarchy.linkage(ytdist, 'single') >>> plt.figure() >>> dn = hierarchy.dendrogram(Z)
Теперь построить график в заданных осях, улучшить цветовую схему и использовать как вертикальную, так и горизонтальную ориентацию:
>>> hierarchy.set_link_color_palette(['m', 'c', 'y', 'k']) >>> fig, axes = plt.subplots(1, 2, figsize=(8, 3)) >>> dn1 = hierarchy.dendrogram(Z, ax=axes[0], above_threshold_color='y', ... orientation='top') >>> dn2 = hierarchy.dendrogram(Z, ax=axes[1], ... above_threshold_color='#bcbddc', ... orientation='right') >>> hierarchy.set_link_color_palette(None) # reset to default after use >>> plt.show()