[協同過濾] : 交替最小二乘法


1. 基礎回顧

矩陣的奇異值分解 SVD

(特別詳細的總結,參考 http://blog.csdn.net/wangzhiqing3/article/details/7446444)

  • 矩陣與向量相乘的結果與特征值,特征向量有關。
  • 數值小的特征值對矩陣-向量相乘的結果貢獻小

1)低秩近似

2)特征降維

相似度和距離度量

(參考 http://blog.sina.com.cn/s/blog_62b83291010127bf.html

2. ALS 交替最小二乘(alternating least squares

在機器學習中,ALS 指使用交替最小二乘求解的一個協同推薦算法。

  • 它通過觀察到的所有用戶商品打分,來推斷每個用戶的喜好並向用戶推薦適合的商品。

     

每一行代表一個用戶(u1,u2,…,u8), 每一列代表一個商品(v1,v2,…,v8),用戶的打分為1-9分。

這個矩陣只顯示了觀察到的打分,我們需要推測沒有觀察到的打分。

  • ALS的核心就是這樣一個假設:打分矩陣是近似低秩的。

換句話說,就是一個m*n的打分矩陣可以由分解的兩個小矩陣U(m*k)V(k*n)的乘積來近似,即 A=UVT,k<=m,n 。這就是ALS的矩陣分解方法。

這樣我們把系統的自由度從O(mn)降到了O((m+n)k)

  • 低維空間的選取。

這個低維空間要能夠很好的區分事物,那么就需要一個明確的可量化目標,這就是重構誤差

ALS中我們使用 F范數 來量化重構誤差,就是每個元素重構誤差的平方和。這里存在一個問題,我們只觀察到部分打分,A中的大量未知元是我們想推斷的,所以這個重構誤差是包含未知數的。

解決方案很簡單:只計算已知打分的重構誤差。

     

 3. 協同過濾

協同過濾分析用戶以及用戶相關的產品的相關性,用以識別新的用戶-產品相關性。

協同過濾系統需要的唯一信息是用戶過去的行為信息,比如對產品的評價信息。

  • 推薦系統依賴不同類型的輸入數據,最方便的是高質量的顯式反饋數據,它們包含用戶對感興趣商品明確的評價。例如,Netflix收集的用戶對電影評價的星星等級數據。
  • 但是顯式反饋數據不一定總是找得到,因此推薦系統可以從更豐富的隱式反饋信息中推測用戶的偏好。 隱式反饋類型包括購買歷史、瀏覽歷史、搜索模式甚至鼠標動作。

4. 顯示反饋模型

通過內積 rij = uivj 來預測,另外加入正則化參數 lamda 來預防 過擬合

最小化重構誤差:

 

5. 隱式反饋模型

偏好:二元變量 ,它表示用戶 對商品 v的偏好

信任度:變量 ,它衡量了我們觀察到的信任度

最小化損失函數:

6.  求解:最優化

1)顯示和隱式的異同:

  • 顯示模型只基於觀察到的值;隱式需要考慮不同的信任度,最優化時需要考慮所有可能的u,v

2) 交替最小二乘求解:

即固定 uvi+1 再固定 vi+1   ui+1

 

7. 例子

import org.apache.spark.mllib.recommendation._
//處理訓練數據 val data = sc.textFile("data/mllib/als/test.data") val ratings = data.map(_.split(',') match { case Array(user, item, rate) => Rating(user.toInt, item.toInt, rate.toDouble) }) // 使用ALS訓練推薦模型 val rank = 10 val numIterations = 10 val model = ALS.train(ratings, rank, numIterations, 0.01)
  • ALS算法實現於org.apache.spark.ml.recommendation.ALS.scala文件中
  • Rating也在recommendation里面

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM