轉(zhuǎn)-SVD在推薦系統(tǒng)中的應(yīng)用

http://blog.csdn.net/syani/article/details/52297093
mahout中有SVD的推薦策略毙驯,今天查了一下資料了解了一下算法原理,本質(zhì)上是使用SVD方法做特征降維,然后再計算相似度楣颠。下面這篇文章寫的不錯瓢阴,和大家分享一下。

轉(zhuǎn)自:http://yanyiwu.com/work/2012/09/10/SVD-application-in-recsys.html

線性代數(shù)相關(guān)知識:

任意一個M*N的矩陣A(M行*N列垒拢,M>N)端圈,可以被寫成三個矩陣的乘積:

1. U:(M行M列的列正交矩陣)

2. S:(M*N的對角線矩陣,矩陣元素非負)

3. V:(N*N的正交矩陣的倒置)

A=U*S*V'(注意矩陣V需要倒置)

直觀地說:

假設(shè)我們有一個矩陣子库,該矩陣每一列代表一個user舱权,每一行代表一個item。

[圖片上傳失敗...(image-82f708-1520412554755)]

如上圖仑嗅,ben,tom….代表user宴倍,season n代表item张症。

矩陣值代表評分(0代表未評分):

如 ben對season1評分為5,tom對season1 評分為5鸵贬,tom對season2未評分俗他。

機器學(xué)習(xí)和信息檢索:

機器學(xué)習(xí)的一個最根本也是最有趣的特性是數(shù)據(jù)壓縮概念的相關(guān)性。

如果我們能夠從數(shù)據(jù)中抽取某些有意義的感念阔逼,則我們能用更少的比特位來表述這個數(shù)據(jù)兆衅。

從信息論的角度則是數(shù)據(jù)之間存在相關(guān)性,則有可壓縮性嗜浮。

SVD就是用來將一個大的矩陣以降低維數(shù)的方式進行有損地壓縮羡亩。

降維:(相對于機器學(xué)習(xí)中的PCA)

下面我們將用一個具體的例子展示svd的具體過程。

首先是A矩陣危融。

<pre style="margin: 0px 0px 24px; padding: 0px; font-weight: 400; box-sizing: border-box; background-color: rgb(240, 240, 240); font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; color: rgb(0, 0, 0);">`A =

 5     5     0     5
 5     0     3     4
 3     4     0     3
 0     0     5     3
 5     4     4     5
 5     4     5     5` </pre>

(代表上圖的評分矩陣)

使用matlab調(diào)用svd函數(shù):

<pre style="margin: 0px 0px 24px; padding: 0px; font-weight: 400; box-sizing: border-box; background-color: rgb(240, 240, 240); font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; color: rgb(0, 0, 0);">`[U,S,Vtranspose]=svd(A)

U =
-0.4472 -0.5373 -0.0064 -0.5037 -0.3857 -0.3298
-0.3586 0.2461 0.8622 -0.1458 0.0780 0.2002
-0.2925 -0.4033 -0.2275 -0.1038 0.4360 0.7065
-0.2078 0.6700 -0.3951 -0.5888 0.0260 0.0667
-0.5099 0.0597 -0.1097 0.2869 0.5946 -0.5371
-0.5316 0.1887 -0.1914 0.5341 -0.5485 0.2429

S =
17.7139 0 0 0
0 6.3917 0 0
0 0 3.0980 0
0 0 0 1.3290
0 0 0 0
0 0 0 0

Vtranspose =
-0.5710 -0.2228 0.6749 0.4109
-0.4275 -0.5172 -0.6929 0.2637
-0.3846 0.8246 -0.2532 0.3286
-0.5859 0.0532 0.0140 -0.8085` </pre>

分解矩陣之后我們首先需要明白S的意義畏铆。

可以看到S很特別,是個對角線矩陣吉殃。

每個元素非負辞居,而且依次減小,從幾何意義上來說蛋勺,此值和特征向量中的特征值的權(quán)重有關(guān)瓦灶。

[html] view plaincopy

<embed id="ZeroClipboardMovie_1" src="http://csdnimg.cn/public/highlighter/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_1" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=1&width=16&height=16" wmode="transparent" style="box-sizing: border-box;">

  1. <span style="font-size:14px;">若想進一步了解<span style="color:#FF0000;"><strong>SVD分解</strong></span>,推薦讀下面這篇文章:

  2. <strong>機器學(xué)習(xí)中的數(shù)學(xué)(5)-強大的矩陣奇異值分解(SVD)及其應(yīng)用</strong>

  3. http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html</span>

所以可以取S對角線上前k個元素抱完。

當k=2時候即將S(6*4)降維成S(2*2)倚搬,

同時U(6*6),Vtranspose(4*4)相應(yīng)地變?yōu)?U(6*2),Vtranspose(4*2).

如下圖(圖片里的usv矩陣元素值和我自己matlab算出的usv矩陣元素值有些正負不一致,但是本質(zhì)是相同的):

[圖片上傳失敗...(image-b66b14-1520412554753)]

此時我們用降維后的U乾蛤,S每界,V來相乘得到A2

<pre style="margin: 0px 0px 24px; padding: 0px; font-weight: 400; box-sizing: border-box; background-color: rgb(240, 240, 240); font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; color: rgb(0, 0, 0);">A2=U(1:6,1:2)*S(1:2,1:2)*(V(1:4,1:2))' //matlab語句 </pre>

<pre style="margin: 0px 0px 24px; padding: 0px; font-weight: 400; box-sizing: border-box; background-color: rgb(240, 240, 240); font-family: Consolas, Inconsolata, Courier, monospace; font-size: 14px; line-height: 22px; color: rgb(0, 0, 0);">`A2 =

5.2885    5.1627    0.2149    4.4591
3.2768    1.9021    3.7400    3.8058
3.5324    3.5479   -0.1332    2.8984
1.1475   -0.6417    4.9472    2.3846
5.0727    3.6640    3.7887    5.3130
5.1086    3.4019    4.6166    5.5822` </pre>

此時我們可以很直觀地看出,A2和A很接近家卖,這就是之前說的降維可以看成一種數(shù)據(jù)的有損壓縮眨层。

接下來我們開始分析該矩陣中數(shù)據(jù)的相關(guān)性

我們將u的第一列當成x值,第二列當成y值(即u的每一行用一個二維向量表示)

同理上荡,v的每一行也用一個二維向量表示趴樱。

如下圖:

[圖片上傳失敗...(image-7a84c9-1520412554753)]

從圖中可以看出:

Season5,Season6特別靠近酪捡。Ben和Fred也特別靠近叁征。

同時我們仔細看一下A矩陣可以發(fā)現(xiàn),A矩陣的第5行向量和第6行向量特別相似逛薇,Ben所在的列向量和Fred所在的列向量也特別相似捺疼。

所以,從直觀上我們發(fā)現(xiàn)永罚,U矩陣和V矩陣可以近似來代表A矩陣啤呼,換據(jù)話說就是將A矩陣壓縮成U矩陣和V矩陣卧秘,至于壓縮比例得看當時對S矩陣取前k個數(shù)的k值是多少。

到這里官扣,我們已經(jīng)完成了一半翅敌。

尋找相似用戶

我們假設(shè),現(xiàn)在有個名字叫Bob的新用戶惕蹄,并且已知這個用戶對season n的評分向量為:[5 5 0 0 0 5]蚯涮。(此向量為行向量)

我們的任務(wù)是要對他做出個性化的推薦。

我們的思路首先是利用新用戶的評分向量找出該用戶的相似用戶卖陵。

[圖片上傳失敗...(image-c7b306-1520412554753)]

對圖中公式不做證明遭顶,只需要知道結(jié)論:得到一個Bob的二維向量,即知道Bob的坐標赶促。(本質(zhì)上是特征的降維轉(zhuǎn)換)

將Bob坐標添加進原來的圖中:

[圖片上傳失敗...(image-f23c97-1520412554753)]

然后從圖中找出和Bob最相似的用戶。

注意挟炬,最相似并不是距離最近的用戶鸥滨,這里的相似用余弦相似度計算呈野,即夾角與Bob最小的用戶坐標威沫,可以計算出最相似的用戶是ben。

接下來的推薦策略就完全取決于個人選擇了协饲。

這里介紹一個非常簡單的推薦策略:

找出最相似的用戶粥喜,即ben凸主。

觀察ben的評分向量為:【5 5 3 0 5 5】。

對比Bob的評分向量:【5 5 0 0 0 5】额湘。

然后找出ben評分過而Bob未評分的item并排序卿吐,即【season 5:5,season 3:3】锋华。

即推薦給Bob的item依次為 season5 和 season3嗡官。

最后還有一些關(guān)于整個推薦思路的可改進的地方:

1.svd本身就是時間復(fù)雜度高的計算過程,如果數(shù)據(jù)量大的情況恐怕時間消耗無法忍受毯焕。不過可以使用梯度下降等機器學(xué)習(xí)的相關(guān)方法來進行近似計算衍腥,以減少時間消耗。

2.相似度計算方法的選擇纳猫,有多種相似度計算方法婆咸,每種都有對應(yīng)優(yōu)缺點,對針對不同場景使用最適合的相似度計算方法芜辕。

3.推薦策略:首先是相似用戶可以多個尚骄,每個由相似度作為權(quán)重來共同影響推薦的item的評分。

最后編輯于
?著作權(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
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜀铲,“玉大人边琉,你說我怎么就攤上這事〖侨埃” “怎么了变姨?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長厌丑。 經(jīng)常有香客問我定欧,道長,這世上最難降的妖魔是什么怒竿? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任砍鸠,我火速辦了婚禮,結(jié)果婚禮上耕驰,老公的妹妹穿的比我還像新娘爷辱。我一直安慰自己,他們只是感情好朦肘,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布饭弓。 她就那樣靜靜地躺著,像睡著了一般媒抠。 火紅的嫁衣襯著肌膚如雪示启。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天领舰,我揣著相機與錄音夫嗓,去河邊找鬼。 笑死冲秽,一個胖子當著我的面吹牛舍咖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播锉桑,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼排霉,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了民轴?” 一聲冷哼從身側(cè)響起攻柠,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤球订,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瑰钮,有當?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
  • 正文 我出身青樓,卻偏偏與公主長得像宣吱,于是被迫代替她去往敵國和親窃这。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354