SVD矩陣奇異值分解

2021-07-24 09:14:19 字數 2762 閱讀 7920

不正之處,歡迎指正!

矩陣的奇異值分解是線性代數中一種重要的矩陣分解,在訊號處理,統計學等領域中有著重要的應用。在大學裡面的線性代數的課程中一般都是會有svd分解相關的知識的。但是往往只是涉及到理論上的知識體系,並沒有多少實際應用的背景,所以結果就是學了沒多久就會忘。奇異值分解可以將乙個比較複雜的矩陣用幾個小的簡單的矩陣來表示,這些小的矩陣可以很好的表示原始矩陣的重要特性。在機器學習方面,很多的研究都是和奇異值分解有關的,典型的用於特徵降維處理的pca。在本文中我們會先介紹特徵值得概念,由特徵值引出奇異值分解,最後會給出實際中求解奇異值的方法。

1.特徵值

a為nxn矩陣,若存在常數

λ及n維非零向量

x,使得

ax=λx,則稱λ是矩陣

a的特徵值,x是

a屬於特徵值λ的特徵向量。乙個矩陣的一組特徵向量是正交的,所謂的特徵值分解就是將乙個方陣a分解成一下的形式:

其中q是方陣a所有的特徵向量組成的矩陣,q中的每一列代表矩陣a的乙個特徵向量,

σ是乙個對角矩陣,每乙個對角線上的元素就代表乙個特徵值。也就是經過這樣的乙個變化將方陣a換了乙個形式,那麼這麼做的一一是什麼呢?

首先我們要知道乙個矩陣其實就是對應著乙個固定的線性變換,在特徵值的定義中,我們定義矩陣乘上乙個向量最後得到乙個實數和向量的乘積,其實就是對向量進行了乙個變化,變換的幅度大小也就是我們的特徵值。可以來看乙個例子說明這個問題:比如說下面的矩陣

m乘以乙個向量(x,y)的結果是:

向量(x,y)通過矩陣m作用之後變成了向量(3x,y)這個過程可以形象的用下面的圖來展示:

矩陣m的作用就相當於將這個二維的向量橫座標拉伸了2倍,縱座標沒有做變化,這一點像高中學習波形函式時候的函式變換。當矩陣是高維的情況下,這個矩陣就是高維空間中的乙個線性變換,通過特徵值分解求得特徵值和特徵向量,可以用來表示這個矩陣的重要特徵,其中特徵向量表明了這個重要的特徵是什麼,而特徵值表示了這個特徵的重要程度。

下面給出乙個求解矩陣特徵值的例子:

import numpy as np

>>> x=np.diag((1,2,3))

>>> x

array([[1, 0, 0],

[0, 2, 0],

[0, 0, 3]])

>>> a,b=np.linalg.eig(x)

>>> a

array([ 1., 2., 3.])

>>> b

array([[ 1., 0., 0.],

[ 0., 1., 0.],

[ 0., 0., 1.]])

在這個例子中,先生成乙個對角矩陣,然後利用numpy中的方法直接求解得到矩陣的特徵值和特徵向量,其中a表示的是特徵值,b表示的是特徵值對應的特徵向量。

2.奇異值分解

由上面的例子討論可以知道,通過特徵值分解可以得到矩陣的特徵值和特徵向量有次來表示矩陣的主要特徵,但是這是對於矩陣是方陣的情況下,但是在實際應用中,很難保證矩陣是方陣的情況,那麼這種情況下有該怎麼做呢?這個時候就用到了矩陣的奇異值分解。

假設矩陣a是乙個mxn的矩陣,如果存在這樣的乙個分解使得

其中u是乙個mxm的矩陣,u的列組成一套對於a的正交輸出的基向量,這些向量是a與其轉置的特徵向量,

σ是乙個mxn的對角矩陣,對角線上的元素稱為奇異值,v的轉置是乙個nxn的矩陣,裡面的向量正交。可以用下圖來表示:

利用矩陣的轉置乘以其自身,可以得到乙個方陣,求解這個方陣的特徵值和特徵向量

利用這個公式求得的v就是上述

這樣,可以用右邊三個矩陣來近似的描述左邊的矩陣a.下面給出乙個求解奇異值的過程:

from numpy import *

a=mat([[1,2,3],[4,5,6]])

u,sigma,vt=linalg.svd(a)

print(u)

print(sigma)

print(vt)

對應的結果如下:

3.奇異值分解和pca

利用pca通過求解特徵值和特徵向量,選取前n個特徵值對應的特徵向量,可以對資料進行降維。pca的為題其實乙個基變換,使得變換之後的資料具有最大的方差,方差越大,資料也就越分散,這樣也就越有利於進行分類。

假設現在有乙個mxn的矩陣a,矩陣的每一行表示乙個樣本,矩陣的每一列表示乙個特徵維度,利用pca的思想可以將乙個n維的空間變換到另乙個r維的空間,數學公式表達如下:

但是這個跟我們的svd有什麼關係呢,上面講到過,利用svd分解得到的

在矩陣的兩邊同時乘以矩陣v,因為v是正交的,所以

這裡的v相當於我們上面的p,所以在原始的矩陣a上作用乙個v後,矩陣可以表示為乙個mxr的矩陣,將乙個n維空間的資料投影到了r維空間,思想和pca是一樣的。

矩陣奇異值分解SVD

矩陣分解有兩種一種是特徵值分解,但是其針對方陣,所以提出了奇異值分解。分解過程為 u的列組成一套對a的正交 輸入 或 分析 的基向量。這些向量是 的特徵向量。v的列組成一套對a的正交 輸出 的基向量。這些向量是 的特徵向量 得到的是右奇異向量,是奇異值,u是左奇異向量,奇異值跟特徵值類似,在矩陣 中...

奇異值分解 SVD

最近不小心接觸到了svd,然後認真看下去之後發現這東西真的挺強大的,把乙個推薦問題轉化為純數學矩陣問題,看了一些部落格,把乙個寫個比較具體的博文引入進來,給自己看的,所以把覺得沒必要的就去掉了,博文下面附原始部落格位址。一 基礎知識 1.矩陣的秩 矩陣的秩是矩陣中線性無關的行或列的個數 2.對角矩陣...

SVD奇異值分解

原文出處 今天我們來講講奇異值分解和它的一些有意思的應用。奇異值分解是乙個非常,非常,非常大的話題,它的英文是 singular value decomposition,一般簡稱為 svd。下面先給出它大概的意思 對於任意乙個 m n 的矩陣 m 不妨假設 m n 它可以被分解為 m udv t 其...