目錄 😄
1️⃣ 簡單說一下特徵值、特徵向量與特徵分解
I. 特徵值、特徵向量與特徵分解
II. 幾何意義
III. 如何實現通過Matlab、Python實現
2️⃣詳細解說SVD
I. 幾何意義
I. 奇異值分解的推導過程
I. SVD算例
I. 如何通過Matlab和Python
3️⃣應用舉例
I. 特徵值、特徵向量與特徵分解
4️⃣特徵分解、奇異值分解的區別
I. 特徵分解、奇異值分解的區別
簡單說一下特徵值、特徵向量與特徵分解
特徵值、特徵向量與特徵分解
Theory:
對於一個正陣\(M\),滿足如下:
\[Mx=\lambda x \]
其中\(\lambda\)被成爲特徵值,滿足\(||M-\lambda E||=0\)再有\((M-\lambda E)x=0\),可計算其特徵向量。
如果有了特徵值和特徵向量後呢,則可以將矩陣\(M\)用特徵分解:
\[ M=W\sum W^{-1}\]
\(W={w_1,w_2,...,w_n}\)分別是特徵值\(\lambda_1,\lambda_2,...,\lambda_n\)對應的特徵向量構成的方陣
幾何意義
對應矩陣M,其對應的線性變化
\[Mx = x'\]
上面這個式子,\(Mx,x'\)是一個向量,\(x,x'\)可能是不共線的(如圖(b)),如果向量\(Mx,x'\)滿足\(Mx=x'=\lambda x\),則如圖(b),這說明了這個變換就是對向量x做一個拉伸或者壓縮。
如何實現通過Matlab、Python實現
數學推導:
\[ Mx = \lambda x\]
\[ Mx-\lambda x=(M-\lambda E)x=0\]
齊次線性方程組有非零解,則\[||M-\lambda E||=0\]可求得特徵向量
再帶回,可得特徵向量。
Matlab:
d = eig(M) % 求取矩陣M的特徵值,向量形式存儲
[V,D] = eig(M) % 計算M的特徵值對角陣D和特徵向量V,使得MV = VD成立
[V,D] = eig(M,'nobalance') %當矩陣M中有與截斷誤差數量級相差不遠的值時,該指令可能更精確。'nobalance'起誤差調節作用
Python
numpy科學計算庫提供相應的方法
import numpy as np
x = np.diag((1,2,3)) # 這是你想要求取特徵值的數組
a,b = numpy.linalg.elg(x) # 特徵值賦值給a,對應的特徵向量賦值給b
詳細解說SVD
SVD的英文全稱: Singular Value Decomposition,中文名字:奇異值分解
幾何意義
圖來源
以二維空間爲例
幾何意義就是把一個單位正交的網格,轉換爲另外一個單位正交的網格
假如選取了一組單位正交基{\(\vec{v}_1,\vec{v}_2\)},剛好矩陣M的線性變化(\(M\vec{v}_1\),\(M\vec{v}_2\))也正交,用\(\vec{u}_1,\vec{u}_2\)分別表示\(M\vec{v}_1\),\(M\vec{v}_2\)的單位向量,用\(\lambda_1,\lambda_2\)表示\(M\vec{v}_1\),\(M\vec{v}_2\)的長度,描述網格在這些特定方向上的拉伸量,也被稱作矩陣M的奇異值。
\(M\vec{v}_1 =\lambda_1\vec{u}_1\)
\(M\vec{v}_2 =\lambda_2\vec{u}_2\)
對任意給定的向量\(\vec{x}\),則有
\[
\mathbf{x}=\left(\mathbf{v}_{1} \cdot \mathbf{x}\right) \mathbf{v}_{1}+\left(\mathbf{v}_{2} \cdot \mathbf{x}\right) \mathbf{v}_{2}
\]
再將M的線性變換
\[
\begin{aligned} M \mathbf{x} &=\left(\mathbf{v}_{1} \cdot \mathbf{x}\right) M \mathbf{N}_{1}+\left(\mathbf{v}_{2} \cdot \mathbf{x}\right) M \mathbf{v}_{2} \\ M \mathbf{x} &=\left(\mathbf{v}_{1} \cdot \mathbf{x}\right) \sigma_{1} \mathbf{u}_{1}+\left(\mathbf{v}_{2} \cdot \mathbf{x}\right) \sigma_{2} \mathbf{u}_{2} \end{aligned}
\]
\[
\begin{array}{c}{M \mathbf{x}=\mathbf{u}_{1} \sigma_{1} \mathbf{v}_{1}^{\top} \mathbf{x}+\mathbf{u}_{2} \sigma_{2} \mathbf{v}_{2}^{\top} \mathbf{x}} \\ {M=\mathbf{u}_{1} \sigma_{1} \mathbf{v}_{1}^{\top}+\mathbf{u}_{2} \sigma_{2} \mathbf{v}_{2}^{\top}}\end{array}
\]
so
\[
M=U \Sigma V^{T}
\]
奇異值分解的推導過程
\(u=(u_1,u_2,...,u_m)\)
\(v=(v_1,v_2,...,v_n)\)
\(u,v\)都是空間的基,是正交矩陣 \(u^Tu=E,v^Tv = E\)
任何一個矩陣\(M_{m*n}\),\(rank(M)=k\),一定存在SVD,換句話說,M可以將一組單位正交基映射到另一組單位正交基。答案是肯定的
證明如下:
再n爲空間中,有一組單位正交基{\(\vec{v}_1,\vec{v}_2,...,\vec{v}_n\)},線性變化作用以後
\[
{M\vec{v}_1,M\vec{v}_2,...,M\vec{v}_n}
\]
也是正交的,則有
\[(M\vec{v}_i,M\vec{v}_j) = (M\vec{x}_i)^TM\vec{v}_j=\vec{v}_i^TM^TM\vec{v}_j=0
\]
注意喔,\(M^TM\)是矩陣喔,則會有\(M^TM\vec{v}_j=\lambda \vec{v}_j\)
接下去,
\[
\begin{aligned} v_{i}^{T} M^{T} \mathrm{M} v_{j}=& v_{i}^{T} \lambda_{j} v_{j} \\ &=\lambda_{j} v_{i}^{T} v_{j} \\ &=\lambda_{j} v_{i}\dot v_{j}=0 \end{aligned}
\]
上述就證明了是有的:任何一個矩陣,都可以將一組單位正交基轉換成另外一組正交基。
當\(i=j\),\(<M\vec{v}_i,M \vec{v}_i>=\lambda_i \vec{v}_i \vec{v}_i =\lambda_i\)
進行一些單位化,記\(u_i=\frac{A\vec{v}_i}{|M\vec{v}_i|}=\frac{1}{\sqrt{\lambda_i}}M\vec{v}_i\)
則
\[
A v_{i}=\sigma_{i} u_{i}, \sigma_{i}(\operatorname{奇異值})=\sqrt{\lambda_{i}}, 0 \leq i \leq \mathrm{k}, \mathrm{k}=\operatorname{Rank}(\mathrm{A})
\]
當\(k < i <= m\)時,對\(u1,u2,...,uk\)進行擴展\(u(k+1),...,um\),使得\(u1,u2,...,um\)爲\(m\)維空間中的一組正交基.也可對\(\vec{v}_1,\vec{v}_2,...,\vec{v}_k\)進行擴展,擴展的\(\vec{v}_{k+1},...,\vec{v}_{n}\)存在零子空間裏面。
\[
M\left[ \begin{array}{lll}{\vec{v}_{1}} & {\cdots} & {\vec{v}_{k}}\end{array}\right| \vec{v}_{k+1} \quad \cdots \quad \vec{v}_{m} ]=
\left[ \begin{array}{c}{\vec{u}_{1}^{T}} \\ {\vdots} \\ {\frac{\vec{u}_{k}^{T}}{\vec{u}_{k+1}}} \\ {\vdots} \\ {\vec{u}_{n}^{T}}\end{array}\right] \left[ \begin{array}{ccc|c}\sigma_{1} & & 0 & 0\\ & {\ddots} & \sigma_{k} & 0 \\ \hline 0 & & 0 &0\end{array}\right]
\]
\[
M=\left[ \begin{array}{lll}{\vec{u}_{1}} & {\cdots} & {\vec{u}_{k}}\end{array}\right] \left
[ \begin{array}{ccc}\sigma_{1} & & \\ & {\ddots} & \\ & & {\sigma_{k}}\end{array}\right]
\left[ \begin{array}{c}{\vec{v}_{1}^{T}} \\ {\vdots} \\ {\vec{v}_{k}^{T}}\end{array}\right]+
\left[ \begin{array}{ccc}{\vec{u}_{k+1}} & {\cdots} & {\vec{u}_{m}}\end{array}\right]
\left[\begin{array}{c} 0 \end{array} \right]
\left[ \begin{array}{c}{\vec{v}_{k+1}^{T}} \\ {\vdots} \\ {\vec{v}_{n}^{T}}\end{array}\right]
\]
SVD算例
U:\(AA^T\)的特徵值和特徵向量,用單位化的特徵向量構成 U
V: \(A^TA\) 的特徵值和特徵向量,用單位化的特徵向量構成 V
$\sum_{mn} $ :將$ AA^{T} \(或者 A^{T}A 的特徵值求平方根,然後構成 Σ 以矩陣\)A = \left[\begin{matrix} 1 & 1\1 &1\ 0 &0\\end{matrix} \right]$
第一步 U ,下面是一種計算方法
對矩陣\[
A A^{T}=\left[ \begin{array}{lll}{2} & {2} & {0} \\ {2} & {2} & {0} \\ {0} & {0} & {0}\end{array}\right]
\]特徵分解,
特徵是4,0,0
特徵向量是$
\left[\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}, 0\right]^{T},\left[-\frac{1}{\sqrt{2}}, \frac{1}{\sqrt{2}}, 0\right]^{T},[0,0,1]^{T}$,可得到
\[
U=\left[ \begin{array}{ccc}{\frac{1}{\sqrt{2}}} & {-\frac{1}{\sqrt{2}}} & {0} \\ {\frac{1}{\sqrt{2}}} & {\frac{1}{\sqrt{2}}} & {0} \\ {0} & {0} & {1}\end{array}\right]
\]
第二步
計算矩陣\(A^TA\)的特徵分解,可得
特徵值4,0,
\[
V=\left[ \begin{array}{cc}{\frac{1}{\sqrt{2}}} & {-\frac{1}{\sqrt{2}}} \\ {\frac{1}{\sqrt{2}}} & {\frac{1}{\sqrt{2}}}\end{array}\right]
\]
第三步
計算\(\sum_{mn}\)
\[
\Sigma=\left[ \begin{array}{ll}{2} & {0} \\ {0} & {0} \\ {0} & {0}\end{array}\right]
\]
最後,
\[
A=U \Sigma V^{T}=\left[ \begin{array}{ccc}{\frac{1}{\sqrt{2}}} & {-\frac{1}{\sqrt{2}}} & {0} \\ {\frac{1}{\sqrt{2}}} & {\frac{1}{\sqrt{2}}} & {0} \\ {0} & {0} & {1}\end{array}\right] \left[ \begin{array}{ll}{2} & {0} \\ {0} & {0} \\ {0} & {0}\end{array}\right] \left[ \begin{array}{cc}{\frac{1}{\sqrt{2}}} & {-\frac{1}{\sqrt{2}}} \\ {\frac{1}{\sqrt{2}}} & {\frac{1}{\sqrt{2}}}\end{array}\right]^{T}=\left[ \begin{array}{cc}{1} & {1} \\ {1} & {1} \\ {0} & {0}\end{array}\right]
\]
如何通過Matlab和Python
Matlab:
s = svd(A)
[U,S,V] = svd(A)
[U,S,V] = svd(A,'econ')
[U,S,V] = svd(A,0)
input: A 矩陣
output:
s:奇異值,以列向量形式返回。奇異值是以降序順序列出的非負實數
S:
U:左奇異向量,以矩陣的列形式返回。
V:奇異值,以對角矩陣形式返回。S 的對角元素是以降序排列的非負奇異值。
右奇異向量,以矩陣的列形式返回。
Python
import numpy as np
M = np.array([ [1,1,2],[0,0,1]])
U,S,V = np.linalg.svd(M)
應用舉例
## 應用
2.1 信息檢索
2.2 推薦系統
2.3 基於協同過濾的推薦系統
2.4 圖像壓縮
特徵值分解和奇異值分解的區別
- 特徵值分解只能是方陣,而奇異值分解是矩陣就可以
- 特徵值分解只考慮了對矩陣縮放效果,奇異值分解對矩陣有選擇、收縮、投影的效果