-1

的情況是這樣的:的Apache Mahout的訓練樣本數據VS實現實際數據

我嘗試使用Apache mahaout做出推薦,我有一些樣本的偏好(用戶,項目,優先值)數據生成相似度矩陣並確定項目項目相似度。但實際偏好數據比樣本偏好數據大得多。實際首選項數據中出現的項目ID列表也都出現在樣本首選項數據中。但樣本數據中的用戶標識比實際數據要小得多。

現在,當我嘗試在實際數據上運行推薦器時,它一直給我提示用戶標識不存在,因爲它不存在於示例數據中。我如何在mahout的推薦器中注入新的用戶id和他們的偏好,以便它可以基於項目項目相似性爲任何用戶提供建議?或者,如果有任何其他方式可以爲新用戶提供建議,請提出建議。

謝謝。

+0

如果你喜歡答案,你應該把它標記爲接受,所以其他人可以從中受益,並會鼓勵他人來幫助你 –

回答

0

如果您認爲您的示例數據已完成以計算項目相似度,爲什麼不預先計算它們並使用Collection<GenericItemSimilarity.ItemItemSimilarity> corrMatrix = new ArrayList<GenericItemSimilarity.ItemItemSimilarity>();來存儲您的預計算相似度。然後這個,你可以創建你ItemSimilarity這樣的:ItemSimilarity similarity = new GenericItemSimilarity(correlationMatrix);

我認爲這是不使用你的數據計算基於偏好值項項相似的樣品好主意,因爲你可能會丟失很多有用的數據。如果您認爲即時計算速度很慢,則可以預先計算並將其存儲在數據庫中,並在需要時加載它。

如果您仍然收到此錯誤,那麼您可能會在推薦分類中使用示例數據模型,或者您使用UserSimilarity來計算項目相似性。

如果你想添加新用戶,你可以使用Mahout的FileDataModel並通過包含新用戶(我認爲你可以用一些後綴創建新文件,我不確定)定期更新文件。你可以在Mahout in Action這本書中找到更多關於這方面的信息。內存中的DataModel實現是不可變的。您可以通過實施方法setPreference()removePreference()來擴展它們。

編輯:我有一個MutableDataModel的實現,它擴展了AbstractDataModel。如果你願意,我可以與你分享。

+0

項目相似矩陣幾乎不需要10毫秒來生成,因爲我有400個項目和50000個用戶數據。所以我不想預先計算相似度矩陣。 setpreference()和removepreference()函數拋出一個異常java.lang.UnsupportedOperationException,因爲我正在使用FileDataModel。 – user3095388

+0

Mahout的這些類都沒有實現這些方法。你應該自己實施。我在說,如果使用FileDataModel,您可以更改文件並添加首選項,並調用Recommender.refresh()來強制數據模型重新加載幷包含新用戶。你應該真的從書中讀到這是如何完成的。我認爲,對於新用戶,您可以使用與原始文件相同的名稱和數字擴展名創建單獨的文件,即file001 ..就像那樣。從推薦程序調用刷新功能也會刷新所有緩存。 –

+0

非常感謝Dragan。 Recommender.refresh()對我來說工作得很好。你能指導我從哪裏可以閱讀更多關於Recommender.refresh?因爲我只希望推薦人刷新更改。刷新,而不是整個事情再次加載。謝謝您的幫助。 – user3095388