線性代數精華——矩陣的特征值與特征向量


今天和大家聊一個非常重要,在機器學習領域也廣泛使用的一個概念——矩陣的特征值與特征向量。

我們先來看它的定義,定義本身很簡單,假設我們有一個n階的矩陣A以及一個實數\(\lambda\),使得我們可以找到一個非零向量x,滿足:

\[Ax=\lambda x \]

如果能夠找到的話,我們就稱\(\lambda\)是矩陣A的特征值,非零向量x是矩陣A的特征向量。


幾何意義


光從上面的式子其實我們很難看出來什么,但是我們可以結合矩陣變換的幾何意義,就會明朗很多。

我們都知道,對於一個n維的向量x來說,如果我們給他乘上一個n階的方陣A,得到Ax。從幾何角度來說,是對向量x進行了一個線性變換。變換之后得到的向量y和原向量x的方向和長度都發生了改變。

但是,對於一個特定的矩陣A來說,總存在一些特定方向的向量x,使得Ax和x的方向沒有發生變化,只是長度發生了變化。我們令這個長度發生的變化當做是系數\(\lambda\),那么對於這樣的向量就稱為是矩陣A的特征向量,\(\lambda\)就是這個特征向量對應的特殊值。


求解過程


我們對原式來進行一個很簡單的變形:

\[(A-\lambda I)x = 0 \]

這里的I表示單位矩陣,如果把它展開的話,可以得到一個n元的齊次線性方程組。這個我們已經很熟悉了,這個齊次線性方程組要存在非零解,那么需要系數行列式

\[|A-\lambda I| \]

不為零,也就是系數矩陣的秩小於n。

我們將這個行列式展開:

\[\left| \begin{matrix} a_{11}-\lambda & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{22} - \lambda & \cdots & a_{2n} \\ \vdots & \vdots & & \vdots \\ a_{n1} & a_{n2} & \cdots & a_{nm} - \lambda \end{matrix} \right| \]

這是一個以\(\lambda\)為未知數的一元n次方程組,n次方程組在復數集內一共有n個解。我們觀察上式,可以發現\(\lambda\)只出現在正對角線上,顯然,A的特征值就是方程組的解。因為n次方程組有n個復數集內的解,所以矩陣A在復數集內有n個特征值。

我們舉個例子,嘗試一下:

假設:

\[A=\left[ \begin{matrix} a_{11}-\lambda & a_{12} \\ a_{21} & a_{22}-\lambda \\ \end{matrix} \right] \]

那么\(f(\lambda)=(a_{11}-\lambda)(a_{22}-\lambda)-a_{12}a_{21}=\lambda^2-(a_{11}+a_{22})\lambda-|A|\),我們套入求根公式可以得出使得\(f(\lambda)=0\)的兩個根\(\lambda_1, \lambda_2\),有:\(\lambda_1+\lambda_2=a_{11}+a_{22},\quad \lambda_1\lambda_2=|A|\)

這個結論可以推廣到所有的n都可以成立,也就是說對於一個n階的方陣A,都可以得到:

  1. \(\lambda_1+\lambda_2+\cdots+\lambda_n=a_{11}+a_{22}+\cdots+a_{nn}\)
  2. \(\lambda_1\lambda_2\cdots\lambda_n=|A|\)

案例


我們下面來看一個例子:

\[A=\left[ \begin{matrix} 3 & 1 \\ 1 & 3 \end{matrix} \right]\]

我們帶入\((A-\lambda I)x=0\),可以得到:

\[\left| \begin{matrix} 3-\lambda & 1 \\ 1 & 3 - \lambda \end{matrix} \right|=0 \]

所以: \((3-\lambda)^2 - 1 = 0\),可以看出來\(\lambda_1=2, \quad \lambda_2=4\)

\(\lambda=2\)時:

\[\left[ \begin{matrix} 3 & 1\\ 1 & 3 \end{matrix} \right]x = 2x \]

\[\left[ \begin{matrix} 3 & 1\\ 1 & 3 \end{matrix} \right][a_1, a_2]^T = [2a_1, 2a_2]^T \]

\[\begin{aligned} 3a_1 + a_2 &= 2a_1 \\ a_1 + 3a_2 &= 2a_2 \end{aligned} \]

解之,可以得到:\(a_1+a_2=0\),所有\((x, -x)\)向量都是A的特征向量。

同理,當\(\lambda = 4\)時:

\[\begin{aligned} \left[ \begin{matrix} 3 & 1\\ 1 & 3 \end{matrix} \right]x &= 4x \\ \left[ \begin{matrix} 3 & 1\\ 1 & 3 \end{matrix} \right][a_1, a_2]^T &= [4a_1, 4a_2]^T \\ 3a_1 + a_2 &= 4a_1 \\ a_1 + 3a_2 &= 4a_2 \end{aligned} \]

解之,可以得到:\(a_1=a_2\),所有\((x, x)\)向量都是A的特征向量。


使用Python求解特征值和特征向量


在我們之前的文章當中,我們就介紹過了Python在計算科學上的強大能力,這一次在特征值和特征矩陣的求解上也不例外。通過使用numpy當中的庫函數,我們可以非常輕松,一行代碼,完成特征值和特征向量的雙重計算。

我們一起來看代碼:

import numpy as np

a = np.mat([[3, 1], [1, 3]])
lam, vet = np.linalg.eig(a)

np.linalg.eig 方法會返回兩個值,第一個返回值是矩陣的特征值,第二個返回值是矩陣的特征向量,我們看下結果:

這里的特征向量為什么是0.707呢?因為Python自動幫我們做好了單位化,返回的向量都是單位向量,不得不說實在是太貼心了。


總結


關於矩陣的特征值和特征向量的介紹到這里就結束了,對於算法工程師而言,相比於具體怎么計算特征向量以及特征值。理解清楚它們的概念和幾何意義更加重要,因為這兩者在機器學習的領域當中廣泛使用,在許多降維算法當中,大量使用矩陣的特征值和特征向量。

對於降維算法的原理,這里不過多贅述,我們會在以后的文章當中更新相關內容。感興趣的同學可以小小期待一下。

文章到這里就結束了,這也是線性代數專題的最后一篇文章,短短六篇文章當然不能涵蓋線性代數這門學科當中的所有知識點,但實際當中常用的內容基本上已經都包括了。下周我們將開始全新的Python專題,希望大家多多期待。

如果覺得有所收獲,請順手點個關注或者轉發吧,你們的支持是我最大的動力。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM