編輯:我嘗試了一個獨立的Spark應用程序(而不是PredictionIO),我的觀察結果是一樣的。所以這不是一個PredictionIO問題,但仍然令人困惑。爲什麼ALS.trainImplicit爲顯式評分提供更好的預測?
我正在使用PredictionIO 0.9.6和Recommendation模板進行協作過濾。我的數據集中的評分是1到10之間的數字。當我第一次使用模板中的默認值訓練模型時(使用ALS.train
),預測是可怕的,至少是主觀的。分數高達60.0左右,但建議似乎完全是隨機的。
有人建議ALS.trainImplicit
做了更好的工作,所以我改變src/main/scala/ALSAlgorithm.scala
相應:
val m = ALS.trainImplicit( // instead of ALS.train
ratings = mllibRatings,
rank = ap.rank,
iterations = ap.numIterations,
lambda = ap.lambda,
blocks = -1,
alpha = 1.0, // also added this line
seed = seed)
成績要低得多,現在(低於1.0),但建議與個人收視線。更好,但也令人困惑。 PredictionIO定義明確和隱含這樣的區別:
明確的偏好(也稱爲「顯式反饋」),由用戶提出的項目,如 「評級」。隱性偏好(也稱爲「隱式反饋」,如 ),如「查看」和「購買」歷史。
和:
默認情況下,推薦模板使用
ALS.train()
其預計用戶已評級的項目明確的評價值。
是文檔錯了嗎?我仍然認爲顯式反饋符合我的用例。也許我需要修改模板ALS.train
才能獲得有用的建議?或者我只是誤解了一些東西?
您的評分來自哪裏?他們是計算還是明確要求用戶對1到10之間的項目進行評分?如果是這樣,那麼你確實使用明確的反饋 – alex9311
@ alex9311的確,用戶評分爲1到10的項目。我有幾百萬的評級。 – stholzm