為了方便介紹,假設推薦系統中有使用者集合有6個使用者,即u=,專案(物品)集合有7個專案,即v=,使用者對專案的評分結合為r,使用者對專案的評分範圍是[0, 5]。r具體表示如下:
矩陣分解演算法的數學理論基礎是矩陣的行列變換。在《線性代數》中,我們知道矩陣a進行行變換相當於a左乘乙個矩陣,矩陣a進行列變換等價於矩陣a右乘乙個矩陣,因此矩陣a可以表示為a=peq=pq(e是標準陣)。
矩陣分解目標就是把使用者-專案評分矩陣r分解成使用者因子矩陣和專案因子矩陣乘的形式,即r=uv,這裡r是n×m, n =6, m =7,u是n×k,v是k×m。直觀地表示如下:
高維的使用者-專案評分矩陣分解成為兩個低維的使用者因子矩陣和專案因子矩陣,因此矩陣分解和pca不同,不是為了降維。使用者i對專案j的評分r_ij =innerproduct(u_i, v_j),更一般的情況是r_ij =f(u_i, v_j),這裡為了介紹方便就是用u_i和v_j內積的形式。下面介紹評估低維矩陣乘積擬合評分矩陣的方法。
首先假設,使用者對專案的真實評分和**評分之間的差服從高斯分布,基於這一假設,可推導出目標函式如下:
最後得到矩陣分解的目標函式如下:
從最終得到得目標函式可以直觀地理解,**的分值就是盡量逼近真實的已知評分值。有了目標函式之後,下面就開始談優化方法了,通常的優化方法分為兩種:交叉最小二乘法(alternative least squares)和隨機梯度下降法(stochastic gradient descent)。
首先介紹交叉最小二乘法,之所以交叉最小二乘法能夠應用到這個目標函式主要是因為l對u和v都是凸函式。首先分別對使用者因子向量和專案因子向量求偏導,令偏導等於0求駐點,具體解法如下:
上面就是使用者因子向量和專案因子向量的更新公式,迭代更新公式即可找到可接受的區域性最優解。迭代終止的條件下面會講到。
接下來講解隨機梯度下降法,這個方法應用的最多。大致思想是讓變數沿著目標函式負梯度的方向移動,直到移動到極小值點。直觀的表示如下:
其實負梯度的負方向,當函式是凸函式時是函式值減小的方向走;當函式是凹函式時是往函式值增大的方向移動。而矩陣分解的目標函式l是凸函式,因此,通過梯度下降法我們能夠得到目標函式l的極小值(理想情況是最小值)。
言歸正傳,通過上面的講解,我們可以獲取梯度下降演算法的因子矩陣更新公式,具體如下:
(3)和(4)中的γ指的是步長,也即是學習速率,它是乙個超引數,需要調參確定。對於梯度見(1)和(2)。
下面說下迭代終止的條件。迭代終止的條件有很多種,就目前我了解的主要有
1) 設定乙個閾值,當l函式值小於閾值時就停止迭代,不常用
2) 設定乙個閾值,當前後兩次函式值變化絕對值小於閾值時,停止迭代
3) 設定固定迭代次數
另外還有乙個問題,當使用者-專案評分矩陣r非常稀疏時,就會出現過擬合(overfitting)的問題,過擬合問題的解決方法就是正則化(regularization)。正則化其實就是在目標函式中加上使用者因子向量和專案因子向量的二範數,當然也可以加上一範數。至於加上一範數還是二範數要看具體情況,一範數會使很多因子為0,從而減小模型大小,而二範數則不會它只能使因子接近於0,而不能使其為0,關於這個的介紹可參考**regression shrinkage and selection via the lasso。引入正則化項後目標函式變為:
(5)中λ_1和λ_2是指正則項的權重,這兩個值可以取一樣,具體取值也需要根據資料集調參得到。優化方法和前面一樣,只是梯度公式需要更新一下。
矩陣分解演算法目前在推薦系統中應用非常廣泛,對於使用rmse作為評價指標的系統尤為明顯,因為矩陣分解的目標就是使rmse取值最小。但矩陣分解有其弱點,就是解釋性差,不能很好為推薦結果做出解釋。
後面會繼續介紹矩陣分解演算法的擴充套件性問題,就是如何加入隱反饋資訊,加入時間資訊等。
矩陣分解SVD在推薦系統中的應用
參考自 其實說參考也不準確,準確地說應該是半翻譯半學習筆記。仔細整理一遍,感覺還是收穫很大的。任意乙個m n的矩陣a m行 n列,m n 可以被寫成三個矩陣的乘積 1.u m行m列的列正交矩陣 2.s m n的對角線矩陣,矩陣元素非負 3.v n n的正交矩陣的倒置 即a u s v 注意矩陣v需要...
矩陣分解在協同過濾推薦演算法中的應用
在推薦系統中,我們常常遇到的問題是這樣的,我們有很多使用者和物品,也有少部分使用者對少部分物品的評分,我們希望 目標使用者對其他未評分物品的評分,進而將評分高的物品推薦給目標使用者。比如下面的使用者物品評分表 使用者 物品 物品1物品2 物品3物品4 物品5物品6 物品7使用者135 1使用者224...
推薦系統ALS矩陣分解
思想類似線性回歸做 大致如下 定義乙個 模型 數學公式 然後確定乙個損失函式,將已有資料作為訓練集,不斷迭代來最小化損失函式的值,最終確定引數,把引數套到 模型中做 矩陣分解的 模型是 損失函式是 我們就是要最小化損失函式,從而求得引數q和p。矩陣分解模型的物理意義 我們希望學習到乙個p代表user...