我寫了一個火花程序來提出建議。然後我使用了ALS.recommendation庫。我做了一個小測試一個名爲trainData以下數據集:錯誤的推薦ALS.recommendation
(u1, m1, 1)
(u1, m4, 1)
(u2, m2, 1)
(u2, m3, 1)
(u3, m1, 1)
(u3, m3, 1)
(u3, m4, 1)
(u4, m3, 1)
(u4, m4, 1)
(u5, m2, 1)
(u5, m4, 1)
第一列包含用戶,第二個包含由用戶評價的項目和第三包含的收視率。
myModel = ALS.trainImplicit(trainData, 3, 5, 0.01, 1.0)
我嘗試使用這個指令來檢索U1一些建議:
recommendations = myModel.recommendProducts(idUser, 2)
其中ID用戶包含ID影響
在用Scala編寫我的代碼使用訓練模式給用戶u1 作爲推薦,我獲得:
(u1, m1, 1.0536233346170754)
(u1, m4, 0.8540954252858661)
(u1, m3, 0.09069877419040584)
(u1, m2, -0.1345521479521654)
正如您所看到的,前兩行顯示建議的項目是u1已經評級的項目(m1和m4)。 無論我選擇何種用戶來獲得建議,我總是會得到相同的行爲(建議的第一項是用戶已經評分的項目)。
我覺得很奇怪!任何地方都有問題嗎?
我不同意你的答案達成一致。因爲您描述的預期行爲與「Spark with Advanced analytics」一書中提出的解釋和示例不符。 – semteu
使用來源和文檔中的信息更新了我的答案 –