scipy.cluster.hierarchy.

fcluster#

scipy.cluster.hierarchy.fcluster(Z, t, критерий='inconsistent', глубина=2, R=None, monocrit=None)[источник]#

Формировать плоские кластеры из иерархической кластеризации, определённой данной матрицей связей.

Параметры:
Zndarray

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

tскаляр
Для критериев 'inconsistent', 'distance' или 'monocrit',

это порог, применяемый при формировании плоских кластеров.

Для критериев 'maxclust' или 'maxclust_monocrit',

это будет максимальное количество запрошенных кластеров.

критерийstr, optional

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

inconsistent :

Если узел кластера и все его потомки имеют значение несогласованности меньше или равное t, тогда все его листовые потомки принадлежат к одному плоскому кластеру. Когда ни один несинглетный кластер не удовлетворяет этому критерию, каждый узел назначается в свой собственный кластер. (По умолчанию)

distance :

Формирует плоские кластеры так, что исходные наблюдения в каждом плоском кластере имеют не большее копфенетическое расстояние, чем t.

maxclust :

Находит минимальный порог r так чтобы копфенетическое расстояние между любыми двумя исходными наблюдениями в одном плоском кластере не превышало r и не более чем t формируются плоские кластеры.

monocrit :

Формирует плоский кластер из узла кластера c с индексом i, когда monocrit[j] <= t.

Например, чтобы пороговать по максимальному среднему расстоянию, вычисленному в матрице несоответствий R, с порогом 0.8, сделайте:

MR = maxRstat(Z, R, 3)
fcluster(Z, t=0.8, criterion='monocrit', monocrit=MR)
maxclust_monocrit :

Формирует плоский кластер из непростого узла кластера c когда monocrit[i] <= r для всех индексов кластеров i ниже и включая c. r минимизируется так, чтобы не более чем t образуются плоские кластеры. monocrit должен быть монотонным. Например, чтобы минимизировать порог t на максимальных значениях несогласованности так, чтобы образовалось не более 3 плоских кластеров, сделайте:

MI = maxinconsts(Z, R)
fcluster(Z, t=3, criterion='maxclust_monocrit', monocrit=MI)
глубинаint, необязательный

Максимальная глубина для выполнения расчёта несоответствия. Не имеет смысла для других критериев. По умолчанию 2.

Rndarray, необязательно

Матрица несогласованности для использования в 'inconsistent' критерий. Эта матрица вычисляется, если не предоставлена.

monocritndarray, необязательно

Массив длины n-1. monocrit[i] является статистикой, по которой пороговое значение применяется к неодиночному i. Вектор monocrit должен быть монотонным, т.е. для узла c с индексом i, для всех индексов узлов j, соответствующих узлам ниже c, monocrit[i] >= monocrit[j].

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

Массив длины n. T[i] это номер плоского кластера, к которому принадлежит исходное наблюдение i принадлежит.

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

linkage

для информации о том, как работают методы иерархической кластеризации.

Примечания

fcluster имеет экспериментальную поддержку совместимых с 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
>>> from scipy.spatial.distance import pdist

Все методы кластерной связи, например, scipy.cluster.hierarchy.ward сгенерировать матрицу связывания Z как их вывод:

>>> 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.        ]])

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

scipy.cluster.hierarchy.fcluster может использоваться для сглаживания дендрограммы, получая в результате назначение исходных точек данных отдельным кластерам.

Это назначение в основном зависит от порогового значения расстояния t - максимальное допустимое расстояние между кластерами:

>>> fcluster(Z, t=0.9, criterion='distance')
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12], dtype=int32)
>>> fcluster(Z, t=1.1, criterion='distance')
array([1, 1, 2, 3, 3, 4, 5, 5, 6, 7, 7, 8], dtype=int32)
>>> fcluster(Z, t=3, criterion='distance')
array([1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4], dtype=int32)
>>> fcluster(Z, t=9, criterion='distance')
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int32)

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

Во втором случае порог достаточно велик, чтобы позволить первым 4 точкам объединиться с их ближайшими соседями. Таким образом, здесь возвращается только 8 кластеров.

Третий случай, с гораздо более высоким порогом, позволяет соединить до 8 точек данных - поэтому здесь возвращаются 4 кластера.

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