나는 사용자와 그들이 좋아하는 항목의 큰 희소 행렬을 가지고 있습니다 (1M 사용자 및 100K 항목의 순서로, 매우 낮은 수준의 희소성). kNN 검색을 수행 할 수있는 방법을 모색 중입니다. 내 데이터 세트의 크기와 내가 수행 한 초기 테스트를 고려할 때, 사용할 방법이 병렬 또는 분산이어야한다고 가정합니다. 그래서 두 가지 종류의 가능한 솔루션을 고려하고 있습니다. 하나는 단일 멀티 코어 시스템에서 사용 가능하거나 합리적인 방법으로 구현 가능하고 다른 하나는 Spark 클러스터에서, 즉 MapReduce 프로그램입니다. 내가 생각한 세 가지 광범위한 아이디어는 다음과 같습니다.
- 코사인 유사성 메트릭을 가정하고 정규화 행렬을 전치로 전체 곱셈을 수행합니다 (외부 곱의 합으로 구현 됨).
- LH (locality-sensitive hashing) 사용
- PCA로 문제의 차원을 먼저 줄입니다.
이 문제를 해결할 수있는 다른 방법에 대한 의견이나 조언을 부탁드립니다.