0

編輯:我嘗試了一個獨立的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()其預計用戶已評級的項目明確的評價值。

source

是文檔錯了嗎?我仍然認爲顯式反饋符合我的用例。也許我需要修改模板ALS.train才能獲得有用的建議?或者我只是誤解了一些東西?

+0

您的評分​​來自哪裏?他們是計算還是明確要求用戶對1到10之間的項目進行評分?如果是這樣,那麼你確實使用明確的反饋 – alex9311

+0

@ alex9311的確,用戶評分爲1到10的項目。我有幾百萬的評級。 – stholzm

回答

0

很大程度上取決於您如何收集數據。通常看起來明確的評級實際上可能是隱含的。例如,假設您允許用戶對之前購買/使用的商品進行評級。這意味着他們花時間評估該特定項目的事實意味着該項目的質量很高。因此,質量差的項目根本沒有評分,因爲人們甚至懶得使用它們。因此,即使數據集的目的是明確的,您可能會得到更好的結果,因爲如果您認爲結果是隱含的。再一次地,這取決於數據的獲得方式。

相關問題