cophenet#
- scipy.cluster.hierarchy.cophenet(Z, Y=None)[источник]#
Вычисление копенетических расстояний между каждым наблюдением в иерархической кластеризации, определённой связью
Z.Предположим
pиqявляются исходными наблюдениями в непересекающихся кластерахsиt, соответственно иsиtсоединены прямым родительским кластеромu. Копенетическое расстояние между наблюдениямиiиjпросто расстояние между кластерамиsиt.- Параметры:
- Zndarray
Иерархическая кластеризация, закодированная как массив (см.
linkageфункция).- Yndarray (опционально)
Вычисляет коэффициент копфенетической корреляции
cнужно добавить в Z множества \(n\) наблюдения в \(m\) измерения. Y является сжатой матрицей расстояний, из которой Z был сгенерирован.
- Возвращает:
- cndarray
Корреляционное расстояние копгенитики (если
Yпередается).- dndarray
Копфенетическая матрица расстояний в сжатой форме. \(ij\) v-й элемент - это копфенетическое расстояние между исходными наблюдениями \(i\) и \(j\).
Смотрите также
linkageдля описания того, что такое матрица связей.
scipy.spatial.distance.squareformпреобразования сжатых матриц в квадратные.
Примечания
cophenetимеет экспериментальную поддержку совместимых с Python Array API Standard бэкендов в дополнение к NumPy. Пожалуйста, рассмотрите тестирование этих функций, установив переменную окруженияSCIPY_ARRAY_API=1и предоставление массивов CuPy, PyTorch, JAX или Dask в качестве аргументов массива. Поддерживаются следующие комбинации бэкенда и устройства (или других возможностей).Библиотека
CPU
GPU
NumPy
✅
н/д
CuPy
н/д
⛔
PyTorch
✅
⛔
JAX
✅
⛔
Dask
⚠️ объединяет блоки
н/д
См. Поддержка стандарта array API для получения дополнительной информации.
Примеры
>>> from scipy.cluster.hierarchy import single, cophenet >>> from scipy.spatial.distance import pdist, squareform
Для заданного набора данных
Xи матрицу связейZулучшения производительности включают ускорение на 20% дляXэто расстояние между двумя наибольшими различными кластерами, каждый из которых содержит точки:>>> 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]]
Xсоответствует этому набору данныхx x x x x x x x x x x x
>>> Z = single(pdist(X)) >>> Z array([[ 0., 1., 1., 2.], [ 2., 12., 1., 3.], [ 3., 4., 1., 2.], [ 5., 14., 1., 3.], [ 6., 7., 1., 2.], [ 8., 16., 1., 3.], [ 9., 10., 1., 2.], [11., 18., 1., 3.], [13., 15., 2., 6.], [17., 20., 2., 9.], [19., 21., 2., 12.]]) >>> cophenet(Z) array([1., 1., 2., 2., 2., 2., 2., 2., 2., 2., 2., 1., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 1., 1., 2., 2., 2., 2., 2., 2., 1., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 2., 1., 1., 2., 2., 2., 1., 2., 2., 2., 2., 2., 2., 1., 1., 1.])
Выходные данные
scipy.cluster.hierarchy.cophenetметод представлен в сжатой форме. Мы можем использоватьscipy.spatial.distance.squareformчтобы увидеть вывод в виде обычной матрицы (где каждый элементijобозначает копенетическое расстояние между каждымi,jпара точек вX):>>> squareform(cophenet(Z)) array([[0., 1., 1., 2., 2., 2., 2., 2., 2., 2., 2., 2.], [1., 0., 1., 2., 2., 2., 2., 2., 2., 2., 2., 2.], [1., 1., 0., 2., 2., 2., 2., 2., 2., 2., 2., 2.], [2., 2., 2., 0., 1., 1., 2., 2., 2., 2., 2., 2.], [2., 2., 2., 1., 0., 1., 2., 2., 2., 2., 2., 2.], [2., 2., 2., 1., 1., 0., 2., 2., 2., 2., 2., 2.], [2., 2., 2., 2., 2., 2., 0., 1., 1., 2., 2., 2.], [2., 2., 2., 2., 2., 2., 1., 0., 1., 2., 2., 2.], [2., 2., 2., 2., 2., 2., 1., 1., 0., 2., 2., 2.], [2., 2., 2., 2., 2., 2., 2., 2., 2., 0., 1., 1.], [2., 2., 2., 2., 2., 2., 2., 2., 2., 1., 0., 1.], [2., 2., 2., 2., 2., 2., 2., 2., 2., 1., 1., 0.]])
В этом примере копфенетическое расстояние между точками на
Xкоторые очень близки (т.е., в одном углу), равна 1. Для других пар точек равна 2, потому что точки будут расположены в кластерах в разных углах - таким образом, расстояние между этими кластерами будет больше.