SVD++是基於SVD(Singular Value Decomposition)的一種改進算法。SVD是一種常用的矩陣分解技術,是一種有效的代數特征提取方法。SVD在協同過濾中的主要思路是根據已有的評分情況,分析出評分者對各個因子的喜好程度以及電影包含各個因子的程度,最后再反過來分析數據得出預測結果。
其在協同過濾中的具體應用方法是先對user_movie的rating矩陣的缺失值用隨機數據予以填充,然后將預處理之后的矩陣作為SVD算法的輸入,進行迭代求解。
為了更好的說明SVD算法,需要首先對matrix factorization model和Baseline Predictors進行簡單的介紹。
matrix factorization model:
圖表 1 評分矩陣形式(引用)
評分矩陣U(形式如上圖)可被分解為兩個矩陣相乘
將這種分解方式體現協同過濾中,即有:
(matrix factorization model )
在這樣的分解模型中,Pu代表用戶隱因子矩陣( 表示用戶u對因子k的喜好程度),Qi表示電影隱因子矩陣( 表示電影i在因子k上的程度)。
Baseline Predictors:
Baseline Predictors使用向量bi表示電影i的評分相對於平均評分的偏差,向量bu表示用戶u做出的評分相對於平均評分的偏差,將平均評分記做μ 。
(Baseline Predictors)
SVD:
SVD就是一種加入Baseline Predictors優化的matrix factorization model。
SVD公式如下:
加入防止過擬合的 λ 參數,可以得到下面的優化函數:
對上述公式求導,我們可以得到最終的求解函數:
SVD++:
SVD算法是指在SVD的基礎上引入隱式反饋,使用用戶的歷史瀏覽數據、用戶歷史評分數據、電影的歷史瀏覽數據、電影的歷史評分數據等作為新的參數。
求解公式如下:
使用用戶的歷史評價數據作為隱式反饋,算法流程圖如下:
【Reference】
【1】從item-base到svd再到rbm,多種Collaborative Filtering(協同過濾算法)從原理到實現http://blog.csdn.net/dark_scope/article/details/17228643