scipy.cluster.hierarchy.

лидеры#

scipy.cluster.hierarchy.лидеры(Z, T)[источник]#

Возвращает корневые узлы в иерархической кластеризации.

Возвращает корневые узлы в иерархической кластеризации, соответствующие разрезу, определённому вектором назначения плоских кластеров T. См. fcluster функция для получения дополнительной информации о формате T.

Для каждого плоского кластера \(j\) из \(k\) плоские кластеры представленные в n-мерном векторе назначения плоских кластеров T, эта функция находит узел кластера с наименьшим значением \(i\) в дереве связей Z, такое что:

  • листовые потомки принадлежат только плоскому кластеру j (т.е., T[p]==j для всех \(p\) в \(S(i)\), где \(S(i)\) является набором идентификаторов листьев для дочерних листовых узлов с кластерным узлом \(i\))

  • не существует листа, который не является потомком с \(i\) который также принадлежит кластеру \(j\) (т.е., T[q]!=j для всех \(q\) не в \(S(i)\)). Если это условие нарушается, T не является допустимым вектором назначения кластеров, и будет выброшено исключение.

Параметры:
Zndarray

Иерархическая кластеризация, закодированная как матрица. Смотрите linkage для получения дополнительной информации.

Tndarray

Вектор назначения плоских кластеров.

Возвращает:
Lndarray

Идентификаторы узлов лидер-связи хранятся как k-элементный одномерный массив, где k это количество плоских кластеров, найденных в T.

L[j]=i — это идентификатор узла кластера связей, который является лидером плоского кластера с идентификатором M[j]. Если i < n, i соответствует исходному наблюдению, в противном случае соответствует кластеру с несколькими элементами.

Mndarray

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

Например: если L[3]=2 и M[3]=8, лидером плоского кластера с id 8 является узел связывания 2.

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

fcluster

для создания плоских назначений кластеров.

Примечания

Поддержка Array API (экспериментальная): Эта функция возвращает массивы с формой, зависящей от данных. В JAX, на момент написания, это делает невозможным её выполнение внутри @jax.jit.

leaders имеет экспериментальную поддержку совместимых с Python Array API Standard бэкендов в дополнение к NumPy. Пожалуйста, рассмотрите тестирование этих функций, установив переменную окружения SCIPY_ARRAY_API=1 и предоставление массивов CuPy, PyTorch, JAX или Dask в качестве аргументов массива. Поддерживаются следующие комбинации бэкенда и устройства (или других возможностей).

Библиотека

CPU

GPU

NumPy

н/д

CuPy

н/д

PyTorch

JAX

⚠️ нет JIT

Dask

⚠️ объединяет блоки

н/д

См. Поддержка стандарта array API для получения дополнительной информации.

Примеры

>>> from scipy.cluster.hierarchy import ward, fcluster, leaders
>>> from scipy.spatial.distance import pdist

Дана матрица связей Z - получено после применения метода кластеризации к набору данных X - и массив плоского назначения кластеров T:

>>> X = [[0, 0], [0, 1], [1, 0],
...      [0, 4], [0, 3], [1, 4],
...      [4, 0], [3, 0], [4, 1],
...      [4, 4], [3, 4], [4, 3]]
>>> Z = ward(pdist(X))
>>> Z
array([[ 0.        ,  1.        ,  1.        ,  2.        ],
       [ 3.        ,  4.        ,  1.        ,  2.        ],
       [ 6.        ,  7.        ,  1.        ,  2.        ],
       [ 9.        , 10.        ,  1.        ,  2.        ],
       [ 2.        , 12.        ,  1.29099445,  3.        ],
       [ 5.        , 13.        ,  1.29099445,  3.        ],
       [ 8.        , 14.        ,  1.29099445,  3.        ],
       [11.        , 15.        ,  1.29099445,  3.        ],
       [16.        , 17.        ,  5.77350269,  6.        ],
       [18.        , 19.        ,  5.77350269,  6.        ],
       [20.        , 21.        ,  8.16496581, 12.        ]])
>>> T = fcluster(Z, 3, criterion='distance')
>>> T
array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], dtype=int32)

scipy.cluster.hierarchy.leaders возвращает индексы узлов в дендрограмме, которые являются лидерами каждого плоского кластера:

>>> L, M = leaders(Z, T)
>>> L
array([16, 17, 18, 19], dtype=int32)

(помните, что индексы 0-11 указывают на 12 точек данных в X, тогда как индексы 12-22 указывают на 11 строк Z)

scipy.cluster.hierarchy.leaders также возвращает индексы плоских кластеров в T:

>>> M
array([1, 2, 3, 4], dtype=int32)