2011-04-19 4 views
3

저는 hcluster 모듈을 사용하여 거리 매트릭스에서 덴 드로 그램을 계산하고 있습니다.python hcluster, 거리 매트릭스 및 압축 거리 매트릭스

import hcluster 
import numpy as np 

mols = (..a list of molecules) 
distMatrix = np.zeros((10, 10)) 
    for i in range(0,10):  
    for j in range(0,10): 
     sim = OETanimoto(mols[i],mols[j]) # a function to calculate similarity between molecules 
     distMatrix[i][j] = 1 - sim 

그때 축합 벡터에 행렬 변환 및 vecLink = hcluster.linkage(distVec)와 결합 매트릭스를 계산하도록 명령 distVec = hcluster.squareform(distMatrix)을 사용 내 거리 행렬은 다음과 같이 생성 된 배열의 배열이다.

이 모든 잘 작동하지만 거리 행렬이 아닌 압축 된 벡터를 사용하여 연결 행렬을 계산하는 경우 matLink = hcluster.linkage(distMatrix) 내가 다른 연결 행렬을 얻을 수 (노드 사이의 거리가 훨씬 더 크고 토폴로지는 약간 다릅니다)

이제는 hcluster가 압축 된 벡터에서만 작동하기 때문에 또는 내가 거기에서 실수를 저질렀는지 여부가 확실하지 않습니다.

도움 주셔서 감사합니다.

답변

2

나는 당신과 비슷한 빠른 무작위 예제를 만들어 내고 같은 문제가 발생했습니다. 문서 문자열에서 다음과 같이 말합니다.

축약 된 거리 행렬 y에서 계층 적/집계 적 클러스터링을 수행합니다. y는 다음과 같아야합니다. 수학 : {n \choose 2} 크기가 벡터 여기서 n은 원거리 관측치의 쌍의 원래 관찰 수입니다.

그러나 코드를 살펴보면 벡터 모양과 매트릭스 모양의 코드로 작업하는 것이 목적처럼 보입니다. hierachy.py에는 매트릭스 모양을 기반으로하는 스위치가 있습니다 . 정보의 키 비트 기능 결합의 문서화 문자열에 있는지 그러나 보인다

- Q : ndarray 
     A condensed or redundant distance matrix. A condensed 
     distance matrix is a flat array containing the upper 
     triangular of the distance matrix. This is the form that 
     ``pdist`` returns. Alternatively, a collection of 
     :math:`m` observation vectors in n dimensions may be passed as 
     a :math:`m` by :math:`n` array. 

그래서 나는 인터페이스가 거리 행렬의 통과를 허용하지 않습니다라고 생각합니다. 대신 N 차원에서 m 관측 벡터를 전달한다고 생각합니다. 따라서 결과의 차이는?

합리적으로 보입니까?

다른 코드를 살펴보면 디버깅하고 예제가 다른 이유를 알 수있을 것입니다.

환호 매트

+0

안녕 매트, 답장을 보내 주셔서 감사 많은. 벡터의 전달이 갈 길이라는 말을 듣고 안심할 수 있습니다. –