|
快速獲得最新干貨 目錄:
1. 矩陣分解 1.1 矩陣分解作用
1.2 矩陣分解的方法
關(guān)于矩陣分解的方法大概就是上面這些。矩陣分解的主要應(yīng)用是:降維、聚類分析、數(shù)據(jù)預(yù)處理、低維度特征學(xué)習(xí)、特征學(xué)習(xí)、推薦系統(tǒng)、大數(shù)據(jù)分析等。上面把主要的矩陣分解方法給列出來了,比較混亂,再給大家擺上一張矩陣分解發(fā)展的歷史:
1.3 推薦學(xué)習(xí)的經(jīng)典矩陣分解算法 矩陣分解的算法這么多,給大家推薦幾個經(jīng)典的算法來學(xué)習(xí): 1) 經(jīng)典的PCA、SVD是機器學(xué)習(xí)入門必學(xué)算法。 2)2003年提出的主題模型LDA,在當年提出的時候,也是大紅大紫,現(xiàn)在也在廣泛的應(yīng)用,可以學(xué)習(xí)一下。 3)概率矩陣分解(PMF),主要應(yīng)用到推薦系統(tǒng)中,在大規(guī)模的稀疏不平衡Netflix數(shù)據(jù)集上取得了較好的結(jié)果。 4)非負矩陣分解,也很重要。非負矩陣分解及其改進版本應(yīng)用到很多領(lǐng)域中。 2.SVD具體介紹 2.1 特征值、特征向量、特征值分解 特征值分解和奇異值分解在機器學(xué)習(xí)中都是很常見的矩陣分解算法。兩者有著很緊密的關(guān)系,特征值分解和奇異值分解的目的都是一樣,就是提取出一個矩陣最重要的特征。 1)特征值、特征向量 如果一個向量v是矩陣A的特征向量,將一定可以表示成下面的形式: 其中,λ是特征向量v對應(yīng)的特征值,一個矩陣的一組特征向量是一組正交向量。 思考:為什么一個向量和一個數(shù)相乘的效果與一個矩陣和一個向量相乘的效果是一樣的呢? 答案:矩陣A與向量v相乘,本質(zhì)上是對向量v進行了一次線性變換(旋轉(zhuǎn)或拉伸),而該變換的效果為常數(shù)λ乘以向量v。當我們求特征值與特征向量的時候,就是為了求矩陣A能使哪些向量(特征向量)只發(fā)生伸縮變換,而變換的程度可以用特征值λ表示。 2)特征值與特征向量的幾何意義 一個矩陣其實就是一個線性變換,因為一個矩陣乘以一個向量后得到的向量,其實就相當于將這個向量進行了線性變換。比如說下面的這個矩陣: 它其實對應(yīng)的線性變換是圖2的形式: 圖2:矩陣M的線性變換 因為這個矩陣M乘以一個向量(x,y)的結(jié)果是: 上面的矩陣是對稱的,所以這個變換是一個對x、y軸的方向一個拉伸變換(每一個對角線上的元素將會對一個維度進行拉伸變換,當值大于1時是拉伸,當值小于1時是縮短),如圖2所示。當矩陣不是對稱的時候,假如說矩陣是下面的樣子: 它所描述的變換是下面的樣子: 圖3:M是非對稱矩陣變換 這其實是在平面上對一個軸進行的拉伸變換,如圖3藍色的箭頭所示,藍色的箭頭是一個最主要的變換方向(變換的方向可能不止一個)。如果想要描述好一個變換,那我們就需要描述好這個變換主要的變化方向。 2)特征值分解 對于矩陣A,有一組特征向量v,將這組向量進行正交化單位化,就能得到一組正交單位向量。特征值分解,就是將矩陣A分解為如下式: 其中,Q是矩陣A的特征向量組成的矩陣, 我們來分析一下特征值分解的式子,分解得到的Σ矩陣是一個對角矩陣,里面的特征值是由大到小排列的,這些特征值所對應(yīng)的特征向量就是描述這個矩陣變換方向(從主要的變化到次要的變化排列)。 當矩陣是高維的情況下,那么這個矩陣就是高維空間下的一個線性變換,這個線性變換可能沒法通過圖片來表示,但是可以想象,這個變換也同樣有很多的變化方向,我們通過特征值分解得到的前N個特征向量,就對應(yīng)了這個矩陣最主要的N個變化方向。我們利用這前N個變化方向,就可以近似這個矩陣變換。也就是之前說的:提取這個矩陣最重要的特征。 總結(jié):特征值分解可以得到特征值與特征向量,特征值表示的是這個特征到底有多么重要,而特征向量表示這個特征是什么,可以將每一個特征向量理解為一個線性的子空間,我們可以利用這些線性的子空間干很多事情。不過,特征值分解也有很多的局限,比如說變換的矩陣必須是方陣。 以上圖文的方式介紹特征值特征向量內(nèi)容來自: http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html 3)特征值分解的例子 這里我們用一個簡單的方陣來說明特征值分解的步驟。我們的方陣A定義為: 首先,由方陣A的特征方程,求出特征值。
特征值為 然后,把每個特征值λ帶入線性方程組 當λ=2時,解線性方程組
解得 當λ=1時,解線性方程組
最后,方陣A的特征值分解為:
2.2 SVD分解 1)特征值分解矩陣的缺點 我們前面講了很多特征值、特征向量和特征值分解,而且基于我們以前學(xué)習(xí)的線性代數(shù)知識,利用特征值分解提取特征矩陣是一個容易理解且便于實現(xiàn)的方法。但是為什么還存在奇異值分解呢?特征值分解最大的問題是只能針對方陣,即n*n的矩陣。而在實際的應(yīng)用中,我們分解的大部分都不是方陣。 舉個例子: 關(guān)系型數(shù)據(jù)庫中的某一張表的數(shù)據(jù)存儲結(jié)構(gòu)就類似于一個二維矩陣,假設(shè)這個表有m行,有n個字段,那么這個表數(shù)據(jù)矩陣規(guī)模就是m*n。很明顯,在絕大部分情況下,m與n是不相等的。如果這個時候要對這個矩陣進行特征提取,特征值分解的方法明顯就不行了。此時,就可以用SVD對非方陣矩陣進行分解。 2)奇異值分解 奇異值分解是一個能適用于任意矩陣的一種分解的方法,對于任意矩陣A總是存在一個奇異值分解:
假設(shè)A是一個m*n的矩陣,那么得到的U是一個m*m的方陣,U里面的正交向量被稱為左奇異向量。Σ是一個m*n的矩陣,Σ除了對角線其它元素都為0,對角線上的元素稱為奇異值。
圖4:奇異值分解中各個矩陣維度變化 思考:雖說上面奇異值分解等式成立,但是如何求得左奇異向量、右奇異向量和奇異值呢? 答案:由上面的奇異值分解等式,我們是不知道如何拆分矩陣A的。我們可以把奇異值和特征值聯(lián)系起來。 首先,我們用矩陣A的轉(zhuǎn)置乘以A,得到一個方陣,用這樣的方陣進行特征分解,得到的特征值和特征向量滿足下面的等式:
這里的 其次,我們將A和A的轉(zhuǎn)置做矩陣的乘法,得到一個方陣,用這樣的方陣進行特征分解,得到的特征和特征向量滿足下面的等式:
這里的 思考:上面我們說
上式證明中使用了 組成的矩陣就是我們SVD中的V矩陣,而 補充定義:
此外,我們還可以得到奇異值,奇異值求法有兩種: a) 第一種:
b)第二種: 通過上面*式的證明,我們還可以看出,特征值矩陣等于奇異值矩陣的平方,也就是說特征值和奇異值滿足如下關(guān)系:
這里的 思考:我們已經(jīng)知道如何用奇異值分解任何矩陣了,那么問題又來了,一個m*n的矩陣A,你把它分解成m*m的矩陣U、m*n的矩陣Σ和n*n的矩陣 補充:兩個矩陣A:m*n,B:n*p相乘,時間復(fù)雜度(O(nmp))。分析偽代碼如下:
所以兩個矩陣相乘的時間復(fù)雜度是 答案:在奇異值分解矩陣中Σ里面的奇異值按從大到小的順序排列,奇異值
其中r是一個遠遠小于m和n的數(shù),右邊的三個矩陣相乘的結(jié)果將會使一個接近A的矩陣。如果r越接近于n,則相乘的結(jié)果越接近于A。如果r的取值遠遠小于n,從計算機內(nèi)存的角度來說,右邊三個矩陣的存儲內(nèi)存要遠遠小于矩陣A的。所以在奇異值分解中r的取值很重要,就是在計算精度和時間空間之間做選擇。 3)SVD計算舉例 這里我們用一個簡單的矩陣來說明奇異值分解的步驟。我們的矩陣A定義為:
2.3 SVD分解的應(yīng)用 異值分解的應(yīng)用有很多,比如:用SVD解PCA、潛在語言索引也依賴于SVD算法??梢哉f,SVD是矩陣分解、降維、壓縮、特征學(xué)習(xí)的一個基礎(chǔ)的工具,所以SVD在機器學(xué)習(xí)領(lǐng)域相當?shù)闹匾?/span> 1)降維。 通過奇異值分解的公式,我們可以很容易看出來,原來矩陣A的特征有n維。經(jīng)過SVD分解后,可以用前r個非零奇異值對應(yīng)的奇異向量表示矩陣A的主要特征,這樣就把矩陣A進行了降維。 2)壓縮。 通過奇異值分解的公式,我們可以看出來,矩陣A經(jīng)過SVD分解后,要表示原來的大矩陣A,我們只需要存儲U、Σ、V三個較小的矩陣即可。而這三個較小規(guī)模的矩陣占用內(nèi)存上也是遠遠小于原有矩陣A的,這樣SVD分解就起到了壓縮的作用。 Reference: 1.https://blog.csdn.net/u011081315/article/details/76252524 2.https://blog.csdn.net/weixin_37589896/article/details/78423493 3.http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html 4.https://blog.csdn.net/bitcarmanlee/article/details/52068118 5.http://www.cnblogs.com/pinard/p/6251584.html 交流群 |
|
|