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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

【转载】推荐系统-矩阵分解-SVD-通俗易懂

發布時間:2024/10/8 windows 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转载】推荐系统-矩阵分解-SVD-通俗易懂 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【轉載【https://blog.csdn.net/u011412768/article/details/52972081#commentBox】 因為要用到基于SVD的推薦作為baseline,所以最近學習了一下SVD這個算法,感覺理解了好長時間。首先看的兩篇是實驗室師兄科學網上翻譯的兩篇介紹SVD的文章,閱讀量很大,翻譯得很好。后面在網上又找到一篇專門接受SVD應用到推薦系統的文章,感覺博主寫得很不錯,感謝兩位前輩的知識,讓我可以好好學習SVD。


SVD介紹博文兩篇:

地址1:奇異值分解(SVD) — 線性變換幾何意義

地址2:奇異值分解(SVD) — 幾何意義


下面是博主“不是我干的”總結的“SVD在推薦系統中的應用”:

原文地址:SVD在推薦系統中的應用(CSDN上也有博主這篇文章)


下面是第二位博主的正文部分,保存著共自己學習:

作者:不是我干的

參考自:http://www.igvita.com/2007/01/15/svd-recommendation-system-in-ruby/
其實說參考也不準確,準確地說應該是半翻譯半學習筆記。
仔細整理一遍,感覺還是收獲很大的。

線性代數相關知識:
任意一個M*N的矩陣A(M行*N列,M>N),可以被寫成三個矩陣的乘積:
1. U:(M行M列的列正交矩陣)
2. S:(M*N的對角線矩陣,矩陣元素非負)
3. V:(N*N的正交矩陣的倒置)
即 A=U*S*V’(注意矩陣V需要倒置)

直觀地說:

假設我們有一個矩陣,該矩陣每一列代表一個user,每一行代表一個item。

如上圖,ben,tom….代表user,season n代表item。

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

如 ben對season1評分為5,tom對season1 評分為5,tom對season2未評分。

機器學習和信息檢索:

機器學習的一個最根本也是最有趣的特性是數據壓縮概念的相關性。

如果我們能夠從數據中抽取某些有意義的感念,則我們能用更少的比特位來表述這個數據。

從信息論的角度則是數據之間存在相關性,則有可壓縮性。

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

降維:(相對于機器學習中的PCA)

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

首先是A矩陣。

  • 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
  • (代表上圖的評分矩陣)


    使用matlab調用svd函數:

  • [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
  • 分解矩陣之后我們首先需要明白S的意義。

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

    每個元素非負,而且依次減小,從幾何意義上來說,此值和特征向量中的特征值的權重有關。

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

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

    同時U(6*6),Vtranspose(4*4)相應地變為?U(6*2),V(4*2)(這里V.transpose應該為2*4)

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

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

    A2=U(1:6,1:2)*S(1:2,1:2)*(V(1:4,1:2))' //matlab語句
  • 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
  • 此時我們可以很直觀地看出,A2和A很接近,這就是之前說的降維可以看成一種數據的有損壓縮。


    接下來我們開始分析該矩陣中數據的相關性

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

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

    如下圖:

    從圖中可以看出:

    Season5,Season6特別靠近。Ben和Fred也特別靠近。

    同時我們仔細看一下A矩陣可以發現,A矩陣的第5行向量和第6行向量特別相似,Ben所在的列向量和Fred所在的列向量也特別相似。


    所以,從直觀上我們發現,U矩陣和V矩陣可以近似來代表A矩陣,換據話說就是將A矩陣壓縮成U矩陣和V矩陣,至于壓縮比例得看當時對S矩陣取前k個數的k值是多少。

    到這里,我們已經完成了一半。

    尋找相似用戶

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

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

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

    對圖中公式不做證明,只需要知道結論:得到一個Bob的二維向量,即知道Bob的坐標。(本質上是特征的降維轉換)

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

    然后從圖中找出和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。

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

    1.svd本身就是時間復雜度高的計算過程,如果數據量大的情況恐怕時間消耗無法忍受。不過可以使用梯度下降等機器學習的相關方法來進行近似計算,以減少時間消耗。

    2.相似度計算方法的選擇,有多種相似度計算方法,每種都有對應優缺點,對針對不同場景使用最適合的相似度計算方法。

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

    最后附上一些其他博主的博文,可以加深理解:

    (1)機器學習中的數學(5)-強大的矩陣奇異值分解(SVD)及其應用

    (2)[機器學習筆記]奇異值分解SVD簡介及其在推薦系統中的簡單應用

    (3)矩陣特征值分解與奇異值分解含義解析及應用

    感謝前輩們提供的知識~

    </div></div>

    總結

    以上是生活随笔為你收集整理的【转载】推荐系统-矩阵分解-SVD-通俗易懂的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。