今天和大家聊乙個非常重要,在機器學習領域也廣泛使用的乙個概念——矩陣的特徵值與特徵向量。
我們先來看它的定義,定義本身很簡單,假設我們有乙個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
a_-\lambda & a_ & \cdots & a_ \\
a_ & a_ - \lambda & \cdots & a_ \\
\vdots & \vdots & & \vdots \\
a_ & a_ & \cdots & a_ - \lambda
\end
\right|
\]這是乙個以\(\lambda\)為未知數的一元n次方程組,n次方程組在複數集內一共有n個解。我們觀察上式,可以發現\(\lambda\)只出現在正對角線上,顯然,a的特徵值就是方程組的解。因為n次方程組有n個複數集內的解,所以矩陣a在複數集內有n個特徵值。
我們舉個例子,嘗試一下:
假設:\[a=\left[
\begin
a_-\lambda & a_ \\
a_ & a_-\lambda \\
\end
\right]
\]那麼\(f(\lambda)=(a_-\lambda)(a_-\lambda)-a_a_=\lambda^2-(a_+a_)\lambda-|a|\),我們套入求根公式可以得出使得\(f(\lambda)=0\)的兩個根\(\lambda_1, \lambda_2\),有:\(\lambda_1+\lambda_2=a_+a_,\quad \lambda_1\lambda_2=|a|\)。
這個結論可以推廣到所有的n都可以成立,也就是說對於乙個n階的方陣a,都可以得到:
\(\lambda_1+\lambda_2+\cdots+\lambda_n=a_+a_+\cdots+a_\)
\(\lambda_1\lambda_2\cdots\lambda_n=|a|\)
我們下面來看乙個例子:
\[a=\left[
\begin
3 & 1 \\
1 & 3
\end
\right]\]
我們帶入\((a-\lambda i)x=0\),可以得到:
\[\left|
\begin
3-\lambda & 1 \\
1 & 3 - \lambda
\end
\right|=0
\]所以: \((3-\lambda)^2 - 1 = 0\),可以看出來\(\lambda_1=2, \quad \lambda_2=4\)
當\(\lambda=2\)時:
\[\left[
\begin
3 & 1\\
1 & 3
\end
\right]x = 2x
\]\[\left[
\begin
3 & 1\\
1 & 3
\end
\right][a_1, a_2]^t = [2a_1, 2a_2]^t
\]\[\begin
3a_1 + a_2 &= 2a_1 \\
a_1 + 3a_2 &= 2a_2
\end
\]解之,可以得到:\(a_1+a_2=0\),所有\((x, -x)\)向量都是a的特徵向量。
同理,當\(\lambda = 4\)時:
\[\begin
\left[
\begin
3 & 1\\
1 & 3
\end
\right]x &= 4x \\
\left[
\begin
3 & 1\\
1 & 3
\end
\right][a_1, a_2]^t &= [4a_1, 4a_2]^t \\
3a_1 + a_2 &= 4a_1 \\
a_1 + 3a_2 &= 4a_2
\end
\]解之,可以得到:\(a_1=a_2\),所有\((x, x)\)向量都是a的特徵向量。
在我們之前的文章當中,我們就介紹過了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專題,希望大家多多期待。
線性代數 21特徵值和特徵向量
這節課將講解課程中很大的主題,還是對方陣而言,討論特徵值和特徵向量,下一節課講解應用。給定矩陣 a 矩陣作用在向量上,矩陣 a 的作用就像輸入向量 x 結果得到向量 ax 就像乙個函式,微積分中的函式表示作用在數字 x 上得到 f x 矩陣就是一種變換。在這些 x 向量中,我們比較感興趣的是變換前後...
線性代數導論21 特徵值和特徵向量
第二十一課時 特徵值和特徵向量 對方陣的特徵值和特徵向量做講解,矩陣的特徵值和特徵向量會反映出矩陣的重要資訊,後面的課將講解特徵值和特徵向量的應用以及為什麼需要特徵值和特徵向量。特徵向量和特徵值概念 ax,矩陣a的作用就像輸入向量x,結果得到向量ax 就像乙個函式,微積分中的函式表示作用在數字x上得...
線性代數筆記22 特徵值和特徵向量
平行的向量用方程來表示比較簡單 其中a是方陣,x 0。是乙個係數,被稱為特徵係數或特徵值 x和 x平行,方程的解x就是a的特徵向量。這裡需要對 方向相同 做出一些特殊的解釋,它也包括正好相反的方向和無方向,所以 的值可以取0或負數。現在的問題是,給定矩陣a,如果求解a的特徵向量?這裡沒有ax b這樣...