Аргумент ключевого слова «подключение» в sklearn AgglomerativeClustering не работает должным образом.Python

Программы на Python
Anonymous
Аргумент ключевого слова «подключение» в sklearn AgglomerativeClustering не работает должным образом.

Сообщение Anonymous »

В моем коде Python есть набор объектов, которые я хочу сгруппировать на основе заданной матрицы расстояний. Однако есть некоторые объекты, которые никогда не должны находиться в одном кластере. Количество кластеров выбирается таким, чтобы задача была разрешима. Я хочу использовать класс AgglomerativeClustering из библиотеки sklearn. Расстояние несовместимых объектов я установил равным 1, что в ряде случаев не помешало им оказаться в одном кластере. Я также попытался передать матрицу связности в AgglomerativeClustering через ключевое слово «connectivity». Это работает не во всех случаях. Ниже приведена краткая проблема.
Если я не использую ключевое слово подключения, я получаю метки кластера [0 1 0 1 0]. Это имеет смысл, поскольку несовместимые объекты 0 и 1 находятся в разных кластерах, а несовместимые объекты 2 и 3 — в разных кластерах. Однако когда я предоставляю матрицу связности, я получаю метки кластера [0 1 0 0 0]. Кажется, это противоречит отношениям связности в матрице связности, поскольку объекты 2 и 3 не должны находиться в одном кластере.
Разве я неправильно использую аргумент «связность»? Если да, то как его можно использовать для достижения того, что я описал выше?

Код: Выделить всё

import numpy as np
from sklearn.cluster import AgglomerativeClustering

n_clusters = 2

distance_matrix = np.array([
[0.,1.,0.,0.,0.],
[1.,0.,0.,0.,0.],
[0.,0.,0.,1.,0.],
[0.,0.,1.,0.,0.],
[0.,0.,0.,0.,0.]
])

connectivity_matrix = np.array([
[True, False, True, True, True],
[False, True, True, True, True],
[True, True, True, False, True],
[True, True, False, True, True],
[True, True, True, True, True]
])

agglomerativeClustering = AgglomerativeClustering(n_clusters=n_clusters, metric='precomputed',
linkage='average')
cluster_labels_wo_connectivity_matrix = agglomerativeClustering.fit_predict(distance_matrix)

agglomerativeClustering = AgglomerativeClustering(n_clusters=n_clusters, metric='precomputed',
linkage='average', connectivity=connectivity_matrix)
cluster_labels_with_connectivity_matrix = agglomerativeClustering.fit_predict(distance_matrix)

print("Cluster labels without considering connectivity matrix: ", cluster_labels_wo_connectivity_matrix)
print("Cluster labels with considering connectivity matrix: ", cluster_labels_with_connectivity_matrix)

Я пытался выбрать другие типы «связей», которые иногда помогают, а иногда нет. Я попытался создать вызываемый объект, который возвращает матрицу связности, например, "kneighbors_graph" в этом примере: https://scikit-learn.org/stable/auto_ex ... ering.html
Это не имело значения .
Ближе всего связанный с stackoverflow вопрос: Scikit-learn Матрица связности агломеративной кластеризации
Однако граф, подразумеваемый матрицей связности, имеет вид в моем случае подключено.

Подробнее здесь: https://stackoverflow.com/questions/784 ... es-not-wor

Вернуться в «Python»