2013-12-16 7 views
0

각 사용자의 사용자 선호도를 나타내는 10 개의 부동 소수점 숫자가 뒤에 오는 사용자 ID로 표시되는 많은 사용자 목록 (1,000 만 개 이상)이 있습니다. Mapreduce를 기반으로 한 코사인 유사성을 사용하여 사용자 유사성 행렬을 효율적으로 계산하고 싶습니다. 그러나 값은 부동 소수점 숫자이므로 맵 축소 프레임 워크에서 키를 판별하기 어렵습니다. 어떤 제안?mapreduce 사용자 유사도 행렬을 계산하는 방법

답변

2

가장 쉬운 해결책은 Mahout 라이브러리가 될 것이라고 생각합니다. Mahout에는 map-reduce 유사성 매트릭스 작업이 몇 가지 있는데, 이는 유스 케이스에서 유용 할 수 있습니다.

첫 번째는 권장 시스템 라이브러리의 일부인 Mahout의 ItemSimilarityJob입니다. 해당 작업에 대한 구체적인 정보는 here입니다. 필요한 형식으로 입력 데이터를 제공하고 추가 최적화와 함께 VectorSimilarityMeasure (귀하의 경우 SIMILARITY_COSINE)을 선택하기 만하면됩니다. 10 개의 부동 소수점 값의 기본 설정 벡터를 기반으로 사용자 - 사용자 유사성을 계산하려고하기 때문에 할 수있는 일은 벡터의 인덱스에 대해 간단한 1 - 10 숫자 해시를 할당하고 간단한 .csv 파일을 생성하는 것입니다. vectorIndex, userID, decimalValue는 Mahout 항목 유사성 작업 (사용자 ID는 숫자 Int 또는 Long 값임)에 대한 입력으로 사용됩니다. 결과 출력은 userID, userID, 유사성의 탭 구분 텍스트 파일이어야합니다.

두 번째 해결책은 Mahout의 RowSimilarityJob이 수학 라이브러리에 포함되어있을 수 있습니다. 나는 그것을 직접 사용한 적이 없지만, 어떤 정보는 here이고이 previous stackoverflow thread에서 찾을 수 있습니다. .csv를 입력으로 사용하는 대신 입력 데이터를 DistributedRowMatrix으로 변환해야합니다. 사용자 ID는 행렬의 행입니다. 결과물은 찾고있는 사용자 - 사용자 유사성 데이터를 포함하는 DistributedRowMatrix 시퀀스 파일이 될 것이라고 나는 믿는다.

어느 솔루션이 더 나은지는 사용자가 선호하는 입/출력 형식에 따라 다릅니다. 모두 제일 좋다.