'완료'방법의 의미를 잘못 이해했습니다. {A, B}와 {C, D}의 두 클러스터 사이의 거리는 쌍 거리 AC, AD, BC, BD의 최대 값으로 간주됩니다. 이는 계층 적 클러스터링이 근처의 클러스터와 서로 거리가 가장 가까운 클러스터를 결합한다는 사실을 변경하지 않습니다. "매우 멀리 떨어져있는 경우 점을 결합하는"클러스터링 방법은 없습니다.
거리 매트릭스에 큰 항목 (D라고 함)을 사용하여 "다음과 유사 함"을 의미하는 경우 거리 사이의 순서 관계를 반전시키기 위해 D를 변형해야합니다. 즉, 매트릭스는 개체의 유사성을 측정하며 dis 유사성 측정이 필요합니다.
가장 간단한 방법은 기호를 변경하는 것입니다. linkage
은 실제로 거리가 양수가 필요하지 않습니다. 결합을 나타내는
from scipy.cluster.hierarchy import linkage
from scipy.spatial.distance import squareform
linkage(-squareform(D), 'complete')
복귀
array([[ 0., 1., -40., 2.],
[ 2., 4., -33., 3.],
[ 3., 5., -28., 4.]])
((0-1) -2) -3. 음의 값은 문제가있는 경우
, 음수 생산하지 않는 다른 변형이 있습니다 :
linkage(D.max() - squareform(D), 'complete')
또는
linkage(squareform(D)**(-1), 'complete')
모든 이들은 완전한 '만큼 동일한 계층 구조를 반환합니다 '방법이다'.
'완료'가 반드시 필요한 것은 아니라는 것을 알게되었으므로 다른 방법도 고려해 볼 수 있습니다. 그러면 D에 부과 된 변형 효과가 결과를 변경시킬 수 있습니다. D가 실제로 나타내는 것을 고려하여 귀하의 맥락에서 의미있는 것을하십시오.
FYI :'linkage'의 첫 번째 인수는 * 응축 된 (일명 * 압축 *) 거리 데이터의 일차 배열이어야합니다 (예 : https://stackoverflow.com/questions/13079563/how- 응축 - 거리 - 매트릭스 - 작업 - pdist/13079806 # 13079806), 또는 포인트의 원래 배열. 대칭 거리 배열을 압축 된 형식으로 변환하려면'squareform (distArray)'를 사용하십시오.'squareform'은'scipy.spatial.distance'에서 가져옵니다. –