2013-12-16 36 views
0

我有一個很多用戶(超過1000萬)的列表,每個用戶都有一個用戶標識,後面跟着10個浮點數字,表示他們的偏好。我想用基於mapreduce的餘弦相似度高效地計算用戶相似度矩陣。但是,由於這些值是浮點數,因此很難確定mapreduce框架中的鍵。有什麼建議麼?mapreduce計算用戶相似度矩陣的方法

回答

2

我認爲最簡單的解決方案是Mahout庫。 Mahout中有幾個map-reduce相似性矩陣作業可能適用於您的用例。

第一個是Mahout的ItemSimilarityJob,它是其推薦系統庫的一部分。該作業的具體信息可以參見here。您只需提供所需格式的輸入數據,並選擇您的VectorSimilarityMeasure(對於您的情況將爲SIMILARITY_COSINE)以及任何其他優化。由於您正在計算基於10個浮點值的偏好向量來計算用戶 - 用戶相似度,因此您可以做的是爲矢量的索引分配一個簡單的1至10數字哈希,並生成一個簡單的.csv文件vectorIndex,userID,decimalValue作爲Mahout項目相似度作業(用戶ID是數值Int或Long值)的輸入。結果輸出應該是一個由用戶標識,用戶標識和相似性組成的選項卡分隔文本文件。

第二種解決方案可能是包含在其數學庫中的Mahout的RowSimilarityJob。我從來沒有用過它,但可以找到一些信息here並在此previous stackoverflow thread。而不是.csv作爲輸入,您需要將輸入數據翻譯爲DistributedRowMatrix,其中userID是矩陣的行。我相信,輸出也將是一個DistributedRowMatrix序列文件,其中包含您正在尋找的用戶 - 用戶相似性數據。

我想哪個解決方案更好取決於你喜歡什麼輸入/輸出格式。祝一切順利。