scipy.cluster.hierarchy.

дендрограмма#

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-го листа.

Смотрите также

linkage, set_link_color_palette

Примечания

Ожидается, что расстояния в 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()
../../_images/scipy-cluster-hierarchy-dendrogram-1_00.png
../../_images/scipy-cluster-hierarchy-dendrogram-1_01.png