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