【转载】推荐系统-矩阵分解-SVD-通俗易懂
【轉(zhuǎn)載【https://blog.csdn.net/u011412768/article/details/52972081#commentBox】 因?yàn)橐玫交赟VD的推薦作為baseline,所以最近學(xué)習(xí)了一下SVD這個(gè)算法,感覺(jué)理解了好長(zhǎng)時(shí)間。首先看的兩篇是實(shí)驗(yàn)室?guī)熜挚茖W(xué)網(wǎng)上翻譯的兩篇介紹SVD的文章,閱讀量很大,翻譯得很好。后面在網(wǎng)上又找到一篇專門接受SVD應(yīng)用到推薦系統(tǒng)的文章,感覺(jué)博主寫得很不錯(cuò),感謝兩位前輩的知識(shí),讓我可以好好學(xué)習(xí)SVD。
SVD介紹博文兩篇:
地址1:奇異值分解(SVD) — 線性變換幾何意義
地址2:奇異值分解(SVD) — 幾何意義
下面是博主“不是我干的”總結(jié)的“SVD在推薦系統(tǒng)中的應(yīng)用”:
原文地址:SVD在推薦系統(tǒng)中的應(yīng)用(CSDN上也有博主這篇文章)
下面是第二位博主的正文部分,保存著共自己學(xué)習(xí):
作者:不是我干的
參考自:http://www.igvita.com/2007/01/15/svd-recommendation-system-in-ruby/
其實(shí)說(shuō)參考也不準(zhǔn)確,準(zhǔn)確地說(shuō)應(yīng)該是半翻譯半學(xué)習(xí)筆記。
仔細(xì)整理一遍,感覺(jué)還是收獲很大的。
線性代數(shù)相關(guān)知識(shí):
任意一個(gè)M*N的矩陣A(M行*N列,M>N),可以被寫成三個(gè)矩陣的乘積:
1. U:(M行M列的列正交矩陣)
2. S:(M*N的對(duì)角線矩陣,矩陣元素非負(fù))
3. V:(N*N的正交矩陣的倒置)
即 A=U*S*V’(注意矩陣V需要倒置)
直觀地說(shuō):
假設(shè)我們有一個(gè)矩陣,該矩陣每一列代表一個(gè)user,每一行代表一個(gè)item。
如上圖,ben,tom….代表user,season n代表item。
矩陣值代表評(píng)分(0代表未評(píng)分):
如 ben對(duì)season1評(píng)分為5,tom對(duì)season1 評(píng)分為5,tom對(duì)season2未評(píng)分。
機(jī)器學(xué)習(xí)和信息檢索:
機(jī)器學(xué)習(xí)的一個(gè)最根本也是最有趣的特性是數(shù)據(jù)壓縮概念的相關(guān)性。
如果我們能夠從數(shù)據(jù)中抽取某些有意義的感念,則我們能用更少的比特位來(lái)表述這個(gè)數(shù)據(jù)。
從信息論的角度則是數(shù)據(jù)之間存在相關(guān)性,則有可壓縮性。
SVD就是用來(lái)將一個(gè)大的矩陣以降低維數(shù)的方式進(jìn)行有損地壓縮。
降維:(相對(duì)于機(jī)器學(xué)習(xí)中的PCA)
下面我們將用一個(gè)具體的例子展示svd的具體過(guò)程。
首先是A矩陣。
(代表上圖的評(píng)分矩陣)
使用matlab調(diào)用svd函數(shù):
分解矩陣之后我們首先需要明白S的意義。
可以看到S很特別,是個(gè)對(duì)角線矩陣。
每個(gè)元素非負(fù),而且依次減小,從幾何意義上來(lái)說(shuō),此值和特征向量中的特征值的權(quán)重有關(guān)。
所以可以取S對(duì)角線上前k個(gè)元素。
當(dāng)k=2時(shí)候即將S(6*4)降維成S(2*2),
同時(shí)U(6*6),Vtranspose(4*4)相應(yīng)地變?yōu)?U(6*2),V(4*2)(這里V.transpose應(yīng)該為2*4)
如下圖(圖片里的usv矩陣元素值和我自己matlab算出的usv矩陣元素值有些正負(fù)不一致,但是本質(zhì)是相同的):
此時(shí)我們用降維后的U,S,V來(lái)相乘得到A2
A2=U(1:6,1:2)*S(1:2,1:2)*(V(1:4,1:2))' //matlab語(yǔ)句此時(shí)我們可以很直觀地看出,A2和A很接近,這就是之前說(shuō)的降維可以看成一種數(shù)據(jù)的有損壓縮。
接下來(lái)我們開始分析該矩陣中數(shù)據(jù)的相關(guān)性
我們將u的第一列當(dāng)成x值,第二列當(dāng)成y值(即u的每一行用一個(gè)二維向量表示)
同理,v的每一行也用一個(gè)二維向量表示。
如下圖:
從圖中可以看出:
Season5,Season6特別靠近。Ben和Fred也特別靠近。
同時(shí)我們仔細(xì)看一下A矩陣可以發(fā)現(xiàn),A矩陣的第5行向量和第6行向量特別相似,Ben所在的列向量和Fred所在的列向量也特別相似。
所以,從直觀上我們發(fā)現(xiàn),U矩陣和V矩陣可以近似來(lái)代表A矩陣,換據(jù)話說(shuō)就是將A矩陣壓縮成U矩陣和V矩陣,至于壓縮比例得看當(dāng)時(shí)對(duì)S矩陣取前k個(gè)數(shù)的k值是多少。
到這里,我們已經(jīng)完成了一半。
尋找相似用戶
我們假設(shè),現(xiàn)在有個(gè)名字叫Bob的新用戶,并且已知這個(gè)用戶對(duì)season n的評(píng)分向量為:[5 5 0 0 0 5]。(此向量為行向量)
我們的任務(wù)是要對(duì)他做出個(gè)性化的推薦。
我們的思路首先是利用新用戶的評(píng)分向量找出該用戶的相似用戶。
對(duì)圖中公式不做證明,只需要知道結(jié)論:得到一個(gè)Bob的二維向量,即知道Bob的坐標(biāo)。(本質(zhì)上是特征的降維轉(zhuǎn)換)
將Bob坐標(biāo)添加進(jìn)原來(lái)的圖中:
然后從圖中找出和Bob最相似的用戶。
注意,最相似并不是距離最近的用戶,這里的相似用余弦相似度計(jì)算,即夾角與Bob最小的用戶坐標(biāo),可以計(jì)算出最相似的用戶是ben。
接下來(lái)的推薦策略就完全取決于個(gè)人選擇了。
這里介紹一個(gè)非常簡(jiǎn)單的推薦策略:
找出最相似的用戶,即ben。
觀察ben的評(píng)分向量為:【5 5 3 0 5 5】。
對(duì)比Bob的評(píng)分向量:【5 5 0 0 0 5】。
然后找出ben評(píng)分過(guò)而Bob未評(píng)分的item并排序,即【season 5:5,season 3:3】。
即推薦給Bob的item依次為 season5 和 season3。
最后還有一些關(guān)于整個(gè)推薦思路的可改進(jìn)的地方:
1.svd本身就是時(shí)間復(fù)雜度高的計(jì)算過(guò)程,如果數(shù)據(jù)量大的情況恐怕時(shí)間消耗無(wú)法忍受。不過(guò)可以使用梯度下降等機(jī)器學(xué)習(xí)的相關(guān)方法來(lái)進(jìn)行近似計(jì)算,以減少時(shí)間消耗。
2.相似度計(jì)算方法的選擇,有多種相似度計(jì)算方法,每種都有對(duì)應(yīng)優(yōu)缺點(diǎn),對(duì)針對(duì)不同場(chǎng)景使用最適合的相似度計(jì)算方法。
3.推薦策略:首先是相似用戶可以多個(gè),每個(gè)由相似度作為權(quán)重來(lái)共同影響推薦的item的評(píng)分。
最后附上一些其他博主的博文,可以加深理解:
(1)機(jī)器學(xué)習(xí)中的數(shù)學(xué)(5)-強(qiáng)大的矩陣奇異值分解(SVD)及其應(yīng)用
(2)[機(jī)器學(xué)習(xí)筆記](méi)奇異值分解SVD簡(jiǎn)介及其在推薦系統(tǒng)中的簡(jiǎn)單應(yīng)用
(3)矩陣特征值分解與奇異值分解含義解析及應(yīng)用
感謝前輩們提供的知識(shí)~
</div></div>總結(jié)
以上是生活随笔為你收集整理的【转载】推荐系统-矩阵分解-SVD-通俗易懂的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 西瓜币有什么用
- 下一篇: 微粒贷在征信上留多久 最低借款金额50