奇异值分解讨论及其实现的计算步骤
前言
在看一個(gè)教程的發(fā)現(xiàn)對(duì)奇異值分解不太熟悉,因此從新搜索了相關(guān)資料,然后,總結(jié)成這個(gè)咯。
一般來說,想要獲得低維的子空間,最簡單的是對(duì)原始的高維空間進(jìn)行線性變換(當(dāng)然了,非線性也是可以的,如加入核函數(shù),比較著名的就是KPCA)。SVD和PCA呢,都實(shí)現(xiàn)了降維與重構(gòu),但是呢,思路不太一樣,老師課上提了一次,以前看的迷迷糊糊的,這次下定決心,怎么都要搞清楚這兩個(gè)概念。
SVD(singular value decomposition),線性代數(shù)里也叫作奇異值分解,可以用來計(jì)算矩陣的特征值(奇異值)和特征向量(我知道表達(dá)不準(zhǔn)確,但我也不想知道正確的說法)。
SVD大多數(shù)情況下用來提取一個(gè)矩陣的主特征值,可以用于圖像的壓縮和去噪。舉個(gè)例子,將一個(gè)血細(xì)胞示意圖像奇異值分解,
原圖像共有10001個(gè)奇異值,這里選用100個(gè)奇異值重建
奇異值分解的公式為
A=UDVtA=UDV^tA=UDVt
矩陣sigma中的最大的特征值所對(duì)應(yīng)的U和V中的列向量和行向量,也就包含了圖像中最多的信息。而且這種信息應(yīng)該是低頻的信息,特征值越大,表明原矩陣中的列向量的在該方向上的投影長度越大,也就是相關(guān)性越大,通過小的特征值重構(gòu)出來的成分往往是高頻噪聲,因?yàn)樵谶@些方向上,原矩陣中各個(gè)向量的相關(guān)性很小。
為什么說這些,其實(shí)我就想說,SVD也是一種實(shí)用的降維手段。下面說說是具體怎么降維的,降得是什么維?
因?yàn)檎N覀儠?huì)把每一個(gè)樣本排成一個(gè)列向量,原始的矩陣C(m*n)的行數(shù)指的樣本的維數(shù)m,列數(shù)就是樣本的個(gè)數(shù)n,,現(xiàn)實(shí)生活中m<<n,因此rank(C)<=m。一個(gè)m維的向量,使用m個(gè)基向量就可以將其完備的表示出來,SVD就是尋找這些基向量。我們進(jìn)行奇異值分解后,注意U的列向量和V的行向量都是單位向量,這不是明擺著的基向量么。將U中的列向量看做基,這些基地原矩陣C的列向量的基底,并且對(duì)于C中所有的列向量來說,這些矩陣在基向量u1上的投影長度最長,也就是說相關(guān)度最高,因?yàn)閡1向量對(duì)應(yīng)的sigma值最大,因此可以看做具體請(qǐng)看下圖。
看完上面的圖,有沒有疑問,有就對(duì)了,我也是剛想到的一個(gè)問題,就拿c1向量來說,把他span成基向量的表達(dá)方式時(shí),每個(gè)基向量前面的系數(shù)不僅有sigma,還有v1(1)等系數(shù),經(jīng)過這些系數(shù)的加權(quán)之后,那u1這個(gè)主向量還能保證嗎?
答:可以保證,給大家一個(gè)思路,v*向量是單位向量,剩下來的大家應(yīng)該知道了吧。
PCA(Principal Component Analysis)主成分分析最常用的一種降維方法,出發(fā)點(diǎn)是對(duì)于正交屬性空間中的樣本點(diǎn),如何使用一個(gè)超平面對(duì)所有的樣本進(jìn)行恰當(dāng)?shù)谋磉_(dá)。PCA在CSDN上已經(jīng)被講了n次了,有就不詳細(xì)講了,就理一理思路,大家感興趣可以搜其他大牛的博客看看。一般來說,有兩個(gè)出發(fā)點(diǎn),1)樣本點(diǎn)到這個(gè)超平面的距離足夠近(重構(gòu)性,最大程度的代表樣本點(diǎn)),2)樣本點(diǎn)在這個(gè)超平面上的投影盡可能分開(可分性,樣本點(diǎn)在降維空間內(nèi)可以區(qū)分)下面使用第二個(gè)指導(dǎo)思想簡單的推導(dǎo)一下
利用PCA進(jìn)行降維的過程中,我們只需要按照特征值的大小順序,將原來的樣本挨個(gè)往特征向量投影即可,至于選幾個(gè)向量,一般來說需要調(diào)參。
Andrew ng教程中又提及了白化(whiten)的概念,目的就是為了把特征向量的特征值變成1,這樣就消除了主方向的影響,具體可以看 http://ufldl.stanford.edu/wiki/index.php/Whitening。
矩陣的奇異值是一個(gè)數(shù)學(xué)意義上的概念,一般是由奇異值分解(Singular Value Decomposition,簡稱SVD分解)得到。如果要問奇異值表示什么物理意義,那么就必須考慮在不同的實(shí)際工程應(yīng)用中奇異值所對(duì)應(yīng)的含義。
奇異值往往對(duì)應(yīng)著矩陣中隱含的重要信息,且重要性和奇異值大小正相關(guān)。每個(gè)矩陣都可以表示為一系列秩為1的“小矩陣”之和,而奇異值則衡量了這些“小矩陣”對(duì)于的權(quán)重。奇異值的幾何含義為:這組變換后的新的向量序列的長度
奇異值分解,就是把矩陣分成多個(gè)“分力”
奇異值的大小,就是各個(gè)“分力”的大小
設(shè)X是一個(gè)n*m的數(shù)據(jù)矩陣(在此不把它理解成變換),每一列表示一個(gè)數(shù)據(jù)點(diǎn),每一行表示一維特征。
對(duì)X做主成分分析(PCA)的時(shí)候,需要求出各維特征的協(xié)方差,這個(gè)協(xié)方差矩陣是。
(其實(shí)需要先把數(shù)據(jù)平移使得數(shù)據(jù)的均值為0,不過在此忽略這些細(xì)節(jié))
PCA做的事情,是對(duì)這個(gè)協(xié)方差矩陣做對(duì)角化:
可以這樣理解上式右邊各項(xiàng)的物理意義:用一個(gè)均值為0的多維正態(tài)分布來擬合數(shù)據(jù),則正交矩陣P的每一列是正態(tài)分布的概率密度函數(shù)的等高線(橢圓)的各個(gè)軸的方向,而對(duì)角矩陣的對(duì)角線元素是數(shù)據(jù)在這些方向上的方差,它們的平方根跟橢圓各個(gè)軸的長度成正比。
現(xiàn)在來看數(shù)據(jù)矩陣X的奇異值分解:,其中U、V各列是單位正交的,S是對(duì)角陣,對(duì)角元非零。
由此式可以得到。
也就是說,SVD中的矩陣U相當(dāng)于PCA中的矩陣P,不過僅保留了的非零特征值對(duì)應(yīng)的那些特征向量,而(也只保留了非零特征值)。
所以,SVD中的U代表了X中數(shù)據(jù)形成的正態(tài)分布的軸的方向(一組單位正交基),代表了這些軸的長度(分布的標(biāo)準(zhǔn)差)。
那么V呢?可以把US放在一起看成一個(gè)由伸縮和旋轉(zhuǎn)組成的坐標(biāo)變換(不包括平移),數(shù)據(jù)矩陣X是由數(shù)據(jù)矩陣經(jīng)此變換得來的,而的各列(V的各行)則服從標(biāo)準(zhǔn)正態(tài)分布。這也就是說,的各維特征(的各行,V的各列)是互不相關(guān)的且各自的方差均為1,也就是說V的各列是單位正交的。
現(xiàn)在換一個(gè)角度,把X中的各行看作數(shù)據(jù),那么就也有了新的理解。
現(xiàn)在,的各行(V的各列)就成了X的各行形成的正態(tài)分布的軸向(單位正交基),是這些軸的長度,而U中的各行數(shù)據(jù)服從標(biāo)準(zhǔn)正態(tài)分布,U的各列單位正交。
可以看到,對(duì)于這個(gè)式子,無論是把X的各行還是各列看成數(shù)據(jù),都能解釋U、V各列的單位正交性,但它們的單位正交性的含義不同(一個(gè)是單位正交基,一個(gè)是標(biāo)準(zhǔn)正態(tài)分布)。其中S除以數(shù)據(jù)個(gè)數(shù)的平方根后是標(biāo)準(zhǔn)正態(tài)分布在各個(gè)軸上的標(biāo)準(zhǔn)差,從兩個(gè)角度看得到的標(biāo)準(zhǔn)差是成比例的。
本文來自 蘆金宇 的CSDN 博客 ,全文地址請(qǐng)點(diǎn)擊:https://blog.csdn.net/ch1209498273/article/details/78385248?utm_source=copy
問題模型:
對(duì)下面的矩陣進(jìn)行SVD運(yùn)算:
步驟1:
步驟2:
步驟3:構(gòu)建對(duì)角矩陣S
通過上面的圖可以看出來A被分解了之后又被近似的還原過來。
reference
svd
《機(jī)器學(xué)習(xí)》周志華
《The Matrix Cook book》 version:November 15,2012(強(qiáng)烈推薦的手頭工具書,涉及矩陣的求導(dǎo)之類的直接套公式就行
總結(jié)
以上是生活随笔為你收集整理的奇异值分解讨论及其实现的计算步骤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python dataframe 取每行
- 下一篇: 命令行导出数据mysql数据库_MySQ