2015-04-02 41 views
0

我有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));

在這裏,我得到了幾個問題:

  1. 在運行時:java.lang中.UnsupportedOperationException(如我發現here,FileDataModel其實ca不會更新。我不知道爲什麼函數setPreference首先存在......)
  2. APIsetPreference指出「這種方法也應該被認爲是相對較慢的」。

我看到周圍的解決方案是使用增量文件,但我找不到實際的含義。關於如何加快我的寫作偏好流程的任何建議?

請注意,我是新來的象夫和推薦系統,所以請使用淺白;)

回答

1

你確定這個問題是寫作的結果?在我看來,真正的問題是使用基於用戶的推薦器。

對於這樣一個小的數據集,例如,基於搜索的推薦人將能夠在少於一毫秒的時間內提出推薦,同時可以提供多個推薦。這應該允許您在一臺機器上幾分鐘內完成200,000條建議。

對於這樣一個小的數據集,基於指標的方法可能不是最好的選擇。爲了改善這種情況,請嘗試使用更大的歌曲,例如百萬首歌曲數據集。請參閱http://labrosa.ee.columbia.edu/millionsong/

另外,如果您要構建真正的推薦人,則使用和評估評級並不是一件特別好的事情。

最後,有關Mahout的問題更好地發送到Mahout郵件列表本身。

+0

這是一門課程的任務,所以我必須遵循一些限制......我看到你也在郵件列表中回答了我。我會繼續在那裏討論。謝謝! – PLB 2015-04-03 16:12:27

+0

自Mahout郵件列表中進行討論後,我接受了此答案。對於誰會遇到這個問題,一個提示:性能限制(我認爲)主要是由於「estimatePreference」方法的糟糕表現 – PLB 2015-04-09 08:10:06