我有6000個用戶評分3900部電影的800.000條記錄的訓練數據集。 這些存儲在逗號分隔的文件中,如:。 我有另一個數據集(200.000條記錄),格式爲:userId,movieId
。我的目標是使用第一個數據集作爲訓練集,以確定第二組缺失的偏好。Mahout:(快速性能)如何將首選項寫入文件?
到目前爲止,我設法加載了訓練數據集,並生成了基於用戶的建議。這非常順利,並且不需要太多時間。但是在寫回建議時我很掙扎。
我嘗試的第一個方法是:
- 從文件中讀取一行並獲得
userId,movieId
元組。 - 檢索與
estimatePreference(userId, movieId)
- 計算的優先級,優先追加到行,並將其保存在一個新的文件
這的作品,但它是令人難以置信的慢(我加了一個櫃檯打印每10.000th迭代:後一兩分鐘,它只能打印一次我有8GB-RAM與酷睿i7芯...能需要多長時間來處理200.000行?!)
我的第二個的choise是:
- 創建一個新
FileDataModel
與第二數據集 做這樣的事情:
newDataModel.setPreference(userId, movieId, recommender.estimatePreference(userId, movieId));
在這裏,我得到了幾個問題:
- 在運行時:java.lang中.UnsupportedOperationException(如我發現here,
FileDataModel
其實ca不會更新。我不知道爲什麼函數setPreference
首先存在......) - API的
setPreference
指出「這種方法也應該被認爲是相對較慢的」。
我看到周圍的解決方案是使用增量文件,但我找不到實際的含義。關於如何加快我的寫作偏好流程的任何建議?
請注意,我是新來的象夫和推薦系統,所以請使用淺白;)
這是一門課程的任務,所以我必須遵循一些限制......我看到你也在郵件列表中回答了我。我會繼續在那裏討論。謝謝! – PLB 2015-04-03 16:12:27
自Mahout郵件列表中進行討論後,我接受了此答案。對於誰會遇到這個問題,一個提示:性能限制(我認爲)主要是由於「estimatePreference」方法的糟糕表現 – PLB 2015-04-09 08:10:06