机器学习中的数学基础:(1)实际应用中矩阵特征值与特征向量的几何意义
關于特征值、特征向量的講解有很多的教程,對于這些枯燥的數學基礎怎么運用到自己的實際計算機視覺實驗中,是一項很重要的任務。算法的底層其實就是數學公式的各種結合與推導,有時間不是我們不能很好的去理解這些算法基礎,而是沒有一個很好的教程帶領我們這些小白去一步步的從底層學習。寫博客的目的一方面就是記錄自己的總結,另一方面就是用自己的大白話去描述這些專業的術語與思想,方便自己能看懂學習。(以上純屬個人觀點)
----------矩陣---------
首先,我們把矩陣比作跑步,跑步最重要的就是知道兩個要素方向(朝哪個方向跑)和速度(我要跑的多快),而矩陣的特征向量就是跑步的方向,矩陣的特征值就是跑步的速度。(這個比喻只是幫助大家理解怎么由數學概念轉換到實際生活運用中)
---------線性變換-------
我們知道,矩陣乘法對應了一個變換,是把任意一個向量變成另一個方向或長度都大多不同的新向量。在這個變換的過程中,原向量主要發生旋轉、伸縮的變化。如果矩陣對某一個向量或某些向量只發生伸縮變換,不對這些向量產生旋轉的效果,那么這些向量就稱為這個矩陣的特征向量,伸縮的比例就是特征值。實際上,上述的一段話既講了矩陣變換特征值及特征向量的幾何意義(圖形變換)也講了其物理含義。物理的含義就是運動的圖景:特征向量在一個矩陣的作用下作伸縮運動,伸縮的幅度由特征值確定。特征值大于1,所有屬于此特征值的特征向量身形暴長;特征值大于0小于1,特征向量身形猛縮;特征值小于0,特征向量縮過了界,反方向到0點那邊去了。關于特征值和特征向量,這里請注意兩個亮點。這兩個亮點一個是線性不變量的含義,二個是振動的譜含義。?
所謂的線性變換(旋轉、伸縮)就是向量在不同的基(其實就是單位特征向量組成的坐標系)之間進行變來變去。下圖給出了所用的基和原點:
1.在和基下面有一個(如左圖): ? ? ? ? ? ? 2.將左乘一個矩陣A,可得下圖(如中圖): ? ? ? ? 3.再將左乘一個矩陣A,可得下圖(如右圖): ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
?
3.下面改變一下的方向:(如左圖) ? ? ? ? ? ? ? ?? 4.再將左乘一個矩陣A,可得下圖(如右圖):
? ? ? ? ? ? ? ? ? ? ? ? ? ??
得出結論:
如果存在某個或某些向量在A作用之后,它只是伸長或者縮短,其位置仍停留在其原來張成的直線上,那么稱之為A的特征向量,伸長或者縮短的倍數稱為對應特征向量的特征值。
1.未改變方向的A在同一條直線上,只是A的長度要比短??s短了倍,該是矩陣A的特征值,對應的A是矩陣A的特征向量。
2.經過改變方向后的和A在同一條直線上,只是A的長度要比長,則是矩陣A的特征向量,而A在長度上是的倍,該也是矩陣A的特征值。即在矩陣A的作用下,保持方向不變,進行倍的拉伸??蓪懽?#xff1a;
? (從上述結果可以看出,矩陣A不止有一個特征值與特征向量,特征向量所在直線上的向量都是特征向量)
特征向量所在直線包含了所有的特征向量,這些總的組成了特征空間。
(兩個紅色箭頭就是最大特征值,最小特征值,之間組成了特征空間,改變的位置,以及矩陣A的值,特征空間會隨著矩陣的變化而改變,即上述所比喻的跑步,所對應的速度最大的方向就是由最大特征值對應的特征向量表現出來的)
特征向量是線性不變量:所謂特征向量概念的亮點之一是不變量,這里叫線性不變量。因為我們常講,線性變換啊線性變換,不就是把一根線(向量)變成另一根線(向量),線的變化的地方大多是方向和長度一塊變。而一種名叫“特征向量”的向量特殊,在矩陣作用下不變方向只變長度。不變方向的特性就被稱為線性不變量。(特征向量之所以被稱為“特征”,因為它具有不變的特性)
特征值與特征向量性質:?
? ? ? ? 1.只有方陣才有特征值和特征向量
? ? ? ? ? ? ? ? ? 方陣總有特征值,因為總有特征多項式(特征方程),但不是所有方陣都有實數特征解
? ? ? ? ? ? ? ? ? 實方陣一定有實數特征解
? ? ?? 2.不同特征值對應的特征向量是線性無關的
? ? ?? 3.對于實對稱矩陣或埃爾米特矩陣來說,不同特征值對應的特征向量必定正交(相互垂直)
?
?
--------舉例--------
以對角矩陣為例:
------------相似矩陣---------------
設 A,B 都是 n 階矩陣,若有可逆矩陣 P ,使 AP=B, 則稱 B 是 A 的相似矩陣,或說 A 和 B 相似。
運用的幾何意義是:同一線性變換在不同基下的表達形式(類似于直角坐標到極坐標系下圖像是不會變換的)。(掌握相似矩陣的性質)
----------對角矩陣--------
對角矩陣(diagonal matrix)是一個主對角線之外的元素皆為0的矩陣,常寫為diag(a1,a2,…,an) 。對角矩陣可以認為是矩陣中最簡單的一種,值得一提的是:對角線上的元素可以為 0 或其他值,對角線上元素相等的對角矩陣稱為數量矩陣;對角線上元素全為1的對角矩陣稱為單位矩陣。對角矩陣的運算包括和、差運算、數乘運算、同階對角陣的乘積運算,且結果仍為對角陣。
-----矩陣對角化:對n階矩陣A,如果可以找到可逆矩陣P,使得AP=對角陣,就稱為把方陣A對角化。
矩陣對角化的充要條件:n階矩陣有n個線性無關的特征向量。?
推論:若n階方陣A有n個互不相同的特征值,則A可對角化。而且:1.對角陣的主對角元素為A的特征值。2. 可逆矩陣P由A的n個線性無關的特征向量作列向量構成。
可對角化,是有條件的,這里又用到了特征向量。你只有找到A的n個線性無關的特征向量,才能將A順利地對角化。
根據特征值與特征向量,用于找矩陣的相似對角陣,非常有意義。
舉例:
---------
------特征值分解---------------
首先解釋一下為什么這些值叫特征值,這些向量叫特征向量。因為:
1.在相似變換中,這些東西不變,而且其他不變性質可以通過特征值不變來推導;所以特征值是相似的這些矩陣的集合(這一類矩陣)的公共屬性,它當然可以作為特征。
2.從幾何意義上講,特征向量描述了矩陣對應的線性變換的主要變換方向。線性變換對向量的作用是伸縮(新的長度)和旋轉(新的方向),旋轉會消減拉伸的作用,特征向量只有伸縮沒有旋轉,它就代表了這個線性變換的主要方向;那么特征值就是描述該方向上的變換速度(倍數),所以把特征值排序,從大到小的特征值及其特征向量能近似地描述原矩陣的主變換方向和變換速度。
特征值分解是找最相似的矩陣:
特征值分解是將一個矩陣分解為如下形式: A=Q∑,?
? 其中,Q是這個矩陣A的特征向量組成的矩陣,Σ是一個對角矩陣,每一個對角線元素就是一個特征值,里面的特征值是由大到小排列的,這些特征值所對應的特征向量就是描述這個矩陣變化方向(從主要的變化到次要的變化排列)。也就是說矩陣A的信息可以由其特征值和特征向量表示。
??
? 對于矩陣為高維的情況下,那么這個矩陣就是高維空間下的一個線性變換。可以想象,這個變換也同樣有很多的變換方向,我們通過特征值分解得到的前N個特征向量,那么就對應了這個矩陣最主要的N個變化方向。我們利用這前N個變化方向,就可以近似這個矩陣(變換)。
?
? 總結一下,特征值分解可以得到特征值與特征向量,特征值表示的是這個特征到底有多重要,而特征向量表示這個特征是什么。不過,特征值分解也有很多的局限,比如說變換的矩陣必須是方陣。?
----------具體應用在圖像壓縮上,比如說,有這么一副512×512的圖片(方陣才有特征值),這個圖片可以放到一個矩陣里面去,就是把每個像素的顏色值填入到一個512×512512×512的 A 矩陣中。根據之前的矩陣對角化A=p,其中為對角陣,對角線上是從大到小排列的特征值,我們只保留前面50個的特征值(也就是最大的50個,其實也只占了所有特征值的百分之十),其它的都填0,重新計算矩陣后,利用新得到的矩陣,進行恢復圖像,效果仍然與原圖像差不多。
? ? ? ? ??
----------------
?
1.左乘矩陣? ? ? ??
上述操作發生旋轉變成了標準基(如上述右圖)
2.繼續左乘矩陣,
得到如下圖:
這兩次相乘對應于前邊的講解,第一次乘以P特征向量,(就是對基進行旋轉)相當于指明了跑步的方向。第二次乘以特征值,就是指明了跑步的速度的大小。
因此如果特征向量正交,這樣就能保證變換的最大方向在基方向,如果特征向量不正交就不能保證變換在最大方向上。因此,在實際應用中就要去找正交基,但是特征向量很有可能不是正交的,故需要奇異值分解(SVD)。
3.在上述基礎上再次的左乘,就會把基變換回去。如下圖:
(在此整個過程中只是把整個圖像坐標系給旋轉、拉伸了而已。圖像并沒有變化)
?
//Python求特征值與特征向量
>>> import numpy as np
>>> a=np.array([[2,-1],[-1,2]])
>>> a
array([[ 2, -1],[-1, 2]])
>>> e,q=np.linalg.eig(a)
>>> e # 特征值
array([ 3., 1.])
>>> q # 特征向量作為列向量
array([[ 0.70710678, 0.70710678],[-0.70710678, 0.70710678]])
>>>
>>> a=np.array([[1,2,3],[3,2,5],[1,10,8]])
>>> e,q=np.linalg.eig(a)
>>> e
array([ 13.50864036, -0.42667365, -2.0819667 ])
>>> q
array([[-0.27543318, -0.6534998 , -0.23748816],[-0.44255955, -0.44847532, -0.67779488],[-0.85339183, 0.60976053, 0.69584012]])
>>>
>>> E=np.diag(e) # 對角陣
>>> E
array([[ 13.50864036, 0. , 0. ],[ 0. , -0.42667365, 0. ],[ 0. , 0. , -2.0819667 ]])
圖片截取來自知乎。
?
?
總結
以上是生活随笔為你收集整理的机器学习中的数学基础:(1)实际应用中矩阵特征值与特征向量的几何意义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PCL:点云中的超体素数据
- 下一篇: 机器学习中的数学基础:(3)主成分分析(