가장 가까운 이웃은 매우 높은 차원의 데이터를 검색합니다


17

나는 사용자와 그들이 좋아하는 항목의 큰 희소 행렬을 가지고 있습니다 (1M 사용자 및 100K 항목의 순서로, 매우 낮은 수준의 희소성). kNN 검색을 수행 할 수있는 방법을 모색 중입니다. 내 데이터 세트의 크기와 내가 수행 한 초기 테스트를 고려할 때, 사용할 방법이 병렬 또는 분산이어야한다고 가정합니다. 그래서 두 가지 종류의 가능한 솔루션을 고려하고 있습니다. 하나는 단일 멀티 코어 시스템에서 사용 가능하거나 합리적인 방법으로 구현 가능하고 다른 하나는 Spark 클러스터에서, 즉 MapReduce 프로그램입니다. 내가 생각한 세 가지 광범위한 아이디어는 다음과 같습니다.

  • 코사인 유사성 메트릭을 가정하고 정규화 행렬을 전치로 전체 곱셈을 수행합니다 (외부 곱의 합으로 구현 됨).
  • LH (locality-sensitive hashing) 사용
  • PCA로 문제의 차원을 먼저 줄입니다.

이 문제를 해결할 수있는 다른 방법에 대한 의견이나 조언을 부탁드립니다.


1
방금이 영역을 조사하고 내가 찾은 내용에 대한 블로그 게시물을 작성했습니다. 나는 LSH를 사용했지만 내 희소성 수준이 당신이 찾고있는 것보다 높다고 생각합니다. tttv-engineering.tumblr.com/post/109569205836/…
Philip Pearl

답변:


15

다음 자료 가 문제 해결에 대한 추가 아이디어 를 얻을 수 있기를 바랍니다 .

1) 연구 논문 "고차원 희소 데이터를위한 효율적인 K- 최근 접 이웃 가입 알고리즘" : http://arxiv.org/abs/1011.2807

2) 수업 프로젝트 논문 "협업 필터링 기반의 추천 시스템" (Stanford University) : http://cs229.stanford.edu/proj2008/Wen-RecommendationSystemBasedOnCollaborativeFiltering.pdf

3) Netflix Prize 경쟁 ( k-NN 기반 ) 프로젝트 : http://cs.carleton.edu/cs_comps/0910/netflixprize/final_results/knn/index.html

4) 연구 논문 "공간에있는 허브 : 차원 적 현상 의 저주머신 러닝 과의 일반적인 관계 , 특히 k-NN 알고리즘 과의 관계 에 관한 가장 가까운 이웃 인 고차원 데이터의 이웃 : http://jmlr.org /papers/volume11/radovanovic10a/radovanovic10a.pdf

5) 스파 스 k-NN 분류를위한 소프트웨어 (무료이지만 오픈 소스가 아닌 것으로 보임-저자와 명확히 할 수 있음) : http://www.autonlab.org/autonweb/10408.html

6) 여러 토론 스레드StackOverflow의 :

7) 머신 러닝 ( http://select.cs.cmu.edu/code/graphlab )을 위한 오픈 소스 병렬 프레임 워크 인 GraphLab에 주의를 기울이 십시오.이 모델은 http : //select.cs.cmu 모델을 통해 병렬 클러스터링 을 지원합니다 . edu / code / graphlab / clustering.htmlMapReduce

관련 패키지 및 페이지에 대한 링크는 /datascience//a/918/2452 에서 스파 스 회귀 분석의 Data Science StackExchange에서 내 대답을 확인할 수도 있습니다 .RCRAN Task View


4

협업 필터링 작업을 수행하는 경우 낮은 순위의 행렬 근사치로 문제를 제기해야합니다. 여기서 두 사용자는 동일한 저 차원 공간에 항목이 함께 포함됩니다. 그러면 유사성 검색이 훨씬 간단 해집니다. 제안한대로 LSH를 사용하는 것이 좋습니다. 아직 언급되지 않은 차원 축소를위한 또 다른 유익한 방법은 랜덤 프로젝션 입니다.


1

다음을 사용해야합니다 : PySparNN , 페이스 북이 최근에 파이썬으로 구현 한 피 묻은 것입니다. 사용하기도 쉽습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.