矩陣:特徵向量(Eigenvector)

2021-03-02 算法與數學之美

出自無名黑洞的博客

原文地址:http://blog.csdn.net/wangxiaojun911/article/details/6737933

矩陣是個非常抽象的數學概念,很多人到了這裡往往望而生畏。比如矩陣的乘法為什麼有這樣奇怪的定義?實際上是由工程實際需要定義過來的。如果只知道概念不懂有何用處,思維就只有抽象性而沒有直觀性,實在是無法感受矩陣的精妙。

直觀性說明

我們先看點直觀性的內容。矩陣的特徵方程式是:

A * x = lamda * x

這個方程可以看出什麼?矩陣實際可以看作一個變換,方程左邊就是把向量x變到另一個位置而已;右邊就是把向量x作了一個拉伸,拉伸量是lamda。那麼它的意義就很明顯了,表達了矩陣A的一個特性就是這個矩陣可以把向量x拉長(或縮短)lamda倍,僅此而已。

任意給定一個矩陣A,並不是對所有的x它都能拉長(縮短)。凡是能被A拉長(縮短)的向量稱為A的特徵向量(Eigenvector);拉長(縮短)量就為這個特徵向量對應的特徵值(Eigenvalue)。

值得注意的是,我們說的特徵向量是一類向量,因為任意一個特徵向量隨便乘以一個標量結果肯定也滿足以上方程,當然這兩個向量都可以看成是同一個特徵向量,而且它們也都對應同一個特徵值。

如果特徵值是負數,那說明了矩陣不但把向量拉長(縮短)了,而且讓向量指向了相反的方向。

一個矩陣可能可以拉長(縮短)好幾個向量,所以它可能就有好多個特徵值。有趣的是,如果A是實對稱矩陣,那麼那些不同的特徵值對應的特徵向量肯定是互相正交的。

我們也可以說,一個變換矩陣的所有特徵向量組成了這個變換矩陣的一組基。所謂基可以理解為坐標系的軸。我們平常用到的大多是直角坐標系,在線形代數中可以把這個坐標系扭曲、拉伸、旋轉,稱為基的變換。我們可以按我們的需求去設定基,但是基的軸之間必須是線形無關的,也就是保證坐標系的不同軸不要指向同一個方向或可以被別的軸組合而成,否則的話原來的空間就「撐」不起來了。在主成分分析(Principal Component Analysis)中我們通過在拉伸最大的方向設置基,忽略一些小的量,可以極大地壓縮數據而減小失真。

變換矩陣的所有特徵向量作為空間的基之所以重要,是因為在這些方向上變換矩陣可以拉伸向量而不必扭曲和旋轉它,使得計算大為簡單。所以特徵值固然重要,我們的終極目標卻是特徵向量。

幾個重要的抽象概念

我們回到矩陣的意義上,先介紹幾個抽象概念:

:所有經過變換矩陣後變成了零向量的向量組成的集合,通常用Ker(A)來表示。假如你是一個向量,有一個矩陣要來變換你,如果你不幸落在了這個矩陣的核裡面,那麼很遺憾轉換後你就變成了虛無的零。特別指出的是,核是「變換」(Transform)中的概念,矩陣變換中有一個相似的概念叫「零空間」。有的材料在談到變換的時候使用T來表示,聯繫到矩陣時才用A,本文把矩陣直接看作「變換」。核所在的空間定義為V空間,也就是全部向量原來在的空間。

值域:某個空間中所有向量經過變換矩陣後形成的向量的集合,通常用R(A)來表示。假設你是一個向量,有一個矩陣要來變換你,這個矩陣的值域表示了你將來可能的位置,你不可能跑到這些位置之外。值域的維度也叫做秩(Rank)。值域所在的空間定義為W空間。W空間中不屬於值域的部分等會兒我們會談到。

空間:向量加上加、乘運算構成了空間。向量可以(也只能)在空間中變換。使用坐標系(基)在空間中描述向量。

不管是核還是值域,它們都是封閉的。意思是如果你和你的朋友困在核裡面,你們不管是相加還是相乘都還會在核裡面,跑不出去。這就構成了一個子空間。值域同理。

數學家證明了,V的維度一定等於它的任意一個變換矩陣的核的維度加上值域的維度。

dim( V ) = dim( Ker( A ) ) + dim( R( A) )

嚴格的證明過程可以參考教科書,這裡說一個直觀的證法:

V的維度也就是V的基的數目,這些基分為兩部分,一部分在核中,一部分是值域中非零象的原象(肯定可以分,因為核和值域都是獨立的子空間)。如果把V中的任意向量用基的形式寫出來,那麼這個向量必然也是一部分在核中,另一部分在值域中非零象的原象裡。現在對這個向量作變換,核的那部分當然為零了,另一部分的維度剛好等於值域的維度。

變換矩陣行空間和零空間的關係

另外我們根據矩陣的性質,變換矩陣的行數等於V的維度,變換矩陣的秩等於值域R的維度,所以也可以記成:

A的行數= dim( A的零空間)+ A的秩

因為A的秩又是A行空間的維度(注意在非滿秩矩陣中這個數肯定小於行數):

A的行數= dim( A的零空間)+ dim( A的行空間 )

為什麼要寫成這個形式?因為從這裡我們可以發現A的零空間和A的行空間是正交互補的。正交是因為零空間就是核,按定義乘以A的行向量當然為零。互補是因為它們加起來剛好張成整個V空間。

這個正交互補導致了非常好的性質,因為A的零空間和A的行空間的基組合起來剛好可以湊成V的基。

變換矩陣列空間和左零空間的關係

如果把以上方程取轉置,可得:

A的列數= dim( A^T的零空間)+ dim( A的列空間 )

因為A^T的實際意義是把值域和定義域顛倒了過來,所以A^T的零空間就是從值域以外的區域投向V中零點的所有向量的空間(有點拗口!),有人把它稱為「左零空間」(LeftNull Space)。這樣:

A的列數= dim( A的左零空間)+ dim( A的列空間 )

同樣A的左零空間與A的列空間也正交互補,它們加起來剛好可以張成W空間。它們的基也構成了W的基。

變換矩陣行空間和列空間的關係

不要忘了變換矩陣實際上是把目標向量從行空間轉化到列空間。

矩陣的行空間,列空間,零空間,左零空間構成了我們在線形代數研究中的所有空間,把它們的關係弄清楚,對於分別的基的轉換非常重要。

特徵方程的秘密

我們試圖構造一個這樣的變換矩陣A:它把向量變換到一個值域空間,這個值域空間的基是正交的;不僅如此,還要求任意一個基v都有A* u = lamda * v的形式,u是原來空間的一個已知的基。這樣我們就能把複雜的向量問題轉化到一個異常簡單的空間中去。

如果u的數量不等於v,那麼用A^T*A取代A,可以變為一個對稱且半正定矩陣,它的特徵向量正是要求的基v!

再次說明,矩陣不等於變換,把矩陣看成變換隻是提供一個理解變換矩陣的方法。或者說矩陣只是變換的其中一種表現形式。


交流分享、謝謝支持!

<如果你覺得本文還不錯,對你的學習帶來了些許幫助,請幫忙掃描二維碼,支持本公眾號的運營>



相關焦點

  • 矩陣的重要特性:特徵向量
    矩陣實際可以看作一個變換,方程左邊就是把向量x變到另一個位置而已;右邊就是把向量x作了一個拉伸,拉伸量是lamda。那麼它的意義就很明顯了,表達了矩陣A的一個特性就是這個矩陣可以把向量x拉長(或縮短)lamda倍,僅此而已。任意給定一個矩陣A,並不是對所有的x它都能拉長(縮短)。
  • 人臉識別之特徵臉方法(Eigenface)
    EigenFace方法利用PCA得到人臉分布的主要成分,具體實現是對訓練集中所有人臉圖像的協方差矩陣進行本徵值分解,得對對應的本徵向量,這些本徵向量(特徵向量)就是「特徵臉」。每個特徵向量或者特徵臉相當於捕捉或者描述人臉之間的一種變化或者特性。這就意味著每個人臉都可以表示為這些特徵臉的線性組合。
  • 教程| 從特徵分解到協方差矩陣:詳細剖析和實現PCA算法
    數學上,線性變換的特徵向量是一個非簡併的向量,其方向在該變換下不變。該向量在此變換下縮放的比例稱為特徵值。一個線性變換通常可以由其特徵值和特徵向量完全描述。如果我們將矩陣看作物理運動,那麼最重要的就是運動方向(特徵向量)和速度(特徵值)。因為物理運動只需要方向和速度就可以描述,同理矩陣也可以僅使用特徵向量和特徵值描述。
  • 旋轉矩陣和歐拉角相互轉換及代碼實現(八十九)
    旋轉矩陣與旋轉向量旋轉矩陣(Rotation Matrix)旋轉向量(Rotation Vector)旋轉向量到旋轉矩陣的轉換是通過羅德裡格斯公式(Rodrigues's Formula),轉換公式如下:其中,  為旋轉軸單位向量,  為旋轉角度,  為向量到反對稱矩陣的運算符。
  • 文本向量空間模型
    = ', '.join(format(freq, 'd') for freq in tf_vector)    print 'The tf vector for Document %d is [%s]' % ((mydoclist.index(doc)+1), tf_vector_string)    doc_term_matrix.append(tf_vector)
  • 矩陣的瑰寶:深入挖掘特徵值和特徵向量,直觀地看抽象概念
    特徵值和特徵向量可能看起來是很抽象的概念,但它們在你周圍的世界中扮演著不可或缺的角色。因為一切都是由數據定義的,矩陣是處理數據的最佳工具,而它們又是矩陣中的瑰寶,可以揭示矩陣的性質。理解特徵值和特徵向量是什麼,如何推導它們,以及它們的應用,對于欣賞矩陣之美,以及更廣泛地理解數據和數學在世界中扮演的角色,都是不可或缺的。
  • 特徵向量的物理意義
    因為a1=(a,-a,1)T是Ax=0的解,說明a1=(a,-a,1)T是A的屬於0的特徵向量,a2=(a,1,-a)T是(A+E)x=0的解,說明a2=(a,1,-a)T是A的屬於-1的特徵向量。實對稱矩陣屬於不同特徵值的特徵向量式正交的,所以a^2-a-a=0,a≠2,所以a=0。
  • NLP三大特徵提取器全梳理:RNN vs CNN vs Transformer
    從數據結構上來看,CNN 輸入數據為文本序列,假設句子長度為 n,詞向量的維度為 d,那麼輸入就是一個 n×d 的矩陣。顯然,該矩陣的行列「像素」之間的相關性是不一樣的,矩陣的同一行為一個詞的向量表徵,而不同行表示不同的詞。要讓卷積網絡能夠正常地「讀」出文本,我們就需要使用一維卷積。
  • 詞向量詳解:從word2vec、glove、ELMo到BERT
    各種詞向量的特點:One-hot:維度災難 and 語義鴻溝矩陣分解(LSA):利用全局語料特徵,但SVD求解計算複雜度大基於NNLM/RNNLM的詞向量:詞向量為副產物,存在效率不高等問題word2vec、fastText:優化效率高,但是基於局部語料glove:基於全局預料,結合了LSA和word2vec的優點elmo、GPT、bert:動態特徵從one-hot到word2vec
  • c vector用法是什麼
    在c 中,vector是一個十分有用的容器,c vector用法是:
  • Vector:C++界熱銷的Pro版數組
    我們以int類型為例,看一些構造vector的例子。Vector最基本的內存模型是棧結構,後進先出,可以用下面的手繪圖直觀表示⬇️經過一系列的pop和push操作之後,vector現在到底處於什麼樣的狀態呢?
  • Python矩陣元素索引就一個公式
    一旦創建矩陣,如果需要獲取矩陣中的某個或某些元素,就需要用到索引。
  • 線性代數/矩陣的幾何意義
    一部分:內容來自於寶藏up主的線性代數合集[2],主要是講一些基本矩陣運算的幾何含義,我按我的理解分享下,更多精彩推薦大家去看原視頻。二部分:通過transform的矩陣,來消化所講的內容。矩陣基本運算如果直接告訴大家矩陣是如何表示幾何意義的,其實這樣大部分人也能記住且很好的應用,但是還是希望大家能真正地理解原因,所以先講一些基礎。向量及基本運算矩陣的基礎是向量,我們先來看看向量。