日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

矩阵分解模型

發(fā)布時(shí)間:2024/4/17 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 矩阵分解模型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

導(dǎo)讀

最近在研究”基于時(shí)序行為的協(xié)同過濾算法“中重點(diǎn)提到了矩陣分解模型,因此總結(jié)下最近比較火的算法:矩陣分解模型。

經(jīng)過kddcup和netflix比賽的多人多次檢驗(yàn),矩陣分解可以帶來更好的結(jié)果,而且可以充分地考慮各種因素的影響,有非常好的擴(kuò)展性,因?yàn)橐紤]多種因素的綜合作用,往往需要構(gòu)造cost function來將矩陣分解問題轉(zhuǎn)化為優(yōu)化問題,根據(jù)要考慮的因素為優(yōu)化問題添加constraints,然后通過迭代的方法進(jìn)行矩陣分解,原來評分矩陣中的missing vlaue可以通過分解后得到的矩陣求的。

本文將簡單介紹下最近學(xué)習(xí)到的矩陣分解方法。

1. PureSvd

開始學(xué)習(xí)機(jī)器學(xué)習(xí)算法時(shí),覺得這種方法很神奇很數(shù)學(xué),而且應(yīng)用比較廣泛。但讀了Yehuda大神的paper之后,覺得這種方法還ok了。

其實(shí),矩陣分解的核心是將一個(gè)非常稀疏的評分矩陣分解為兩個(gè)矩陣,一個(gè)表示user的特性,一個(gè)表示item的特性,將兩個(gè)矩陣中各取一行和一列向量做內(nèi)積就可以得到對應(yīng)評分。

那么如何將一個(gè)矩陣分解為兩個(gè)矩陣就是唯一的問題了。

說到這里大家就可能想起了在線代和數(shù)值分析中學(xué)到的各種矩陣分解方法,QR,Jordan,三角分解,SVD。。。

這里說說svd分解。

svd是將一個(gè)任意實(shí)矩陣分解為三個(gè)矩陣U,S,V,其中,U,V是兩個(gè)正交矩陣,稱為左右奇異矩陣,S是個(gè)對角陣,稱為奇異值矩陣。

其實(shí)svd分解的問題可以化解為特征值分解的問題。

評分矩陣A(m*n)=U(m*k)*S(k*k)*V'(k*n)

令B(m*m)=A(m*n)*A'(n*m)

B矩陣就是一個(gè)方陣,可以利用各種簡單的方法將B進(jìn)行特征值分解:

Bv=av,

v是方陣B的特征向量,a是特征向量v對應(yīng)的特征值。

所以奇異值s=sqrt(a),

左奇異向量u=A*v/s

同樣的方法可以求得右奇異向量。

這樣我們就得到了svd分解后的三個(gè)矩陣。(你可以自己寫個(gè)c程序計(jì)算,當(dāng)然也可以用matlab算算得到)

分解后的三個(gè)矩陣都有著各自的意義,

U:每一行表示一個(gè)user的特征。

V:每一列表示一個(gè)item的特征。

S:表示對應(yīng)的user和item的相關(guān)性。

所以可以考慮用U和V將S吸收進(jìn)來,形成兩個(gè)矩陣分別表示user的矩陣和item的矩陣。

得到這個(gè)以后后面的事情就好辦了。

為什么說這個(gè)方法猥瑣呢?

因?yàn)槲矣X得,這種方法有著矩陣分解算法的表,卻可以非常簡單地完成矩陣的分解,然后填充稀疏的評分矩陣。

但它考慮的因素太少了,不過對于簡單的推薦系統(tǒng),這種方法還是非常有意義的,容易實(shí)現(xiàn),而且結(jié)果也不會(huì)太差。

2. ?Latent Factor Model

這是真正的矩陣分解算法,經(jīng)過實(shí)踐檢驗(yàn),具有非常高的準(zhǔn)確性和易擴(kuò)展性。

正如上面提到的,實(shí)現(xiàn)推薦系統(tǒng)結(jié)果的目標(biāo)是將那個(gè)稀疏的評分矩陣分解成兩個(gè)矩陣,一個(gè)表示user的feature,一個(gè)表示item的feature,然后做內(nèi)積得到預(yù)測。

當(dāng)然要實(shí)現(xiàn)滿足一定約束條件的矩陣分解,可不像上面的PureSVD那樣容易,需要構(gòu)造一個(gè)優(yōu)化問題,用一些復(fù)雜的算法求解優(yōu)化問題。而這些優(yōu)化問題往往是NP問題,只有局部最優(yōu)解。

首先構(gòu)造一個(gè)優(yōu)化目標(biāo)函數(shù),

考慮到最后的評價(jià)指標(biāo)是預(yù)測分值和實(shí)際分值之間的誤差的平方(RMSE),所以構(gòu)造的目標(biāo)函數(shù)也是誤差的平方的函數(shù)。

為什么這樣的算法可以得到更優(yōu)的結(jié)果呢?因?yàn)樗惴梢院苋菀椎財(cái)U(kuò)展很多的feature進(jìn)來,更加出色地考慮了多種影響推薦效果的實(shí)實(shí)在在的因素。

  • Biases

因?yàn)橛械挠脩艨偸菚?huì)打出比別人高的分,或者說有的用戶他的評價(jià)尺度比較寬松;同樣有的item總是被打高分。這是一個(gè)普遍存在的問題,所以在構(gòu)造目標(biāo)函數(shù)的時(shí)候需要增加幾項(xiàng):所有評分的平均值miu,user的偏見分?jǐn)?shù)bu,item的偏見分?jǐn)?shù)bi。

比如:求用戶x對電影y的打分,

所有評分電影的評分的平均分是miu=3.5,

電影y比所有評分電影平均分高bi=0.5

但是用戶x是個(gè)比較嚴(yán)格的用戶,評分總是相對偏低,所以bu=-0.3

所以用戶x對電影y的打分為3.7

  • Implicit feedback

用戶在使用web應(yīng)用的時(shí)候,會(huì)產(chǎn)生大量的行為,充分挖掘這部分的價(jià)值,將會(huì)很好地提升推薦的效果。

利用用戶的隱式反饋,相當(dāng)于充分的利用了評分矩陣中的missing value的價(jià)值,用戶在頁面的停留時(shí)間,檢索,瀏覽,點(diǎn)擊等等各種行為都可以建模,內(nèi)含到目標(biāo)函數(shù)中。

這里,可以將簡單地用一個(gè)Boolean來描述一種行為有還是沒有。

不過在使用的時(shí)候,需要進(jìn)行歸一化處理。

  • User-associated attributes

基于用戶的社會(huì)化屬性進(jìn)行推薦也是一種很基本的推薦,當(dāng)然也可以考慮到目標(biāo)函數(shù)中。

  • Temporal dynamics

用戶的興趣包括長期和短期,動(dòng)態(tài)地考慮一段時(shí)間內(nèi)用戶的興趣是很有必要的。

上面的幾個(gè)因素中隨著時(shí)間變化的有,user的bias項(xiàng)bu=bu(t),item的bias項(xiàng)bi=bi(t),以及user的factor向量pu=pu(t),這里可以忽略item的factor向量的變化,因?yàn)閕tem是比較穩(wěn)定的。

  • Confidence level

因?yàn)樵谔幚砩鲜龅囊蛩氐臅r(shí)候,很多都是比較主觀的,所以需要給每個(gè)因素添加一個(gè)置信權(quán)重,以平衡整個(gè)結(jié)果。

通過構(gòu)造出這個(gè)目標(biāo)函數(shù),然后添加相應(yīng)的約束條件,接下來的問題就是求解這個(gè)優(yōu)化問題。

通常比較好的方法是Stochastic gradient desent。

3. ?NMF(非負(fù)矩陣分解)

很多人用這種方法是因?yàn)樗麄冇X得只有一個(gè)非負(fù)的值對于實(shí)際的例子才會(huì)有意義。

考慮到svd或者latent factor model會(huì)得到負(fù)的值,所以這種方法的物理意義比較明確。

同樣的道理,NMF也是將評分矩陣的轉(zhuǎn)置矩陣分解成兩個(gè)矩陣。

不同的是這兩個(gè)矩陣有著和上面的矩陣不同的物理意義。

其中一個(gè)是基矩陣W,另一個(gè)是投影矩陣H,即R'(n*m)=W(n*r)*H(r*m)

W:每一列包含一個(gè)基向量,這組基向量構(gòu)成一個(gè)r維的空間。

H:每一列則近似為原始數(shù)據(jù)對應(yīng)的列向量在該r維空間的投影。

做這個(gè)分解的方法也是構(gòu)造一個(gè)目標(biāo)函數(shù)和一些約束條件,然后用梯度下降的算法來計(jì)算得到一個(gè)局部最優(yōu)解。

這種方法的思路大概是這樣的:

  • 將評分矩陣轉(zhuǎn)置然后分解成兩個(gè)矩陣W和H。
  • 根據(jù)基矩陣W,可以計(jì)算得到目標(biāo)用戶評分向量a對基矩陣W的投影向量h。
  • 計(jì)算投影向量h與投影矩陣H各行之間的歐式距離,將其中距離最小的前k個(gè)用戶組成目標(biāo)用戶a的最近鄰集合。
  • 然后用皮爾遜相關(guān)法將最近鄰集合中的數(shù)據(jù)進(jìn)行加權(quán)計(jì)算,然后排序進(jìn)行推薦。
  • 可以看出來,這種方法的思路和上面的兩種還是很不相同的,主要還是在計(jì)算目標(biāo)用戶的最近鄰集合,主要思想還是knn,只是在中間用了矩陣分解的方法降維降低了計(jì)算的時(shí)間復(fù)雜度。

    小結(jié)

    矩陣分解在研究生學(xué)習(xí)的時(shí)候感覺既沒用又麻煩,尤其是線代里面做矩陣的分解計(jì)算?,F(xiàn)在看來,矩陣分解非常有意義!

    參考資料

    Yehuda的神作?http://ccnt.zju.edu.cn:8080/smart/files/20120915-3.pdf

    上海交大在2012年kddcup獲獎(jiǎng)方法的paper以及他們的開源系統(tǒng)?http://svdfeature.apexlab.org/wiki/Main_Page

    轉(zhuǎn)載于:https://www.cnblogs.com/AngelaSunny/p/5230781.html

    總結(jié)

    以上是生活随笔為你收集整理的矩阵分解模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。