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

1.為什么要矩陣分解

2.矩陣分解的算法

3.矩陣分解算法的應(yīng)用場景

4.評價指標(biāo)

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

1.為什么要矩陣分解

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

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

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

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

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

2.矩陣分解的算法

SVD

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

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

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

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

FunkSVD

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

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

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

BiasSVD

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

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

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

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

SVD++

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

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

timeSVD

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

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

ALS

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

P和Q兩個都是未知的揖盘,如果知道其中一個的話,就可以按照代數(shù)標(biāo)準(zhǔn)解法求得锌奴,比如知道Q兽狭,那么P就可以這樣算:


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

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

3)、得到了矩陣P后琐簇,把P當(dāng)做已知的蒸健,故技重施座享,回去求解矩陣Q

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

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

BPR

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

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

得到了用戶和物品的推薦分?jǐn)?shù)后刊侯,就可以計算四元組的樣本中,物品1和物品2的分?jǐn)?shù)差锉走,這個分?jǐn)?shù)可能是正數(shù)滨彻,也可能是負(fù)數(shù),也可能是0挪蹭。如果物品1和物品2相對順序為1亭饵,那么希望兩者分?jǐn)?shù)之差是個正數(shù),而且越大越好梁厉;如果物品1和物品2的相對順序是0辜羊,則希望分?jǐn)?shù)之差是負(fù)數(shù),且越小越好。
目標(biāo)函數(shù):

把這個目標(biāo)函數(shù)化簡和變形后八秃,和把AUC當(dāng)成目標(biāo)函數(shù)是非常相似的碱妆,也正是因為如此,BPR模型宣稱該模型是為AUC而生的昔驱。

SVDFeature

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

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

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

SVDFeature的模型定義如下:

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

3.矩陣分解算法的應(yīng)用場景

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

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

4.評價指標(biāo)

準(zhǔn)確率

準(zhǔn)確率表示預(yù)測正確的樣本數(shù)占總樣本數(shù)的比例谷婆。

TP(true positive):表示樣本的真實類別為正,最后預(yù)測得到的結(jié)果也為正辽聊;
FP(false positive):表示樣本的真實類別為負(fù)纪挎,最后預(yù)測得到的結(jié)果卻為正;
FN(false negative):表示樣本的真實類別為正跟匆,最后預(yù)測得到的結(jié)果卻為負(fù)异袄;
TN(true negative):表示樣本的真實類別為負(fù),最后預(yù)測得到的結(jié)果也為負(fù).

精確率

精確率表示預(yù)測為正樣本的樣本中玛臂,正確預(yù)測為正樣本的概率烤蜕。

召回率

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

F1

折中了召回率與精確率迹冤。

MSE和RMSE

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

AUC

AUC 這個值在數(shù)學(xué)上等價于:模型把關(guān)心的那一類樣本排在其他樣本前面的概率苏章。最大是 1,完美結(jié)果奏瞬,而 0.5 就是隨機排列枫绅,0 就是完美地全部排錯。
這個非常適合用來評價模型的排序效果硼端,很適合作為BPR的評價指標(biāo)并淋。得到一個推薦模型后,按照它計算的分?jǐn)?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倡蝙,平均準(zhǔn)確率)

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

主集合的平均準(zhǔn)確率(MAP)是每個主題的平均準(zhǔn)確率的平均值绞佩。

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

系統(tǒng)檢索出來的相關(guān)文檔越靠前(rank 越高),MAP就可能越高征炼。如果系統(tǒng)沒有返回相關(guān)文檔析既,則準(zhǔn)確率默認(rè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沿侈,平均準(zhǔn)確率為(1/1+2/2+3/4+4/7)/4=0.83。對于主題2市栗,平均準(zhǔn)確率為(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

比較復(fù)雜层宫,可參考這篇文章

參考文章:
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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市其监,隨后出現(xiàn)的幾起案子萌腿,更是在濱河造成了極大的恐慌,老刑警劉巖棠赛,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哮奇,死亡現(xiàn)場離奇詭異,居然都是意外死亡睛约,警方通過查閱死者的電腦和手機鼎俘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來辩涝,“玉大人贸伐,你說我怎么就攤上這事≌” “怎么了捉邢?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長商膊。 經(jīng)常有香客問我伏伐,道長,這世上最難降的妖魔是什么晕拆? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任藐翎,我火速辦了婚禮,結(jié)果婚禮上实幕,老公的妹妹穿的比我還像新娘吝镣。我一直安慰自己,他們只是感情好昆庇,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布末贾。 她就那樣靜靜地躺著,像睡著了一般整吆。 火紅的嫁衣襯著肌膚如雪拱撵。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天表蝙,我揣著相機與錄音裕膀,去河邊找鬼。 笑死勇哗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的寸齐。 我是一名探鬼主播欲诺,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼抄谐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了扰法?” 一聲冷哼從身側(cè)響起蛹含,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎塞颁,沒想到半個月后浦箱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡祠锣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年酷窥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伴网。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡蓬推,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出澡腾,到底是詐尸還是另有隱情沸伏,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布动分,位于F島的核電站毅糟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏澜公。R本人自食惡果不足惜姆另,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玛瘸。 院中可真熱鬧蜕青,春花似錦、人聲如沸糊渊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渺绒。三九已至贺喝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間宗兼,已是汗流浹背躏鱼。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留殷绍,地道東北人染苛。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親茶行。 傳聞我的和親對象是個殘疾皇子躯概,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容

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