1

PySparks mllib包提供train()和trainimplicit()方法,分別用於在顯式和隱式數據上訓練推薦模型。PySpark如何在構建推薦人時融入用戶物品功能?

我想訓練隱式數據模型。更具體的物品購買數據。既然是在我的情況非常罕見,用戶將購買的物品超過一次,在「收視率」或「偏愛」始終爲1。所以,我的數據集的樣子:

u1, i1, 1 u1, i2, 1 u2, i2, 1 u2, i3, 1 ... un, im, 1

其中u是一個用戶和我一個項目。

我對用戶的人口統計,位置等以及項目功能都有很多功能。但是我不能在pyspark.mllib.als.trainpyspark.mllib.als.trainimplicit方法中包含用戶或項目功能。

或者,我考慮過使用fastFM或libfm。兩者都是分解因子化機器的軟件包,它實現了ALS求解器和框架推薦作爲迴歸/分類問題。使用這些情況下,我可以在訓練數據中包含用戶,項目和更多功能,如X。然而,預測變量y將只是一個向量(我沒有顯式評級只購買)。

我該如何解決這個問題?

回答

0

Spark中的MF是基於用戶項目事件(隱式)/評級(顯式)的簡單協作過濾實現。您可以通過預過濾或後置過濾數據爲2D(用戶項目)推薦器引入上下文信息。例如,你有一個人口統計信息M/F和kNN推薦人(可以是MF,無所謂),對於預過濾首先你要做的是隻選擇具有相同上下文的記錄。比你對他們運行kNN。對於MF,按照相同的方式,必須生成兩個模型 - 用於F和M.然後,在第一步生成建議時,選擇合適的模型。這兩種技術都在「推薦系統手冊」中有詳細描述。

建模上下文 - 調頻是一個好方法。想想,這篇文章可能對你有用:How to use Python's FastFM library (factorization machines) for recommendation tasks?。您會在那裏找到隱式用戶反饋引入的負面例子。並注意排名預測 - 主要是建議是一個正確的方法。

另一種選擇 - 引入自己的啓發式,例如通過破壞最後的比分。也許你有一些知識/業務目標/其他可以爲你或用戶帶來價值的東西。