2010-12-05 7 views
3

저는 파이썬에서 hcluster 라이브러리를 사용하려고합니다. hcluster에서 드문 드문 한 행렬을 사용하기에 충분한 파이썬 지식이 없습니다. 아무나 도와주세요. 그래서, 내가 뭘하는지 :python hcluster에서 스파 스 매트릭스를 사용하는 방법?

import os.path 
import numpy 
import scipy 
import scipy.io 
from hcluster import squareform, pdist, linkage, complete 
from hcluster.hierarchy import linkage, from_mlab_linkage 
from numpy import savetxt 
from StringIO import StringIO 

data.dmp 매트릭스를 포함하는 것은 다음과 같습니다

A B C D 
A 0 1 0 1 
B 1 0 0 1 
C 0 0 0 0 
D 1 1 0 0 

매트릭스의 오른쪽 상단 부분이 포함되어 있습니다. 1 0 1 0 1 0

f = file('data.dmp','r') 
s = StringIO(f.readline()).getvalue() 
f.close() 

matrix = numpy.asarray(eval("["+s+"]")) 

알 수없는 이유로 나를 위해 : 나는 제대로 :) 그래서, 모든 숫자가 너무 data.dmp에 포함 된 상위 대각선 주보다 영어로 철자하는 방법을 모른다 hcluster는! = 경우, 예를 들어 I 0을 사용 C 반전 된 값을 사용하고, (만약

sqfrm = squareform(matrix) 
Y = pdist(sqfrm, metric="cosine") 

연결기 Y는

Z = linkage(Y, method="complete") 

따라서 행렬 Z는 I 할 것 인 ==의 D 있다면 1을 사용 hcluster를 올바르게 사용 했습니까?)

하지만 다음 문제가 :

내가 시간이 지금처럼 를 입력 데이터를 생성하기 위해 소모 의 원인, 에 대한 입력 데이터의 엄청난 금액을 스파 스 매트릭스를 사용하려면
  1. , 나는 데이터를 가져올 필요를 다른 언어의 파이썬, 그게 왜 내가 텍스트 파일을 읽을 필요가 있습니다. 제발, 친절하게, 파이썬 전문가가 제안하는 방법 만드시겠습니까? 파이썬에게 hcluster을 사용하는 사람들에

  2. , I 행 수백, 데이터의 거대한 양을 처리해야, 는 hcluster에서 할 수있어? 이 알고리즘은 정확하게 HAC를 정확하게 생성합니까?

감사합니다. 도움을 주셔서 감사합니다.

+0

필자는이 코드가 어떻게 작동 하는지를 상상할 수 없습니다. 우선, 'hcluster에서 import scipy.io'는'from hcluster import scipy.io'이어야합니다. 첫 번째 대안은 통사론이 아니다. – hughdbrown

+0

아, 네 말이 맞아. 나는 수입 라인을 다시 작성합니다. 루비 스타일로 서식을 지정하는 이유는 다음과 같습니다 :) – Daniel

답변

2

입력을 기능 이름에서 값까지 사전으로 각각 나타냅니다. 사전에는 0이 없습니다.

hcluster.pdist을 사용하지 않고 Y 행렬을 직접 계산하십시오. 다음 코드는 제곱 오차가 희박합니다. 제곱 오류는 코사인 거리와 같습니다. IF 모든 피쳐 벡터를 정규화합니다.

def sqrerr(repr1, repr2): 
    """ 
    Compute the sqrerr between two reprs. 
    The reprs are each a dict from feature to feature value. 
    """ 
    keys = frozenset(repr1.keys() + repr2.keys()) 
    sqrerr = 0. 
    for k in keys: 
     diff = repr1.get(k, 0.) - repr2.get(k, 0.) 
     sqrerr += diff * diff 
    return sqrerr 

계산하려는 Y [i, j] 요소마다 sqrerr을 호출해야합니다.

Y를 정방 행렬로 만들고 Y [i, j] == Y [j, i]인지 확인하십시오. 방법 hcluster.squareform을 사용하여 Y를 hcluster.linkage에 적합한 형식으로 변환하십시오.

관련 문제