協同過濾常用於推薦系統,這項技術旨在填補 丟失的user-item關聯矩陣 的條目,spark.ml目前支持基於模型的協同過濾(用一些丟失條目的潛在因素在描述用戶和產品)。spark.ml使用ALS(交替最小二乘法)去學習這些潛在因素。在spark.ml中的實現有以下參數:
numBlocks:塊的數量,user和item將被分成多少塊,以並行計算。(默認10)
ranK:模型隱含因素的個數。(默認10)
maxIter:模型的最大迭代次數。(默認10)
regParam :ALS的正則化參數。(默認1.0)
implicitPrefs :使用顯式反饋還是隱式反饋。(默認false,即顯式反饋)
alpha:信心權重所應達到的基准線。(默認1.0)
nonnegative :是否使用非負數的約束。(默認false)
注意:基於dataFrame - API的ALS目前只支持整數型的userID和itemID,其他數字類型也支持,但是取值范圍必須在整數之內。
顯式反饋VS隱式反饋
標准的基於矩陣分解的協同過濾方法對待user-item矩陣的條目項 是顯式地給出user對item的偏好,例如,用戶給電影評級。
而現實生活中常見案例是只能有隱式反饋(例如:視圖,點擊鼠標,購買,喜歡,分享……)。在spark.ml中使用的方法是:對隱式反饋數據集的協同過濾。實際上,這種方法不是直接對數據矩陣進行建模,而是將數據視為代表用戶行為意願強度的數字(例如點擊的次數或某人累積觀看電影的時間)。然后,這些數字與觀察到的用戶偏好的置信水平相關,而不是給予項目的明確評級。 然后,該模型嘗試找到可用於預測用戶對項目的預期偏好的潛在因素。