2013-08-10 2 views
8

희소 한 용어 - 문서 행렬 (희박한 행렬을 저장하기 위해 scipy.sparse.csr.csr_matrix을 사용 중입니다)로 변환 한 데이터의 큰 코퍼스 (텍스트)가 있습니다. 모든 문서에 대해 가장 가까운 n 개의 가장 가까운 이웃을 찾습니다. 나는 Python scikit-learn 라이브러리 (sklearn.neighbors.NearestNeighbor 정확한) 내 문제를 해결할 것이라고 NearestNeighbor 루틴을 기대했지만, KD trees 또는 Ball trees 같은 공간 분할 데이터 구조를 사용하는 효율적인 알고리즘은 희소 행렬과 함께 작동하지 않습니다. brute-force 알고리즘 만이 희소 행렬로 작동합니다 (이것은 큰 코퍼스를 다루는 경우에는 불가능합니다).희소 행렬에 대한 효율적인 최근 근접 검색

(파이썬 또는 다른 언어로) 스파 스 매트릭스에 대한 가장 가까운 이웃 검색을 효율적으로 구현합니까?

감사합니다.

답변

3

TruncatedSVD를 사용하여 고차원의 희소 한 데이터를 저밀도 데이터로 변환 한 다음 볼 트리를 만들 수 있습니다.

+0

볼 트리는 SVD 출력에서 ​​제대로 작동합니까? 일반적으로 텍스트 데이터의 경우 SVD가 100-200 차원을 유지하기를 원합니다 ... –

4

늦은 답 :에 Locality-Sensitive-Hashing

지원에서 찾아 보게 scikit을 배우기 herehere을 제안되었다.

+0

LSHForest가 작동하고 스파 스 매트릭스 입력이 2016 년에도 지원된다는 것을 확인할 수 있습니다. 단점은이 구현의 놀랄만 한 느림이며 버전 1의 출력이 적어도 정확하다고해도 버전 2가 필요할 수도 있습니다. 더 나은 속도를 위해서 저는 BallTree를 시도하고 SVD를 사용하여 먼저 Mathieu가 BallTree의 조밀 한 매트릭스 요구 사항을 지원하도록 제안한 것과 같은 차원을 줄였습니다. SVD를 사용하면 DBSCAN을 사용한 클러스터링을 지원할 수있는 잠재 기능을 찾을 수 있습니다. 마지막으로, 코사인 거리 메트릭은 LSHForest의 유일한 거리 메트릭입니다. 이는 많은 데이터가 아니라 모든 데이터에 유용합니다. –

관련 문제