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