2017-12-07 8 views
0

SciPy에서 계층 패키지를 사용하는 데 문제가 있습니다. 여기가 내 거리 매트릭스가 무엇의 예입니다SciPy를 이용한 계층 적 클러스터링 : 먼저 가장 먼 거리의 점을 병합하십시오.

[[ 0., 40., 33., 28.], 
[ 40., 0., 35., 28.], 
[ 33., 35., 0., 28.], 
[ 28., 28., 28., 0.]] 

내가 벡터로 변환 행렬와 나는 따라서는 ((순서대로 0 - 병합해야 매트릭스에서 가장 높은 값을 병합 계층 구조를 원하는 1) -2) -3). 이렇게하려면 'complete'매개 변수를 사용하고 있습니다. 설명서에이 매개 변수가 최대 값으로 사용되지만 실제로 생성됩니다. ((0-3) -2) -1)

코드가 연결 매트릭스를 계산하는 코드입니다.

Z = linkage(distArray, 'complete') 

어떤 조언이 필요합니까?

+0

FYI :'linkage'의 첫 번째 인수는 * 응축 된 (일명 * 압축 *) 거리 데이터의 일차 배열이어야합니다 (예 : https://stackoverflow.com/questions/13079563/how- 응축 - 거리 - 매트릭스 - 작업 - pdist/13079806 # 13079806), 또는 포인트의 원래 배열. 대칭 거리 배열을 압축 된 형식으로 변환하려면'squareform (distArray)'를 사용하십시오.'squareform'은'scipy.spatial.distance'에서 가져옵니다. –

답변

1

'완료'방법의 의미를 잘못 이해했습니다. {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가 실제로 나타내는 것을 고려하여 귀하의 맥락에서 의미있는 것을하십시오.

+0

나는 그 관계를 거꾸로하고 모든 것이 잘 작동한다. 그러나 연쇄 행렬에는 음수 값에 대해 불평하는 많은 시간이 있기 때문에 양수가 필요하다고 생각합니다. –

+0

이 예제에서는 나에게 불평하지 않았지만, 그렇다면'D.max()'에서 D를 뺀 것이 문제를 해결할 것입니다. 답변에 추가되었습니다. – FTP