svd奇異值分解_傳統推薦算法(一)SVD推薦(1)解讀奇異值分解

文章目錄

  • 寫在前面
  • 1. 從幾何變換到奇異值分解
  • 2. 代數角度理解奇異值與奇異向量
    • 2.1 從正交基映射推導SVD
    • 2.2 特征值分解求解奇異值和奇異向量
      • 2.2.1 求解過程
      • 2.2.2 推論
    • 2.3 SVD的另一種形式
  • 3. 幾何角度理解奇異值與奇異向量
    • 3.1 從坐標變換理解
      • 3.1.1 從例子到一般
      • 3.1.2 兩個問題
    • 3.2 形變的角度理解奇異值
  • 4. 我覺得的最好的奇異值解讀
  • 5. 特征值分解和奇異值分解區別
  • 6. 奇異值分解在PCA中的應用
  • 參考文獻

寫在前面

讀完本篇文章后,你應該可以知道:

奇異值分解到底是什么?
奇異值和奇異向量有什么代數意義?
奇異值和奇異向量有什么幾何意義?
如何利用特征值分解求奇異值和奇異向量?
奇異值的個數如何確定?
奇異值分解是否唯一?
奇異值分解什么時候和特征值分解相等?
奇異值分解和特征值分解的區別?

1. 從幾何變換到奇異值分解

這部分的內容是[1]中部分內容的翻譯,這幾張圖片大家應該見過很多次。

來看一個二維平面坐標系的例子,在由(1,0)T和(0,1)T確定的二維平面坐標系中:

f7a6be8ba1055dda9ab65f79d009a4f1.png

向量(x,y)T左乘M矩陣,將會得到一個新的向量(新的點)。為了更容易理解變換過程,我們主要關注向量(1,1)T和(1,0)T,(0,1)T,(0,0)T圍城的矩形的形變過程。

abc716177a3bbd754b9feacfbde59354.png

左乘矩陣M的效果在坐標系中的表現如下:

6d2341ea50b065ccf9111cf7abd9bb49.png

直接從圖上看不出什么,我們把原先的坐標系逆時針旋轉30度,然后左乘M看看效果:

c2cd8d6078cd7694052907370a0d4347.png

好像也沒什么特殊的,把原先的坐標系逆時針旋轉60度看看:

a6850a9b7484a750b9502c4856e86563.png

右邊的網格幾乎快要正交了,也就是說,原先的正交基逆時針旋轉60度后,再經過M變換,幾乎可以得到一組新的正交基。

實際上,如果我們把坐標軸逆時針旋轉58.28度,就會得到如下效果:

1260d2116d90ea8a91052dce5dbfec44.png

從幾何上看,旋轉后的正交基(1,0)T和(0,1)T,在經過M變換后,得到了另外一組正交基。這其實就是SVD分解的一種解釋,即M可以將一組正交基映射到另一組正交基。

efb34e5bf879864df35fa38055d4d563.png

記映射后的向量Mv1為u1,Mv2為u2,Mv1的模為σ1,Mv2的模為σ2。

140464e8b30b47392587dda108c4d6c7.png

接下來我們就可以推導了:

70e90450db2454af757d22cd222dd5f1.png

在v1和v2確定的二維平面中,任意一點x可以表示為:

6efb8777586fc0bc2cafe1d64c3c5e0c.png

在《利用SVD進行推薦(1)矩陣相乘的本質》中我們講過,小括號里的點積就是x在v1和v1坐標軸上的投影值(坐標)。我們對這個平面中任意一點x左乘矩陣M進行變換,來看看結果:

5c37b8aa2f5f4f343fa344995fd39112.png

向量點積表示為矩陣乘法就是:

d154e51580f0b3e4c65d8951b12c4de1.png

所以變換結果可以進一步推演為:

2db4b3472a4907357e96febb9fab26d8.png

我們得到了M有關u,v,σ的表達式。將表達式轉為矩陣表達形式,即為:

86cbdd6b82270d9079a114759ca74475.png

其中U中的每一列向量ui為映射后的一個單位基向量,V中的每一個列向量vj為原先被映射的單位基向量。這里的推導過于簡略,下面我們看看更為嚴格的推導。


2. 代數角度理解奇異值與奇異向量

奇異值分解在代數上表現就是A將一組正交基轉化為另一組正交基。我們來看一下具體推導。

2.1 從正交基映射推導SVD

2.1內容主要來自[5],靖王你真帥!

假設找到了這樣一組正交基:

64b63aac8eac09b366c18b68ef2f1375.png

而mxn的實矩陣A將其映射為:

6618fbd546eb4f16e0d207069a38cd16.png

我們要使他們兩兩正交,也就是:

8bfa8a1b21b0ae04d1fae33214a0a7e5.png

根據假設,有:

ff1e20e665305919a23b09f30adea936.png

在這種情況下,如果取vi為AT的特征向量的話,那么就有:

5248d4ed9c4518c59cb9188b2d0ec045.png

這樣我們就找到了正交基使其映射后還是正交基了。現在我們將映射后的正交基單位化。因為:

5b03fe062377001967bea0d462427ad6.png

也就是:

bf11b937767c1b4dd276bdc276788bf9.png

所以取單位向量為:

9c674321ae5150c9bf918fd9a408f9bb.png

由此可得:

8b814ea8dae093e0adcf283f9a52d3d6.png

從上述公式來看,左奇異向量ui是映射后正交基的單位化形式,奇異值σi就是映射后的正交基的模的大小,而右奇異向量vi就是被映射的正交基。此處也可以看出奇異值一定非負(當然本身的定義就是這樣)。

當k < i < m時,對u1,u2,…,uk進行擴展u(k+1),…,um,使得u1,u2,…,um為m維空間中的一組正交基,即:

ffb1a490712133407a3809943cf05ae0.png

同樣的,對v1,v2,…,vk進行擴展v(k+1),…,vn(這n-k個向量存在于A的零空間中,即Ax=0的解空間的基),使得v1,v2,…,vn為n維空間中的一組正交基,即:

380014f1fb48bfbfeaced91fc4b0c956.png

然后我們就可以得到:

4b5bed42814bc7f327f15b93a3aa5623.png

從而A的SVD分解為:

e5daf08fbb00b3abe723ece5779c0017.png

088ef77772de700a2717f336f32d365a.png

根據論文[3]的分析,任意mxn的實矩陣A=UΣVT,都可以看成一種線性轉化, 從n維空間到m維空間的轉化。n維空間和m維空間分別由V和U的列向量所形成的基向量確定。

2.2 特征值分解求解奇異值和奇異向量

2.2.1 求解過程

對任意mxn實矩陣A的奇異值分解A=

,有:

這不就是特征值分解嗎。也就是說
的特征向量,其對應的特征值是
,同理
的特征向量,其對應的特征值也是
。可以從這個角度出發求解特征值和特征向量。

實際上,對于mxn維的實矩陣A,

都是半正定的實對稱矩陣(特征值為非負數),且具有相同的非零特征值。且k=rank(
)=rank(
)=rank(A)
[4]顯然實對稱矩陣的秩就是非零特征值的個數。因此這兩個實對稱矩陣有k個相同的非零特征值。當i>rank(A)即使有特征值也全是0。

這里的分析還可以解釋2.1中對角陣S上的i為什么最多取到k=rank(A),假設可以取到k+1,按照本節中的推導,奇異值

是找不到對應的非零特征值的,顯然
=0。

或者說得專業些,

是實對稱矩陣,存在n階正交矩陣V,使得
相似于對角矩陣
(對角線上是
的全部特征值)。相似的矩陣有相同的特征多項式,進而有相同的特征值,當然秩更要相同了。所以r(S)=r(
)=r(
)=r(A)。即對角陣S非零奇異值的個數=
非零特征值的個數=對稱矩陣
的秩=A的秩。

2.2.2 推論

好了我們可以總結下了,對于任意實矩陣A的奇異值分解,它的右奇異向量(V的列向量)是

的特征向量,它的左奇異向量(U的列向量)是
的特征向量,而奇異值是這兩個對稱矩陣相同的非零特征值的平方根(實際上它們兩個非零特征值一模一樣)。

SVD分解只告訴我們總是存在這樣一個分解,并沒有說這個分解是唯一的。很顯然:特征值次序就可以不一樣,顯然SVD分解不唯一。但是我們常常把奇異值按照從大到小的順序排列,這樣S就可以由A唯一確定了。[7]和[8]告訴了我們SVD分解什么情況下是唯一的,感興趣可以看看。

那什么時候SVD分解和特征值分解相等呢? [10]里面給出了一種說法:

111a7079f233afbcc36f2dfd49b6cc67.png

2.3 SVD的另一種形式

實矩陣A的奇異值分解

可以表示為:

1cfa28201f36b9d31c51efe32129d0ea.png

其中k=rank(A),即矩陣A的秩。參照2.2我們知

,這些奇異值和這兩個對稱矩陣的相同特征值是一一對應關系(平方根),顯然k<=min(m,n)。

使用矩陣的分塊乘法,得:

2c3540db3f3ae1a7e68af751e4d7b1fa.png

后面一項是0,所以可以化為:

acc8f1a56cbe293eacf4f6e694ab2a0b.png

如果我們令X為mxk的矩陣,Y為kxn的矩陣:

69958ff9b5711bacc4538cc32a6600ff.png

dfa6d9c21afbc029db2e65bd99723f27.png

那么A可以表示為:

21512cfefec4fb737bea975f325f31ec.png

我們把它展開為向量的外積形式,這就是SVD的另一種表達形式:

9c9c28405f87fa48e6e3bb3584402c12.png

那么向量x左乘矩陣A是什么呢?我們看看:

832021324fd1632568186b3c75e2ddb2.png

是個標量,所以有:

6db09ad646599ade4d4d20ee7a9ed69b.png

此時Ax已經表示成了

的線性組合,每一項線性系數是
的乘積,由矩陣乘法的本質可知,此時
可以看成x在V坐標系下
軸上的坐標。結論呼之欲出:在A的作用下,x由n維空間轉化到了m維空間中。下一章我們將從空間幾何的角度對這個轉化進行理解。

3. 幾何角度理解奇異值與奇異向量

3.1 從坐標變換理解

3.1.1 從例子到一般

我直接復制[9]中的一個例子過來,作者是西電的張劍湖大佬:

85cf87fcdc8cfc47b00d7852220d3469.png

81bc91f4d746dbc51976fb88a91bbaa7.png

f75ee26bfcedd7bee08534b74d1daf80.png

ea8f3ac0a26d9fae705dab94694311c1.png

7641cf118224713beb32462babeb3e9a.png

矩陣乘法的本質一文中提到過,向量左乘正交矩陣可以達到將向量旋轉的效果。我們還看了一個2階非對稱方陣的實例,它的奇異值變換就是對向量進行旋轉-縮放-旋轉的過程。當時并沒有講維度變化這個細節。

我們對更一般的形式進行分析:從奇異值分解的角度出發,

就是x在V每個列向量所確定的軸進行投影,是先將x映射到V坐標系中(此時x維度和V確定的空間維度相同,也可以理解為
旋轉x),然后縮放的同時將維度映射
坐標系表示的空間的維度,最后映射到
坐標系中(此時
坐標系維度相同,可以理解為
旋轉)。

3.1.2 兩個問題

第一個問題是,為什么不是在

中進行長度為
的伸縮,而在
坐標系中向量的模長卻為
呢?

是這樣的,拿v1舉例吧,它太過特殊,在V坐標系中的投影坐標是(1,0,…,0)T。而Σ不僅把這個n維的進行了擴維,將n維的(1,0,…,0)T變為m維的(1,0,…,0),同時還進行了第一維度上長度為

的伸縮成為了(
,0,…,0)。

所以,在投影到

坐標系之前,v1已經轉化成一個m空間的向量,它的模長就是
。而這個m維空間無論用哪組單位正交基來表示,只不過相當于對向量進行旋轉換了方向,向量本身的模是不變的。

第二個問題是,如果如問題1所述,那為什么投影到

坐標系中,坐標值恰好與U中的基向量是對應的?

實際上在代數上就是這樣沒有為什么。從幾何角度,我們還是在二維中進行分析吧。假設B點逆時針旋轉θ度即為A點,順時針θ度為C點。

,
坐標系和
,
坐標系就是U和
。現在對于B(
,0),我們要向
,
坐標系中投影,由其相對關系可知,其投影坐標值其實就相當于A點在x,y坐標系中的投影坐標值,也就是(cosθ,sinθ)T*

發現了吧,當v1乘以對角陣S維度擴展到m時,此時它的坐標是有一個默認的坐標系的,就如下圖中的x,y坐標系。而U和

空間也如下圖中關系所示,它們使用默認坐標系中的坐標來表示自己。在默認坐標系下x和y軸向的伸縮變換在
,
中的表示,就如同
,
坐標軸向的伸縮變換在x中的表示,當然使用
,
坐標軸的基向量的表示啊。

ea622aee692cdd1dfd02c94b9803e908.png

我們可以發現,對于x,y坐標系中的向量OB(

,0),無論是逆時針轉到了坐標系
,
中變為(cosθ,sinθ)T*
,還是轉到
,
坐標系中成為(cosθ,-sinθ)T*
,它的模是不變的。這與問題一是呼應的。

3.2 形變的角度理解奇異值

[2]中,馬同學從翻繩游戲開始,對奇異值進行了生動形象的分析,[6]中7.4節也有形變的分析,還有相關例題。感興趣的可以看一看。


4. 我覺得的最好的奇異值解讀

在知乎問題"奇異值的物理意義是什么?"下,看到一位大牛對奇異值的解讀[12],個人認為是對奇異值的一種最好的解讀。感謝知乎用戶“老雞蛋”。

2747ac2d8e81498a805d04435b7bfffc.png

5. 特征值分解和奇異值分解區別

  • 適用條件 特征值分解必須是可對角化矩陣(所以必須是方陣。n階方陣可對角化的定義是相似于一個對角矩陣,充要條件是A有n個線性無關的特征向量[11]),奇異值分解則適用于任意矩陣。
  • 特征值/奇異值個數 特征值個數與矩陣的秩沒有必然關系,n階實對稱矩陣的非零特征值個數等于矩陣的秩;非零奇異值個數等于矩陣的秩。
  • 幾何意義 關于幾何意義之前講的比較多,內容較多本文就不再贅述。[10]中對于奇異值分解的幾何意義給出了一個很直觀的講法:

b947d99b701d641cea54245cbef1a4f0.png

6. 奇異值分解在PCA中的應用

在"利用SVD進行推薦(2)特征值與特征向量的直觀理解"中我們講過,對于樣本A,PCA的計算過程就是計算協方差矩陣

,然后求前k個最大特征值對應的特征向量得到投影矩陣,從而達到降維的目的。當樣本非常多的時候,計算協方差矩陣,還要進行特征值分解,這個計算量挺大的。

我們發現SVD分解

中,左奇異向量
不就是
的特征向量嗎?那我們就可以利用SVD分解來計算投影矩陣了。

[13]中Pinard大神說,有些SVD分解算法可以不用求

而直接得到A的右奇異矩陣V,也就是可以直接得到U(
的右奇異矩陣是U),那這就很nice了。

參考文獻

[1] http://www.ams.org/publicoutreach/feature-column/fcarc-svd
[2] https://www.matongxue.com/madocs/306.html
[3] http://www-users.math.umn.edu/~lerman/math5467/svd.pdf
[4] 張紹飛. 矩陣論教程.第2版[M]. 2012.
[5]https://blog.csdn.net/zhongkejingwang/article/details/43053513
[6] Lay D , Lay. 線性代數及其應用[M]. 機械工業出版社, 2017.
[7] http://rakaposhi.eas.asu.edu/s10-cse494-mailarchive/msg00030.html
[8] https://math.stackexchange.com/questions/644327/how-unique-are-u-and-v-in-the-singular-value-decomposition
[9] https://wenku.baidu.com/view/389fabcebceb19e8b8f6ba97.html
[10] https://www.zhihu.com/question/49959130
[11] 申亞男, 張曉丹, 李為東. 線性代數.第2版[M]. 機械工業出版社, 2015.
[12] https://www.zhihu.com/question/22237507
[13] https://www.cnblogs.com/pinard/p/6251584.html

更多精彩內容請移步公眾號:推薦算法工程師

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537244.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537244.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537244.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

信息化項目WBS實戰總結

概述 前面花了幾個篇幅講解了WBS&#xff0c;這篇文章總結下實戰要點。 第一篇&#xff1a;項目中的WBS分解 第二篇&#xff1a;項目的可交付成果 第三篇&#xff1a;WBS工作包 第四篇&#xff1a;WBS結果輸出表 劃重點 1.WBS是對“可交付成果”的分解&#xff0c;可交付…

kafka 支持發布訂閱

概述 一般消息隊列的是實現是支持兩種模式的&#xff0c;即點對點&#xff0c;還有一種是topic發布訂閱者模式&#xff0c;比如ACTIVEMQ。KAFKA也支持這兩種模式&#xff0c;但是實現的原理不一樣。 KAFKA 的消息被讀取后&#xff0c;并不是馬上刪除&#xff0c;這樣就可以重復…

svn管理工具_主流代碼管理工具深度評測

引言 作為有十幾年IT行業代碼的從業人員&#xff0c;經歷過代碼管理工具的變遷&#xff0c;從早期的微軟的Source Code Control&#xff0c;到TFS&#xff0c;再到SVN&#xff0c;再到現在的Git。我深知代碼管理工具是代碼開發過程中非常重要的工具。市場上的代碼管理工具有很多…

假設條件和制約因素的理解

目錄 假設條件 制約因素 假設條件和制約因素都記錄在假設日志中。 假設條件 假設條件是指當前不能確定的、未經驗證但仍被視為正確、真實或確定的因素。 假設條件存在不確定性&#xff0c;影響項目規劃的所有方面&#xff1b;項目實施過程中假設條件一旦不成立就可能造成相…

深入理解Java的三種工廠模式

一、簡單工廠模式簡單工廠的定義&#xff1a;提供一個創建對象實例的功能&#xff0c;而無須關心其具體實現。被創建實例的類型可以是接口、抽象類&#xff0c;也可以是具體的類實現汽車接口public interface Car {String getName();}奔馳類public class Benz implements Car {…

項目管理PMBOK中的八大會議

目錄 一、項目啟動會 initiating meeting 二、項目開踢會議 kick-off meeting 三/四&#xff1a;焦點小組會議&引導式研討會 五、規劃會議與分析 六、狀態審查會 七、投標人會議 八、項目經驗總結會 一、項目啟動會 initiating meeting 1、召開時間&#xff1a;是啟…

python函數的繼承_Python 繼承

版權所有&#xff0c;未經許可&#xff0c;禁止轉載Python 繼承繼承允許我們在定義一個類時&#xff0c;讓該類繼承另一個類的所有方法和屬性。父類是被繼承的類&#xff0c;也稱為基類。子類是繼承父類的類&#xff0c;也稱為派生類。創建父類任何類都可以是父類&#xff0c;創…

MySQL 使用Node.js異步查詢結果為undefined的簡單處理辦法

//定義查詢過程,化異步為同步 function name(SQL_TXT, Respond) {ExecuteSQL(1, SQL_TXT);var i 0;var SetName setInterval(function () {if (i > 19) {clearInterval(SetName);}console.log("Tqr :第" i "次 obtain , Value : \n" Tqr " \…

python中的裝飾器怎么運行_Python 裝飾器入門(上)

翻譯前想說的話:這是一篇介紹python裝飾器的文章&#xff0c;對比之前看到的類似介紹裝飾器的文章&#xff0c;個人認為無人可出其右&#xff0c;文章由淺到深&#xff0c;由函數介紹到裝飾器的高級應用&#xff0c;每個介紹必有例子說明。文章太長&#xff0c;看完原文后我計劃…

我的2018

寫在開始 2018年以飛快的速度臨近尾聲了&#xff0c;只感慨時間過得真快&#xff01; 這一年過得算是平平淡淡&#xff0c;沒有比較特別的地方。 工作 從去年8月來到這公司&#xff0c;是個做旅游產品的互聯網公司&#xff0c;平時里做的事可以說是很簡單&#xff0c;我只能說&…

IntelliJ IDEA快捷鍵總結

搜索類快捷鍵 快捷鍵描述Ctrl F文件內查找字符串Ctrl Shift F按照文本的內容查找雙擊Shift查找任何內容&#xff0c;可搜索類、資源、配置項、方法等&#xff0c;還能搜索路徑Ctrl Shift R全局資源查找和替換Ctrl N按類名搜索類&#xff0c;比如 Java&#xff0c;Groovy…

python小波分析法檢測火焰_一種基于小波分析的網絡流量異常檢測方法

一種基于小波分析的網絡流量異常檢測方法杜臻;馬立鵬;孫國梓【期刊名稱】《計算機科學》【年(卷),期】2019(046)008【摘要】對大量網絡流量數據進行高質量特征提取與異常識別是做好網絡取證的重要基礎.文中重點研究并實現了網絡取證中的數據處理并建立了模型庫.對一種基于小波分…

初學Linux第三周

簡單shell腳本&#xff1a;#!/bin/bash 第一行必須包括shell聲明序列&#xff1a;#!##********************************************************************#Author: *****#QQ: *****#Date: 2018-12-31#FileName&#xff1a; hello.sh#URL: http#Descriptio…

python使用ddt找不到方法_python使用ddt過程中遇到的問題及解決方案【推薦】

前言&#xff1a;在使用DDT數據驅動HTMLTestRunner輸出測試報告時遇到過2個問題&#xff1a;1、生成的測試報告中&#xff0c;用例名稱后有dict() -> new empty dictionary2、使用ddt生成的用例名稱無法更改1、用例名稱后有dict() -> new empty dictionary報告中用例名稱…

合同的不含稅與稅額怎么算

假設稅率是6% 不含稅金額&#xff1d;總金額/1.06 稅額&#xff1d;不含稅金額0.06 增值稅在線計算器&#xff1a;http://www.ab126.com/goju/7332.html 大小寫轉換&#xff1a;https://link.fobshanghai.com/rmb.htm?t1525225925284 工作日計算&#xff1a;http://www.fy…

Promise進階——如何實現一個Promise庫

概述 從上次更新Promise/A規范后&#xff0c;已經很久沒有更新博客了。之前由于業務需要&#xff0c;完成了一個TypeScript語言的Promise庫。這次我們來和大家一步一步介紹下&#xff0c;我們如何實現一個符合Promise/A規范的Promise庫。 如果對Promise/A規范還不太了解的同學&…

python中isinstance(3、object)_python中isinstance函數判斷各種類型的小細節

1. 基本語法isinstance(object, classinfo)Return true if the object argument is an instance of the classinfo argument, or of a (direct, indirect or virtual)subclass thereof. Also return true if classinfo is a type object (new-style class) and object is an ob…

[前端漫談] 做一個四則計算器

0x000 概述 近期重新開始學習計算機基礎方面的東西&#xff0c;比如計算機組成原理、網絡原理、編譯原理之類的東西&#xff0c;目前正好在學習編譯原理&#xff0c;開始對這一塊的東西感興趣&#xff0c;但是理論的學習有點枯燥無味&#xff0c;決定換種方式&#xff0c;那就是…

程序員筆試面試后上機_hcie面試有哪些要注意的事項?

大家都知道&#xff0c;華為認證hcie考試分為三個部分&#xff0c;分別是筆試、lab實驗和面試。其中&#xff0c;考生討論得最多的就是面試部分&#xff0c;因為面試不同于筆試和lab實驗&#xff0c;自己埋頭答題和操作就行&#xff0c;面試要面對考官&#xff0c;考核的東西非…

【Infragistics教程】在javascript構造函數中創建基本繼承

2019獨角獸企業重金招聘Python工程師標準>>> 【下載Infragistics Ultimate最新版本】 用javascript創建對象有四種方法。具體如下&#xff1a; 對象作為文本構造函數調用模式創建&#xff08;&#xff09;方法在ES6之后使用類繼承的實現因對象創建方法而異。本文將解…