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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SVD分解算法及其应用

發布時間:2025/7/25 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SVD分解算法及其应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

SVD分解算法及其應用

時間?2013-07-16 11:39:27??十一城 原文?http://elevencitys.com/?p=3923 主題奇異值分解?主成分分析?算法

矩陣的奇異值分解在矩陣理論的重要性不言而喻,它在最優化問題、特征值問題、最小乘方問題、廣義逆矩陣問,統計學,圖像壓縮等方面都有十分重要的應用。

定義:?設A為m*n階矩陣,?A?H?A?的n個特征值的非負平方根叫作A的奇異值。記為?σi?(A)。?>?如果把A?H?A的特征值記為λ?i?(A),則σ?i?(A)=?λ?i?(A?H?A)^(1/2)。?

定理?(奇異值分解)設A為m*n階復矩陣,則存在m階酉陣U和n階酉陣V,使得:

A = U*S*V’

其中S=diag(σ?i?,σ?2?,……,σ?r?),σ?i?>0??(i=1,…,r),r=rank(A)?。?

推論:?設A為m*n階實矩陣,則存在m階正交陣U和n階正交陣V,使得

A = U*S*V’

其中S=diag(σ?i?,σ?2?,……,σ?r?),σ?i?>0??(i=1,…,r),r=rank(A)?。

奇異值分解提供了一些關于A的信息,例如非零奇異值的數目(S的階數)和A的秩相同,一旦秩r確定,那么U的前r?列構成了A的列向量空間的正交基,另外V的從右向左n-r列為A的kernel的基。

非退化的奇異值具有唯一的左、右奇異向量,如果?A?的所有奇異值都是非退化且非零,則它的奇異值分解是唯一的,因為?U?中的一列要乘以一個單位相位因子且同時?V中相應的列也要乘以同一個相位因子。

根據定義,退化的奇異值具有不唯一的奇異向量。因為,如果?u?1?和?u?2?為奇異值σ的兩個左奇異向量,則兩個向量的任意規范線性組合也是奇異值σ一個左奇異向量,類似的,右奇異向量也具有相同的性質。因此,如果?MA?具有退化的奇異值,則它的奇異值分解是不唯一的。

在壓縮圖像應用中,抽象的例子可以入下圖所示:

上圖中三個矩陣相乘的結果將會是一個接近于A的矩陣,在這兒,r越接近于n,則相乘的結果越接近于A。而這三個矩陣的面積之和(在存儲觀點來說,矩陣面積越小,存儲量就越小)要遠遠小于原始的矩陣A,我們如果想要壓縮空間來表示原矩陣A,我們存下這里的三個矩陣:U、Σ、V就好了。

主要應用領域

一、奇異值與主成分分析(PCA)

PCA的問題其實是一個基的變換,使得變換后的數據有著最大的方差。方差的大小描述的是一個變量的信息量,我們在講一個東西的穩定性的時候,往往說要減小方差,如果一個模型的方差很大,那就說明模型不穩定了。但是對于我們用于機器學習的數據(主要是訓練數據),方差大才有意義,不然輸入的數據都是同一個點,那方差就為0了,這樣輸入的多個數據就等同于一個數據了。以下面這張圖為例子:

???? 這個假設是一個攝像機采集一個物體運動得到的圖片,上面的點表示物體運動的位置,假如我們想要用一條直線去擬合這些點,那我們會選擇什么方向的線呢?當然是圖上標有signal的那條線。如果我們把這些點單純的投影到x軸或者y軸上,最后在x軸與y軸上得到的方差是相似的(因為這些點的趨勢是在45度左右的方向,所以投影到x軸或者y軸上都是類似的),如果我們使用原來的xy坐標系去看這些點,容易看不出來這些點真正的方向是什么。但是如果我們進行坐標系的變化,橫軸變成了signal的方向,縱軸變成了noise的方向,則就很容易發現什么方向的方差大,什么方向的方差小了。

一般來說,方差大的方向是信號的方向,方差小的方向是噪聲的方向,我們在數據挖掘中或者數字信號處理中,往往要提高信號與噪聲的比例,也就是信噪比。對上圖來說,如果我們只保留signal方向的數據,也可以對原數據進行不錯的近似了。

PCA的全部工作簡單點說,就是對原始的空間中順序地找一組相互正交的坐標軸,第一個軸是使得方差最大的,第二個軸是在與第一個軸正交的平面中使得方差最大的,第三個軸是在與第1、2個軸正交的平面中方差最大的,這樣假設在N維空間中,我們可以找到N個這樣的坐標軸,我們取前r個去近似這個空間,這樣就從一個N維的空間壓縮到r維的空間了,但是我們選擇的r個坐標軸能夠使得空間的壓縮使得數據的損失最小。

還是假設我們矩陣每一行表示一個樣本,每一列表示一個feature,用矩陣的語言來表示,將一個m * n的矩陣A的進行坐標軸的變化,P就是一個變換的矩陣從一個N維的空間變換到另一個N維的空間,在空間中就會進行一些類似于旋轉、拉伸的變化。

而將一個m * n的矩陣A變換成一個m * r的矩陣,這樣就會使得本來有n個feature的,變成了有r個feature了(r < n),這r個其實就是對n個feature的一種提煉,我們就把這個稱為feature的壓縮。用數學語言表示就是:

??? 但是這個怎么和SVD扯上關系呢?之前談到,SVD得出的奇異向量也是從奇異值由大到小排列的,按PCA的觀點來看,就是方差最大的坐標軸就是第一個奇異向量,方差次大的坐標軸就是第二個奇異向量…我們回憶一下之前得到的SVD式子:

???? 在矩陣的兩邊同時乘上一個矩陣V,由于V是一個正交的矩陣,所以V轉置乘以V得到單位陣I,所以可以化成后面的式子

???? 將后面的式子與A * P那個m * n的矩陣變換為m * r的矩陣的式子對照看看,在這里,其實V就是P,也就是一個變化的向量。這里是將一個m * n 的矩陣壓縮到一個m * r的矩陣,也就是對列進行壓縮,如果我們想對行進行壓縮(在PCA的觀點下,對行進行壓縮可以理解為,將一些相似的sample合并在一起,或者將一些沒有太大價值的sample去掉)怎么辦呢?同樣我們寫出一個通用的行壓縮例子:

??? 這樣就從一個m行的矩陣壓縮到一個r行的矩陣了,對SVD來說也是一樣的,我們對SVD分解的式子兩邊乘以U的轉置U’

??? 這樣我們就得到了對行進行壓縮的式子。可以看出,其實PCA幾乎可以說是對SVD的一個包裝,如果我們實現了SVD,那也就實現了PCA了,而且更好的地方是,有了SVD,我們就可以得到兩個方向的PCA,如果我們對A’A進行特征值的分解,只能得到一個方向的PCA。

二、奇異值與潛在語義索引LSI

潛在語義索引(Latent Semantic Indexing)與PCA不太一樣,至少不是實現了SVD就可以直接用的,不過LSI也是一個嚴重依賴于SVD的算法,在?矩陣計算與文本處理中的分類問題?中談到:

??? “三個矩陣有非常清楚的物理含義。第一個矩陣X中的每一行表示意思相關的一類詞,其中的每個非零元素表示這類詞中每個詞的重要性(或者說相關性),數值越大越相關。最后一個矩陣Y中的每一列表示同一主題一類文章,其中每個元素表示這類文章中每篇文章的相關性。中間的矩陣則表示類詞和文章雷之間的相關性。因此,我們只要對關聯矩陣A進行一次奇異值分解,w 我們就可以同時完成了近義詞分類和文章的分類。(同時得到每類文章和每類詞的相關性)。”

上面這段話可能不太容易理解,不過這就是LSI的精髓內容,我下面舉一個例子來說明一下,下面的例子來自LSA tutorial:

????? 這就是一個矩陣,不過不太一樣的是,這里的一行表示一個詞在哪些title中出現了(一行就是之前說的一維feature),一列表示一個title中有哪些詞,(這個矩陣其實是我們之前說的那種一行是一個sample的形式的一種轉置,這個會使得我們的左右奇異向量的意義產生變化,但是不會影響我們計算的過程)。比如說T1這個title中就有guide、investing、market、stock四個詞,各出現了一次,我們將這個矩陣進行SVD,得到下面的矩陣:

????? 左奇異向量表示詞的一些特性,右奇異向量表示文檔的一些特性,中間的奇異值矩陣表示左奇異向量的一行與右奇異向量的一列的重要程序,數字越大越重要。

繼續看這個矩陣還可以發現一些有意思的東西,首先,左奇異向量的第一列表示每一個詞的出現頻繁程度,雖然不是線性的,但是可以認為是一個大概的描述,比如book是0.15對應文檔中出現的2次,investing是0.74對應了文檔中出現了9次,rich是0.36對應文檔中出現了3次;

其次,右奇異向量中一的第一行表示每一篇文檔中的出現詞的個數的近似,比如說,T6是0.49,出現了5個詞,T2是0.22,出現了2個詞。

然后我們反過頭來看,我們可以將左奇異向量和右奇異向量都取后2維(之前是3維的矩陣),投影到一個平面上,可以得到:

???? 在圖上,每一個紅色的點,都表示一個詞,每一個藍色的點,都表示一篇文檔,這樣我們可以對這些詞和文檔進行聚類,比如說stock 和 market可以放在一類,因為他們老是出現在一起,real和estate可以放在一類,dads,guide這種詞就看起來有點孤立了,我們就不對他們進行合并了。按這樣聚類出現的效果,可以提取文檔集合中的近義詞,這樣當用戶檢索文檔的時候,是用語義級別(近義詞集合)去檢索了,而不是之前的詞的級別。這樣一減少我們的檢索、存儲量,因為這樣壓縮的文檔集合和PCA是異曲同工的,二可以提高我們的用戶體驗,用戶輸入一個詞,我們可以在這個詞的近義詞的集合中去找,這是傳統的索引無法做到的。

三、圖像壓縮

我們來看一個奇異值分解在數據表達上的應用。假設我們有如下的一張 15 x 25 的圖像數據。

如圖所示,該圖像主要由下面三部分構成。

我們將圖像表示成 15 x 25 的矩陣,矩陣的元素對應著圖像的不同像素,如果像素是白色的話,就取 1,黑色的就取 0. 我們得到了一個具有375個元素的矩陣,如下圖所示

如果我們對矩陣M進行奇異值分解以后,得到奇異值分別是

σ?1??= 14.72?
σ?2??= 5.22?
σ?3??= 3.31

矩陣M就可以表示成

M?=?u?1?σ?1???v?1?T??+??u?2?σ?2???v?2?T??+??u?3?σ?3???v?3?T

v?i?具有15個元素,?u?i??具有25個元素,σ?i??對應不同的奇異值。如上圖所示,我們就可以用123個元素來表示具有375個元素的圖像數據了。

四、去除噪聲

前面的例子的奇異值都不為零,或者都還算比較大,下面我們來探索一下擁有零或者非常小的奇異值的情況。通常來講,大的奇異值對應的部分會包含更多的信息。比如,我們有一張掃描的,帶有噪聲的圖像,如下圖所示

我們采用跟實例二相同的處理方式處理該掃描圖像。得到圖像矩陣的奇異值:

σ?1??= 14.15?
σ?2??= 4.67?
σ?3??= 3.00?
σ?4??= 0.21?
σ?5??= 0.19?
…?
σ?15??= 0.05

很明顯,前面三個奇異值遠遠比后面的奇異值要大,這樣矩陣?M?的分解方式就可以如下:

M??????u?1?σ?1???v?1?T??+??u?2?σ?2???v?2?T??+??u?3?σ?3???v?3?T

經過奇異值分解后,我們得到了一張降噪后的圖像。

五、數據分析

我們搜集的數據中總是存在噪聲:無論采用的設備多精密,方法有多好,總是會存在一些誤差的。如果你們還記得上文提到的,大的奇異值對應了矩陣中的主要信息的話,運用SVD進行數據分析,提取其中的主要部分的話,還是相當合理的。

作為例子,假如我們搜集的數據如下所示:

我們將數據用矩陣的形式表示:

經過奇異值分解后,得到

σ?1??= 6.04?
σ?2??= 0.22

由于第一個奇異值遠比第二個要大,數據中有包含一些噪聲,第二個奇異值在原始矩陣分解相對應的部分可以忽略。經過SVD分解后,保留了主要樣本點如圖所示

就保留主要樣本數據來看,該過程跟PCA( principal component analysis)技術有一些聯系,PCA也使用了SVD去檢測數據間依賴和冗余信息.

參考資料:

1)?http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html?
2)A Tutorial on Principal Component Analysis, Jonathon Shlens?
3)?http://www.puffinwarellc.com/index.php/news-and-articles/articles/30-singular-value-decomposition-tutorial.html?
4)?http://www.puffinwarellc.com/index.php/news-and-articles/articles/33-latent-semantic-analysis-tutorial.html?
5)?http://www.miislita.com/information-retrieval-tutorial/svd-lsi-tutorial-1-understanding.html?
6)Singular Value Decomposition and Principal Component Analysis, Rasmus Elsborg Madsen, Lars Kai Hansen and Ole Winther, 2004?
7)?http://blog.sciencenet.cn/blog-696950-699432.html

總結

以上是生活随笔為你收集整理的SVD分解算法及其应用的全部內容,希望文章能夠幫你解決所遇到的問題。

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