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