使用Spark進行ALS編程的例子可以看:http://www.cnblogs.com/charlesblc/p/6165201.html
ALS:alternating least squares
關於協同過濾ALS原理的可以看這篇文章:http://www.docin.com/p-938897760.html
最后的懲罰因子那部分沒看懂。前面的還挺好的。
上面3.1節關於矩陣分解模型的自然意義和解釋,講的非常好!
注:矩陣的每一行代表一個方程,m行代表m個線性聯立方程。 n列代表n個變量。如果m是獨立方程數,根據m<n、m=n、m>n確定方程是 ‘欠定’、‘適定’ 還是 ‘超定’。
注:frobenius范數的定義?
矩陣的模:就是矩陣中每個元素的平方和再開方。
下面這篇講的內容主要是Spark關於ALS的實現,
也很好:http://www.dataguru.cn/article-7049-1.html
我們把一個協同推薦的問題通過低秩假設成功轉變成了一個優化問題。下面要討論的內容很顯然:這個優化問題怎么解?其實答案已經在 ALS 的名字里給出——交替最小二乘。(最小二乘法,見下)
ALS 的目標函數不是凸的,而且變量互相耦合在一起,所以它並不算好解。
注:凸函數還有一個重要的性質:對於凸函數來說,局部最小值就是全局最小值。
但如果我們把用戶特征矩陣U和產品特征矩陣V固定其一,這個問題立刻變成了一個凸的而且可拆分的問題。比如我們固定U,那么目標函數就可以寫成
Spark MLlib的性能很棒:
大家在 Spark 上實現機器學習算法時,不妨先分析一下空間、時間、和通信復雜度,然后合理的利用 Spark 的分區和緩存機制做到高效的實現。
最小二乘法
可以參考:http://blog.csdn.net/lotus___/article/details/20546259
最常用的是普通最小二乘法( Ordinary Least Square,OLS):所選擇的回歸模型應該使所有觀察值的殘差平方和達到最小。(Q為殘差平方和)- 即采用平方損失函數。
最小二乘法與梯度下降法
最小二乘法跟梯度下降法都是通過求導來求損失函數的最小值,那它們有什么區別呢。
相同
1.本質相同:兩種方法都是在給定已知數據(independent & dependent variables)的前提下對dependent variables算出出一個一般性的估值函數。然后對給定新數據的dependent variables進行估算。
2.目標相同:都是在已知數據的框架內,使得估算值與實際值的總平方差盡量更小(事實上未必一定要使用平方),估算值與實際值的總平方差的公式為:
不同
上面的所有文章,都是由下面這篇文章看到的:
https://www.zhihu.com/question/31509438/answer/52268608
上面文章里面i 和 j后面加.,指的是只考慮“評過分的”,未評分的不考慮。
其中提到了這篇文章:http://www.docin.com/p-714582034.html 里面的內容明顯是山寨的,就不貼了。
重要的是 加正則化參數,來防止過擬合。
總結一下:
ALS算法的核心就是將稀疏評分矩陣分解為用戶特征向量矩陣和產品特征向量矩陣的乘積
交替使用最小二乘法逐步計算用戶/產品特征向量,使得差平方和最小
通過用戶/產品特征向量的矩陣來預測某個用戶對某個產品的評分
兩個問題
(1)在第一個公式中加入正則化參數是啥意思?為什么是那種形態的?
(2)固定一個矩陣U,求偏導數之后可以得到求解V的公式,為什么?
回答:
(1)加入正則化項朴實點說就是避免分解出的值太大帶來過擬合的問題,至於為什么是這種形態,兩個原因:a、這樣就能很好避免分解出過大值的問題;b、計算求導方便,使得優化容易,同時盡可能減少模型估計誤差。
(2)固定一個矩陣求解另一個絕陣,這種方法其實就是坐標梯度下降法的一個變形,這種方法優點是計算優化簡單,缺點是收斂略慢,有興趣可以查看相關資料。
補充:(2):這是多元函數求極值的方法,回想一下最簡單的一元函數求極值,就是求其一階導數等於0的點。而多元函數求極值無非就是求使得每個偏導數等於0的點嘛。但是,每個偏導數等於0是原函數極值點的必要非充分條件。
補充:(1):正則化加入代價函數 L(U,V),求U,V 使 L(U,V) 趨近0則相當於把正則項最小化。這樣能夠讓模型不過擬合,具有更好的普適性。不同的正則化方法,能夠達到不同的防過擬合的效果,可以參考正則化用到的 L0 L1 L2 L3距離函數,在2~3維的圖像。(注:看起來上面那個是L2正則)
這篇文章對ALS-WR算法有描述,
開始我以為WR指的就是加入最后的正則化項(也叫代價函數,也叫懲罰因子),看起來不完全是。往下看。
http://blog.csdn.net/wguangliang/article/details/51539710
ALS-WR是alternating-least-squares with weighted-λ -regularization的縮寫,意為加權正則化交替最小二乘法。
該方法常用於基於矩陣分解的推薦系統中。例如:將用戶(user)對商品(item)的評分矩陣分解為兩個矩陣:一個是用戶對商品隱含特征的偏好矩陣,另一個是商品所包含的隱含特征的矩陣。在這個矩陣分解的過程中,評分缺失項得到了填充,也就是說我們可以基於這個填充的評分來給用戶最商品推薦了。
損失函數一般需要加入正則化項來避免過擬合等問題,我們使用L2正則化,所以上面的公式改造為:
到這里,協同過濾就成功轉化成了一個優化問題。
- 迭代步驟:首先隨機初始化Y,利用公式(3)更新得到X, 然后利用公式(4)更新Y, 直到均方根誤差變RMSE化很小或者到達最大迭代次數。
ALS-WR
上文提到的模型適用於解決有明確評分矩陣的應用場景,然而很多情況下,用戶沒有明確反饋對商品的偏好,也就是沒有直接打分,我們只能通過用戶的某些行為來推斷他對商品的偏好。
比如,在電視節目推薦的問題中,對電視節目收看的次數或者時長,這時我們可以推測次數越多,看得時間越長,用戶的偏好程度越高,但是對於沒有收看的節目,可能是由於用戶不知道有該節目,或者沒有途徑獲取該節目,我們不能確定的推測用戶不喜歡該節目。
ALS-WR通過置信度權重來解決這些問題:對於更確信用戶偏好的項賦以較大的權重,對於沒有反饋的項,賦以較小的權重。ALS-WR模型的形式化說明如下: