Если я не использую ключевое слово подключения, я получаю метки кластера [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)
Это не имело значения .
Ближе всего связанный с stackoverflow вопрос: Scikit-learn Матрица связности агломеративной кластеризации
Однако граф, подразумеваемый матрицей связности, имеет вид в моем случае подключено.
Подробнее здесь: https://stackoverflow.com/questions/784 ... es-not-wor