最近幾年在推薦系統領域,提到最多的就是潛在語義模型和矩陣分解模型,其實,這兩個名詞說的是一回事,就是如何通過降維的方法將評分矩陣補全,使用者的評分行為可以表示成乙個評分矩陣r,其中r[u][i]就是使用者u對物品i的評分。但是使用者不會對所有物品進行評分,所以這個評分矩陣中很多元素是空的,這些空的元素稱為缺失值(missing value),因此,評分**從某種意義上說就是填空,如果乙個使用者對乙個物品沒有評過分,那麼推薦系統就要**這個使用者是否會對這個物品進行評分以及會評多少分。
1.傳統的svd分解
對於如何補全乙個矩陣,歷史上有很多的研究。乙個空的矩陣有很多補全的方法,而我們要找的是乙個對矩陣擾動最小的補全方法,那麼什麼是對矩陣擾動最小呢?一般認為,如果補全後的矩陣和原來矩陣的特徵值相差不大就是擾動比較小。所以,最早的矩陣分解模型就是從數學上的svd開始的。給定m個使用者和n個物品,和使用者對物品的評分矩陣
svd分解是早期推薦系統經常研究常用的矩陣分解方法,不過該方法具有以下缺點,因此很難在實際系統中使用。1.該方法首先需要用乙個簡單的方法補全稀疏評分矩陣,一般來說,推薦系統中的評分矩陣是非常稀疏的,一般有95%以上的元素是缺失的。而一旦補全,評分矩陣就會變成乙個稠密矩陣,從而使評分矩陣的儲存需要很大的空間,這種空間的需求在實際系統中是不可能接受的。2.該方法依賴的svd分解方法的計算複雜度很高,特別是在稠密的大規模矩陣上更是非常慢,一般來說,這裡的svd分解用於1000維以上的矩陣就已經非常慢了,而實際中系統動輒就是上千萬的使用者和上百萬的物品,所以這種方法無法使用。如果仔細研究關於這一方法的文章可以發現,實驗都是在幾百個使用者幾百個物品的資料集上進行的。
2.simon funk的svd分解
正是由於上面的兩個缺點,svd分解演算法提出幾年後在推薦系統領域沒有得到廣泛的關注,直到2023年netflix prize開始後,simon funk在部落格上公開發表了乙個演算法(稱為funk-svd),一下子引爆了整個學術界對矩陣分解類方法的關注。simon funk提出的矩陣分解方法後來被netflix prize 的冠軍koren稱為latent factor model(簡稱為lfm)。從矩陣分解的角度去說,如果我們將評分矩陣r分解為兩個低維矩陣相乘:
直接優化上面的損失函式可能導致學習的過度擬合,因此還要加入防止擬合項,從而得到:
要最小化上面的損失函式,我們可以利用隨機梯度下降法。該方法是最優化理論裡最基礎的優化演算法,他首先通過求引數的偏導數找到最速下降方向,然後通過迭代法不斷地優化引數。
3.加入偏置項後的lmf
在上面的lmf提出之後獲得了巨大的成功,後來很多著名的模型都是通過對lmf修修補補獲得的。回顧上面提出的lmf**公式:,這個公式通過隱類將使用者和物品聯絡在了一起,但是,實際情況下,乙個評分系統有些固有屬性和使用者物品無關,而使用者也有些屬性和物品無關,物品也有些屬性和使用者無關。因此,netflix prize中提出了另一種lfm,其**公式如下:,這個**公式中加入了三項,,。這個模型稱為baissvd。這個模型中心增加的三項的作用如下:
2.使用者偏置(user bias)項。這一項表示了使用者的評分習慣中和物品沒有關係的那種因素。比如有些使用者就是比較苛刻,對什麼東西要求都很高,那麼他的評分就會偏低,而有些使用者比較寬容,對什麼東西都覺得不錯,那麼他的評分就會偏高。
3.物品偏置(item bias)。這一項表示了物品接受的評分中和使用者沒有什麼關係的因素。比如有些物品本身質量就很高,因此獲得的評分相對都比較高,而有些物品本身質量就很差,因此獲得的評分都會比較低。
增加的三個引數中,只有,是要通過機器學習訓練出來的。同樣可以求導,然後用梯度下降法求解這兩個引數即可。
【未完待續...】
推薦系統ALS矩陣分解
思想類似線性回歸做 大致如下 定義乙個 模型 數學公式 然後確定乙個損失函式,將已有資料作為訓練集,不斷迭代來最小化損失函式的值,最終確定引數,把引數套到 模型中做 矩陣分解的 模型是 損失函式是 我們就是要最小化損失函式,從而求得引數q和p。矩陣分解模型的物理意義 我們希望學習到乙個p代表user...
推薦系統例項 基於矩陣分解
使用matlab嘗試了隨機梯度下降的矩陣分解方法,實現了乙個比較簡單的推薦系統的原理。常用推薦系統的方法有協同過濾,基於物品內容過濾等等。這次是用的矩陣分解模型屬於協同過濾的一種方法,大致原理是通過一定數量的因子來描述各個使用者的喜好和各個物品的屬性。通過隨機梯度下降法分解後得到兩個矩陣,乙個是使用...
推薦系統 04 矩陣分解演算法
netflix放出的比賽資料是評分資料,它是推薦系統中評分 模式。本次比賽中,矩陣分解模型大放異彩,最著名的是svd以及其各種變體。2.1 為什麼要矩陣分解 矩陣分解演算法,能很好的解決推薦系統中的評分 問題。其中,通常k比m和n小很多。k怎麼取?用k fold確定。2.2.基礎的svd演算法 sv...