矩陣分解的一點總結(jié)

1.為什么要矩陣分解

2.矩陣分解的算法

3.矩陣分解算法的應用場景

4.評價指標

------------------------------------------------------------------------------------------------------------------------------------------------

1.為什么要矩陣分解

對于推薦系統(tǒng)來說存在兩大場景即評分預測(rating prediction)與Top-N推薦(item recommendation,item ranking)。矩陣分解主要應用于評分預測場景。

推薦系統(tǒng)的評分預測場景可看做是一個矩陣補全的游戲,矩陣補全是推薦系統(tǒng)的任務,矩陣分解是其達到目的的手段。因此,矩陣分解是為了更好的完成矩陣補全任務(欲其補全,先其分解之)。之所以可以利用矩陣分解來完成矩陣補全的操作,那是因為基于這樣的假設(shè):假設(shè)UI矩陣是低秩的,即在大千世界中,總會存在相似的人或物,即物以類聚,人以群分,然后我們可以利用兩個小矩陣相乘來還原它。

矩陣分解就是把原來的大矩陣,近似的分解成小矩陣的乘積,在實際推薦計算時不再使用大矩陣,而是使用分解得到的兩個小矩陣。

具體來說就是,假設(shè)用戶物品的評分矩陣A是m乘n維,即一共有m個用戶,n個物品.通過一套算法轉(zhuǎn)化為兩個矩陣U和V,矩陣U的維度是m乘k,矩陣V的維度是n乘k。

這兩個矩陣的要求就是通過下面這個公式可以復原矩陣A:

2.矩陣分解的算法

SVD

說起矩陣分解,我們第一個想起的就是SVD。

SVD分解的形式為3個矩陣相乘,左右兩個矩陣分別表示用戶/項目隱含因子矩陣,中間矩陣為奇異值矩陣并且是對角矩陣,每個元素滿足非負性,并且逐漸減小。因此我們可以只需要前個K因子來表示它。

但SVD分解要求矩陣是稠密的,也就是說矩陣的所有位置不能有空白。有空白時我們的M是沒法直接去SVD分解的。大家會說,如果這個矩陣是稠密的,那不就是說我們都已經(jīng)找到所有用戶物品的評分了嘛,那還要SVD干嘛! 的確,這是一個問題,傳統(tǒng)SVD采用的方法是對評分矩陣中的缺失值進行簡單的補全,比如用全局平均值或者用用戶物品平均值補全,得到補全后的矩陣。接著可以用SVD分解并降維。

雖然有了上面的補全策略,我們的傳統(tǒng)SVD在推薦算法上還是較難使用。因為我們的用戶數(shù)和物品一般都是超級大,隨便就成千上萬了。這么大一個矩陣做SVD分解是非常耗時的。那么有沒有簡化版的矩陣分解可以用呢?我們下面來看看實際可以用于推薦系統(tǒng)的矩陣分解。

FunkSVD

FunkSVD是在傳統(tǒng)SVD面臨計算效率問題時提出來的,既然將一個矩陣做SVD分解成3個矩陣很耗時,同時還面臨稀疏的問題,那么我們能不能避開稀疏問題,同時只分解成兩個矩陣呢?也就是說,現(xiàn)在期望我們的矩陣M這樣進行分解:

SVD分解已經(jīng)很成熟了,但是FunkSVD如何將矩陣M分解為P和Q呢?這里采用了線性回歸的思想。目標是讓用戶的評分和用矩陣乘積得到的評分殘差盡可能的小,也就是說,可以用均方差作為損失函數(shù),來尋找最終的P和Q。

在實際應用中,為了防止過擬合,會加入一個L2的正則化項。加入了正則化系數(shù),需要調(diào)參。對于這個優(yōu)化問題,一般通過梯度下降法來進行優(yōu)化得到結(jié)果。

BiasSVD

在FunkSVD算法火爆之后,出現(xiàn)了很多FunkSVD的改進版算法。其中BiasSVD算是改進的比較成功的一種算法。BiasSVD假設(shè)評分系統(tǒng)包括三部分的偏置因素:一些和用戶物品無關(guān)的評分因素,用戶有一些和物品無關(guān)的評分因素,稱為用戶偏置項。而物品也有一些和用戶無關(guān)的評分因素,稱為物品偏置項。這其實很好理解。比如一個垃圾山寨貨評分不可能高,自帶這種爛屬性的物品由于這個因素會直接導致用戶評分低,與用戶無關(guān)。

一個用戶給一個物品的評分會由四部分相加:

從左到右分別代表:全局平均分、物品的評分偏置、用戶的評分偏置、用戶和物品之間的興趣偏好

BiasSVD增加了一些額外因素的考慮,因此在某些場景會比FunkSVD表現(xiàn)好。

SVD++

SVD++算法在BiasSVD算法上進一步做了增強,這里它增加考慮用戶的隱式反饋。它是基于這樣的假設(shè):用戶除了對于項目的顯式歷史評分記錄外,瀏覽記錄或者收藏列表等隱反饋信息同樣可以從側(cè)面一定程度上反映用戶的偏好,比如用戶對某個項目進行了收藏,可以從側(cè)面反映他對于這個項目感興趣,具體反映到預測公式為:

學習算法依然不變,只是要學習的參數(shù)多了兩個向量:x和y。一個是隱式反饋的物品向量,另一個是用戶屬性的向量,這樣在用戶沒有評分時,也可以用他的隱式反饋和屬性做出一定的預測。

timeSVD

它是基于這樣的假設(shè):用戶的興趣或者偏好不是一成不變的,而是隨著時間而動態(tài)演化。于是提出了timeSVD,其中用戶的和物品的偏置隨著時間而變化,同時用戶的隱含因子也隨著時間而動態(tài)改變,在此物品的隱含表示并未隨時間而變化(假設(shè)物品的屬性不會隨著時間而改變)。

其中,t為時間因子,表示不同的時間狀態(tài)。

ALS

通過之前構(gòu)建目標函數(shù)之后,就要用到優(yōu)化算法找到能使它最小的參數(shù)。優(yōu)化方法常用的選擇有兩個,一個是隨機梯度下降(SGD),另一個是交替最小二乘(ALS),在實際應用中,交替最小二乘更常用一些,這也是推薦系統(tǒng)中選擇的主要矩陣分解方法。
找到兩個矩陣P和Q,讓它們相乘后約等于原矩陣R:

P和Q兩個都是未知的,如果知道其中一個的話,就可以按照代數(shù)標準解法求得,比如知道Q,那么P就可以這樣算:


也就是R矩陣乘Q矩陣的逆矩陣就得到了結(jié)果,反之,知道了P 再求Q 也一樣,交替最小二乘通過迭代的方式解決這個雞生蛋蛋生雞的難題:
1)、初始化隨機矩陣Q里面的元素值

2)、把Q矩陣當做已知的,直接用線性代數(shù)的方法求得矩陣P

3)、得到了矩陣P后,把P當做已知的,故技重施,回去求解矩陣Q

4)、 上面兩個過程交替進行,一直到誤差可以接受為止

使用交替最小二乘好處:
1.在交替的其中一步,也就是假設(shè)已知其中一個矩陣求解另一個時,要優(yōu)化的參數(shù)是很容易并行的;
2.在不是很稀疏的數(shù)據(jù)集合上,交替最小二乘通常比隨機梯度下降要更快的得到結(jié)果。

BPR

在很多推薦場景中,我們都是基于現(xiàn)有的用戶和商品之間的一些數(shù)據(jù),得到用戶對所有商品的評分,選擇高分的商品推薦給用戶,這是funkSVD之類算法的做法,使用起來也很有效。但是在有些推薦場景中,我們是為了在千萬級別的商品中推薦個位數(shù)的商品給用戶,此時,我們更關(guān)心的是用戶來說,哪些極少數(shù)商品在用戶心中有更高的優(yōu)先級,也就是排序更靠前。也就是說,我們需要一個排序算法,這個算法可以把每個用戶對應的所有商品按喜好排序。BPR就是這樣的一個我們需要的排序算法。

BPR根據(jù)像交替最小二乘那樣完成矩陣分解,先假裝矩陣分解結(jié)果已經(jīng)有了,于是就計算出用戶對于每個物品的推薦分數(shù),只不過這個推薦分數(shù)可能并不滿足均方根誤差最小,而是滿足物品相對排序最佳

得到了用戶和物品的推薦分數(shù)后,就可以計算四元組的樣本中,物品1和物品2的分數(shù)差,這個分數(shù)可能是正數(shù),也可能是負數(shù),也可能是0。如果物品1和物品2相對順序為1,那么希望兩者分數(shù)之差是個正數(shù),而且越大越好;如果物品1和物品2的相對順序是0,則希望分數(shù)之差是負數(shù),且越小越好。
目標函數(shù):

把這個目標函數(shù)化簡和變形后,和把AUC當成目標函數(shù)是非常相似的,也正是因為如此,BPR模型宣稱該模型是為AUC而生的。

SVDFeature

SVDFeature 是由上海交大Apex Data & Knowledge Management Lab(APEX)開發(fā)的一個推薦系統(tǒng)工具包。他們提出了一種基于feature 的矩陣分解的框架。

它的目的是有效地解決基于特征的矩陣分解。新的模型可以只通過定義新的特征來實現(xiàn)。

這種基于特征的設(shè)置允許我們把很多信息包含在模型中,使得模型更加與時俱進。使用此工具包,可以很容易的把其他信息整合進模型,比如時間動態(tài),領(lǐng)域關(guān)系和分層信息。除了評分預測,還可以實現(xiàn)pairwise ranking任務。

SVDFeature的模型定義如下:

輸入包含三種特征<α,β,γ>,分別是用戶特征,物品特征和全局特征。

3.矩陣分解算法的應用場景

SVD:要求矩陣是稠密的,時間復雜度高。不推薦使用。
FunkSVD:不在將矩陣分解為3個矩陣,而是分解為2個低秩的用戶項目矩陣,同時降低了時間復雜度。
BiasSVD:考慮偏置項時使用,也就是用戶的愛好。
SVD++:考慮用戶的隱式反饋時使用。主動點評電影或者美食的用戶是少數(shù),也就是說顯示反饋比隱式反饋少,這個時候就可以根據(jù)用戶的隱式反饋推薦。
timeSVD:考慮時間因素時使用。人是善變的,隨著時間的流逝,興趣也會發(fā)生變化。
ALS:考慮建模時間時使用。強烈推薦使用,這也是社交巨頭 Facebook 在他們的推薦系統(tǒng)中選擇的主要矩陣分解算法。
BPR:考慮排序結(jié)果時使用。
SVDFeature:當我們有多個特征時,可以使用。SVDFeature的目的就是解決基于特征的矩陣分解。

矩陣分解算法的缺點:都沒有解決冷啟動問題

4.評價指標

準確率

準確率表示預測正確的樣本數(shù)占總樣本數(shù)的比例。

TP(true positive):表示樣本的真實類別為正,最后預測得到的結(jié)果也為正;
FP(false positive):表示樣本的真實類別為負,最后預測得到的結(jié)果卻為正;
FN(false negative):表示樣本的真實類別為正,最后預測得到的結(jié)果卻為負;
TN(true negative):表示樣本的真實類別為負,最后預測得到的結(jié)果也為負.

精確率

精確率表示預測為正樣本的樣本中,正確預測為正樣本的概率。

召回率

召回率表示正確預測出正樣本占實際正樣本的概率。

F1

折中了召回率與精確率。

MSE和RMSE

對于評分預測任務,一般都是根據(jù)原有的評分數(shù)據(jù),利用矩陣分解等方法去擬合原評分,使得優(yōu)化后的模型可以去預測新的評分,這里就要衡量你預測的評分和實際評分的差異了,指標也很簡單,分為RMSE和MSE。
MSE是指參數(shù)估計值與參數(shù)真值之差平方的期望值;
MSE可以評價數(shù)據(jù)的變化程度,MSE的值越小,說明預測模型描述實驗數(shù)據(jù)具有更好的精確度。
RMSE:RMSE是MSE的算術(shù)平方根。

AUC

AUC 這個值在數(shù)學上等價于:模型把關(guān)心的那一類樣本排在其他樣本前面的概率。最大是 1,完美結(jié)果,而 0.5 就是隨機排列,0 就是完美地全部排錯。
這個非常適合用來評價模型的排序效果,很適合作為BPR的評價指標。得到一個推薦模型后,按照它計算的分數(shù),可以把用戶想要的物品排在最前面。

具體的計算過程可看我的另一篇文章

Precision@K

其中Rel表示與用戶 u 相關(guān)的商品集(測試集), Rec表示推薦給用戶的前K個列表,二者的交集除以Rec的集合元素個數(shù)(其實就是K),得到Precision@K。一般是算出每個用戶的Precision@K,然后取平均值。

Recall@K

其中Rel表示與用戶u相關(guān)的商品集(測試集),Rec表示推薦給用戶的前K個列表,二者的交集除以Rec的集合元素個數(shù)(也就是測試集中用戶u評過分的商品數(shù)),得到Recall@K。一般是算出每個用戶的Recall@K,然后取平均值。

MAP(Mean Average Precision,平均準確率)

MAP(Mean Average Precision):單個主題的平均準確率是每篇相關(guān)文檔檢索出后的準確率的平均值。

主集合的平均準確率(MAP)是每個主題的平均準確率的平均值。

MAP 是反映系統(tǒng)在全部相關(guān)文檔上性能的單值指標。

系統(tǒng)檢索出來的相關(guān)文檔越靠前(rank 越高),MAP就可能越高。如果系統(tǒng)沒有返回相關(guān)文檔,則準確率默認為0。
例如:

假設(shè)有兩個主題,主題1有4個相關(guān)網(wǎng)頁,主題2有5個相關(guān)網(wǎng)頁。

某系統(tǒng)對于主題1檢索出4個相關(guān)網(wǎng)頁,其rank分別為1, 2, 4, 7;

對于主題2檢索出3個相關(guān)網(wǎng)頁,其rank分別為1,3,5。

對于主題1,平均準確率為(1/1+2/2+3/4+4/7)/4=0.83。對于主題2,平均準確率為(1/1+2/3+3/5+0+0)/5=0.45。

則MAP= (0.83+0.45)/2=0.64。

MRR

正確檢索結(jié)果值在檢索結(jié)果中的排名來評估檢索系統(tǒng)的性能。

其中Q是用戶的個數(shù),rank是對于第i個用戶,推薦列表中第一個在ground-truth結(jié)果中的item所在的排列位置。

舉個例子:假如檢索三次的結(jié)果如下,需要的結(jié)果(cat,torus,virus)分別排在3,2,1的話,此系統(tǒng)地MRR為(1/3 + 1/2 + 1)/3 = 11/18

NDCG

比較復雜,可參考這篇文章

參考文章:
https://blog.csdn.net/qq_40006058/article/details/89432773
https://blog.csdn.net/weixin_41362649/article/details/82848132
https://blog.csdn.net/qq_19446965/article/details/82079367
https://www.cnblogs.com/pinard/p/9128682.html
https://time.geekbang.org/column/article/5055

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 在推薦系統(tǒng)中,我們經(jīng)常會拿到一種數(shù)據(jù)是user—item的表格,然后對應的是每位user對每個item的評分,如下...
    Colleen_oh閱讀 7,353評論 0 15
  • 目錄: 1.為什么要矩陣分解 2.矩陣分解怎么分解 3.什么樣的情況考慮矩陣分解 4.矩陣分解有哪些分類 5.各種...
    andyham閱讀 7,678評論 1 16
  • 這篇文章的技術(shù)難度會低一些,主要是對推薦系統(tǒng)所涉及到的各部分內(nèi)容進行介紹,以及給出一些推薦系統(tǒng)的常用算法,比起技術(shù)...
    我偏笑_NSNirvana閱讀 12,477評論 5 89
  • 前面的內(nèi)容是關(guān)于近鄰推薦的相關(guān)知識,來看下另外一種推薦方法:矩陣分解。 為什么需要矩陣分解 協(xié)同過濾可以解決我們關(guān)...
    道簡術(shù)心閱讀 15,316評論 0 11
  • 矩陣分解 前記 矩陣分解在推薦系統(tǒng)里面應該說是最經(jīng)典、最有代表性的算法了。除了基礎(chǔ) 舉證分解方法,后面衍生出了各種...
    xiiatuuo閱讀 4,604評論 0 1

友情鏈接更多精彩內(nèi)容