如果需要小編其他數學基礎博客,請移步小編的GitHub地址
傳送門:請點擊我
如果點擊有誤:https://github.com/LeBron-Jian/DeepLearningNote
這里我打算補充一下機器學習涉及到的一些關於特征值和特征向量的知識點。
(注意:目前自己補充到的所有知識點,均按照自己網課視頻中老師課程知識點走的,同時一些公式是網友辛辛苦苦敲的,這里用到那個博客均在文末補充地址,不過這里首先表示感謝!!)
這里學習特征值和特征向量之前先說一下機器學習中特征提取的特征向量與矩陣的特征向量的區別
我的理解是機器學習的特征向量是指你所提取的特征組成的向量(也稱為 feature vector),這個特征可以是任意的,比如人的身高體重,頭發的長短等,單位也是由自己決定,完全看你的需求。而矩陣的特征向量(稱為 eigen vector)是線性代數里的概念,是對矩陣求解特征方程得到的向量。不過這里我主要學習線性代數中矩陣的特征值和特征向量。
1,預備知識
1.1 標量
一個標量就是一個單獨的數,一般用小寫的變量名稱表示。
1.2 向量
一個向量就是一列數,這些數是有序排列的。用過次序中的索引,我們可以確定每個單獨的數。通常會賦予向量粗體的小寫名稱。當我們需要明確表示向量中的元素時,我們會將元素排列成一個方括號包圍的縱柱:

我們可以把向量看做空間中的點,每個元素是不同的坐標軸上的坐標。
1.3 矩陣
矩陣是二維數組,其中的每一個元素被兩個索引而非一個所確定。我們通常會賦予矩陣粗體的大寫變量名稱,比如A。如果一個實數矩陣高度為 m,寬度為 n,那么我們說 A屬於Rm*n。

矩陣在機器學習中非常重要,實際上,如果我們現在有N個用戶的數據,每條數據含有M個特征,那其實它對應的就是一個N*M的矩陣;再比如,一張圖由 16*16的像素點組成,那就是一個16*16的矩陣。
1.4 張量
幾何代數中定義的張量是基於向量和矩陣的推廣,通俗一點理解的話,我們可以將標量視為零階張量,矢量視為一階張量,那么矩陣就是二階張量。
例如,可以將任意一張彩色圖片表示成一個三階張量,三個維度分別是圖片的高度,寬度和色彩數據。將這張圖用張量表示出來,就是最下面的這張表格:

其中表的橫軸表示圖片的寬度值,這里只截取0~319;表的縱軸表示圖片的高度值,這里只截取0~4;表格中每個方格代表一個像素點,比如第一行和第一列的表格數據為 [1.0, 1.0, 1.0],代表的就是 RGB三原色在圖片的這個位置的取值情況(即R=1.0, G=1.0, B=1.0)。
當然我們還可以將這一定義繼續擴展,即:我們可以用四階張量表示一個包含多張圖片的數據集,這四個維度分別是:圖片在數據集中的編號,圖片高度,寬度以及色彩。
張量在深度學習中是一個很重要的概念,因為它是一個深度學習框架中的核心組件,后續的所有運算和優化算法是基於張量進行的。
1.5 范數
有時我們需要衡量一個向量的大小。在機器學習中,我們經常使用被稱為范數(norm)的函數衡量矩陣大小,Lp范圍如下:

所以:L1 范數 ||x||:為 x 向量各個元素絕對值之和;L2 范數 ||x||2 為 x 向量各個元素平方和的開方。
1.6 方差
方差用來度量隨機變量 X 與其數學期望 E(X) 的偏離程度,公式為:

方差總數一個非負數,當隨機變量的可能值集中在數學期望的附加時,方差較小;反之方差大。由方差的大小可以推斷出隨機變量分布的分散程度。
1.7 協方差
協方差用來刻畫兩個隨機變量 X, Y 的相關性,公式為:

如果協方差為正,說明X, Y 同向變化,協方差越大說明同向程度越高
如果協方差為負,說明X, Y反向運動,協方差越小說明反向程度越高
對於上述“同向”和“反向”的理解:
- 1,你變大,同時我也變大,說明兩個變量是同向變化的,這時協方差就是正的
- 2,你變大,同時我變小,說明兩個變量是反向變化的,這時協方差就是負的
- 3,從數值來看,協方差的數值越大,兩個變量同向程度也就越大。反之亦然
1.8 相關系數
用隨機變量X,Y的協方差除以X的標准差和Y的標准差,公式為:

相關系數也可以看成是協方差:一種剔除了兩個變量量綱,標准化后的協方差。
相關系數是一種標准化后的協方差,有以下特點:
- 1)也可以反映兩個變量變化時是同向還是反向,如果同向變化就為正,反向變化就為負
- 2)它消除了兩個變量變化幅度的影響,而只是單純反應兩個變量每單位變化時的相似程度
對於兩個隨機變量:
- 1,當他們的相關系數為1時,說明兩個變量變化時的正向相似度最大,即你變大一倍,我也變大一倍;你變小一倍,我也變小一倍。也就是完全正相關(以X, Y為橫縱坐標軸,可以畫出一條斜率為正數的直線,所以X,Y是線性關系的)
- 2,隨着他們相關系數減小,兩個變量變化時的相似度也變小,當相關系數為0時,兩個變量的變化過程沒有任何相似度,也即兩個變量無關
- 3,當相關系數繼續變小,小於0時,兩個變量開始出現反向的相似度,隨着相關關系繼續變小,反向相似度會逐漸變大。
- 4,當相關系數為 -1 時,說明兩個變量變化的反向相似度最大,即,你變大一倍,我變小一倍;你變小一倍,我變大一倍。也即是完全負相關(以X, Y為橫縱坐標軸,可以畫出一條斜率為負數的直線,所以X, Y也是線性關系的)
1.9 協方差矩陣

協方差只能處理二維問題,即兩個隨機變量的相關程度
維度多了就需要計算多個協方差,於是出現了協方差矩陣
協方差矩陣的每一個值就是對應下標的兩個隨機變量的協方差(即相關程度)
可以看出,協方差矩陣是一個對稱矩陣,而且對角線是各個維度的方差。
Python代碼舉例:
import numpy as np X = np.array([[-2.1,-1,4.3],[3,1.1,0.12],[3,1.1,0.12]]) #每一行代表一個隨機變量,每列代表隨機變量的值 #[[-2.1,-1,4.3], # [3,1.1,0.12], # [3,1.1,0.12]] print(np.cov(X)) #[[ 11.71 , -4.286 , -4.286 ], # [ -4.286 , 2.14413333, 2.14413333], # [ -4.286 , 2.14413333, 2.14413333]])
2,特征的特征值和特征向量的抽象理解
特征值(eigenvalue)和特征向量(eigenvector)具有共同前綴 eigen-,其起源於德語,意為“特征”,而Eigen的英文本意為“本證的,固有的,特有的”意思。再看一下計算特征值所需要的特征行列式所對應的英文單詞是 determinant,意思是“決定性的,名詞決定性因素”。
首先我們應該充分理解“特征”的含義:對於線性代數而言,特征向量和特征值體現了矩陣的本質,“特征”強調了單個矩陣的特點,相當於它的 ID card。
從線性代數的角度出發,如果把矩陣看做 n 維空間下的一個線性變換,這個變換有很多的變換方向,我們通過特征值分解得到的前N個特征向量,那么就對應了這個矩陣最主要的N個變化方向。我們利用這前N個變化方向,就可以近似這個矩陣(變換)。其中的N個變化方向,就是這個矩陣最重要的“特征”。
有了特征的概念之后,我們又如何理解特征值與特征向量呢?可以做這樣的比喻:
- 1,如果把矩陣看做是位移,那么特征值 = 位移的速度,特征向量 = 位移的方向
- 2,特征向量在一個矩陣的作用下作伸縮運動,伸縮的幅度由特征值確定(注意觀察定義式)。特征值大於1,所有屬於此特征值的特征向量變長;特征值屬於(0, 1),特征向量縮短;特征值小於0,特征向量則反向延長。

3,特征值的數學定義
3.1 特征值和特征向量的定義
數學定義:對於給定矩陣A,尋找一個常數 λ 和非零向量 x,使得向量 x被矩陣 A 作用后所得的向量 Ax 與原向量 x 平行,並且滿足 Ax = λx,則稱 λ 為矩陣 A 的一個特征值(標量),X為矩陣 A 對應於特征值的一個特征向量(1*n)。
該式子可理解為向量 x 在幾何空間中經過矩陣 A的變換后得到向量 λx。由此可知,向量 X 經過矩陣 A 變化后,只是大小伸縮了 λ 倍。總而言之:特征向量提供了復雜的矩陣乘法到簡單的數乘之間的轉換。
從解題角度,我們再看如何求特征值和特征向量:設向量 x 為矩陣 A對應於特征值 λ 的特征向量,即 Ax = λx,則有 (A - λI)x = 0,所以求解 x 就是求解 (A - λI)x = 0 中 x 的非零解。其中 I 為單位矩陣,因此 | λI -A) 稱為 X 的特征多項式。

3.2 特征值和特征向量的推論
我們有以下推論:

其中第三個是特征值分解公式,W為 n*n 的特征向量矩陣(n個大小為 1*n 的特征向量 X組成)。Σ 是包含對應特征值的對角矩陣。根據不同的特征值的大小,可知道每個特征向量對應權重,即其重要性。

3.3 特征子空間
特征子空間(characteristic subspace)是一類重要的子空間,即對應於線性變換的一特征值的子空間。設V是域P上的線性空間,σ 的對應於特征值 λ0 的全體特征向量與零向量所組成的集合。特征空間中包含了所有的特征向量

我們知道,對於n階方陣,可得:

而 x != 0,即齊次線性方程組(*λ)有非零解

方程組(*λ)的解空間稱為對應於 λ 的特征子空間。
3.4 特征多項式
設:

則稱:

為矩陣 A 的特征多項式,記為 f(λ)。
4,特征值和特征向量的意義
4.1 特征值和特征向量的代數意義
矩陣乘法從表面來講,是前一個矩陣的行乘以后一個矩陣的列(前提是前一個矩陣的行數等於后一個矩陣的列數);它的真正含義是變換,我們學習高等代數一開始就學習行變換列變換,所以矩陣乘法就是線性變換。
再來說一下其定義,如果存在向量 Vi,常數 λi,使得以下式子成立,則稱常數 λi 為方陣A的特征值,而向量 Vi 則是可對角化方陣 A的特征向量:

特征向量的代數上含義是:將矩陣乘法轉換為數乘操作;
4.2 特征值分解的幾何意義
特征向量的幾何上含義是:特征向量通過方陣 A 變換變換只進行縮放,而特征向量的方向仍然不變。
特征值分解可以寫成以下形式:

其中 U 是由 A 的特征向量組成的矩陣,也是方陣,Σ 是對角矩陣,對角線上是對應的特征值,可以對特征向量 ui 進行正交單位化,這樣矩陣A就可以表示為以下形式:

其中 Q 為 U 進行單位正交化后的矩陣, Σ ' 還是對角矩陣,對角線上是對應的特征值,因為 Q 中的列向量都是單位正交的,所以 QTQ = E ,從而 Q-1 = QT。
比如下面一個矩陣:
它其實對應的線性變換是下面的形式:

因為這個矩陣M乘以一個向量(x, y)的結果是:

上面的矩陣是對稱的,所以這個變換時一個對 x, y 軸的方法一個拉伸變換(每一個對角線上的元素將會對一個維度進行拉伸變換,當值 > 1,是拉伸,當值 < 1 的時候是縮短)。
下面再看另一個對稱矩陣:

此對稱矩陣,它對坐標軸(正交)的影響如下:

將上面右邊的坐標軸(圖中黑色十字)逆時針旋轉 45 度,將會看到:

這樣就和最開始的對角矩陣的變換類似了,在某個坐標軸的方向上伸長了3倍,這次的坐標軸發生了旋轉,用數學語言就是,給定一個對稱矩陣M,存在一個向量V,將M右乘向量V,將M右乘向量V,相當於將這個向量縮放了 λ 倍。式子表達如下:
MVi = λiVi
其中Vi 稱為矩陣M的特征向量,λi 稱為矩陣M的特征值。所以我們可以得到以下結論:
- (1) 當一個向量左乘一個對角陣時,相當於對這個向量的長度進行縮放,此處坐標軸並沒有發生變化。
- (2) 當一個向量左乘一個對稱陣時,相當於對這個向量的長度進行縮放,而且對坐標軸進行了選擇。
下面看一個更一般的矩陣,我們是否能將其從一組標准正交基變換到另一組正交基,當矩陣不是對稱的時候,比如說矩陣是下面的樣子:

它所描述的變化是下面的樣子:

這其實是在平面上對一個軸進行的拉伸變換(如藍色的箭頭所示),在圖中,藍色的箭頭是一個最主要的變化方向(變化的方向可能不止一個)。
此時的兩條坐標軸並不是正交的,如果將右圖中的坐標軸旋轉 30度,我們將會看到:

然后再對坐標軸旋轉60度,將會看到

此時,兩條坐標軸已經是正交的,說明對於任意的矩陣,我們都能找到一組坐標軸,它由原來的坐標軸通過旋轉和縮放得到。用幾何意義表達如下:

如上圖所示,對於二維矩陣M,我們總能找到一組標准正交基V1和V2,使得 MV1 和 MV2 是正交的,我們用另一組標准正交基U1和U2表示 MV1 和 MV2 的方向,這樣就將M從一組標准正交基用另一組標准正交基來表示。

注意:標准正交基
在線性代數中,一個內積空間的正交基(orthogonal basis)是元素兩兩正交的基,稱基中的元素為基向量。假若一個正交基的基向量的模長都是單位長度 1,則稱這正交基為標准正交基或規范正交基。
5,特征向量的應用
既然特征值表達了重要程度且和特征向量所對應,那么特征值大的就是主要信息了,基於這點我們可以提取各種有價值的信息了!我們都知道線性代數中,左乘一個矩陣是對應着行變換,右乘一個矩陣對應列變換,其實際的作用也就是對常規坐標系進行了遷移。那么對於在普通二維坐標下的向量 x ,它在矩陣 A 描述空間中的表示與自己單純的進行拉伸或縮放的效果是一致的,滿足這種特殊性的 X 就是特征矩陣,對應的拉伸量 λ 就是特征值。
有了這個特殊的性質,特征值與特征向量出現在很多有矩陣運算的地方,如主成分分析(PCA),奇異值分解(SVD) 等機器學習方法中。
圖像處理中的 PCA 降維方法(最著名的),選取特征值最高的 k個特征向量來表示一個矩陣,從而達到降維分析 + 特征顯示的方法,還有圖像壓縮的 K-L 變換。再比如很多人臉識別,數據流模式挖掘分析等方面。

如上圖所示,原圖如左圖所示,提取最重要的n個特征來表示,我們發現仍然可以顯示這個圖的主要特征。
6,矩陣特征值的一般求解
6.1 特征值的求解步驟
特征值的求解過程如下:
- 1,計算特征多項式 |A - λE|
- 2,求 |A - λE| = 0 的所有根,即 A 的所有特征值
- 3,對於每個特征值 λ0,求解齊次線性方程組 (A - λ0E)x = 0 的一個基礎解系 ξ1....ξt,則 x=k1ξ1 + .....+ ktξt 為 A 對應於 λ0 的全部特征向量(k1, ...kt 不全為0)
6.2 求矩陣 A 的特征值和特征向量
矩陣A如下:

我們首先求其特征多項式,通過其特征方程,求解特征值。

則特征值為 λ =2, 1。
然后把每個特征值 λ 代入線性方程組 (A - λE)x = 0中,求出基礎解系。
當 λ = 2 時,解線性方程組 (A - 2E)x = 0,如下:


當 λ = 1 時,解線性方程組 (A - E)x = 0,如下:


7,通過特征值和特征向量進行PCA降維
7.1 PCA降維的算法步驟
設有 m 條 n 維數據:
- 1,將原始數據按照列組成 n 行 m 列矩陣 X
- 2,將 X 的每一行進行零均值化(去平均值),即減去這一行的均值
- 3,求出協方差矩陣 C = 1/m*X*XT
- 4,求出協方差矩陣的特征值以及對應的特征向量
- 5,將特征向量按對應特征值大小從上到下按行排列成矩陣,取前 k 行組成的矩陣P(保留最大的 k 的各特征向量)
- 6,Y = PX 即為降維到K維后的數據
7.2 PCA 降維的計算實例
1,原始數據集矩陣X:

2,均值為(2, 3),求均值后:

3,再求協方差矩陣(C= 1/m*X*XT):

4,特征值:
通過協方差矩陣C的特征方程,求出特征值:

得到:

5,求出對應的一組特征向量:
把每個特征值代入線性方程組(A - λE)x =0,求出其基礎解系,並得到一組特征向量。

6,標准化:

7,選擇較大特征值對應的特征向量:

8,執行PCA變換:Y=PX 得到的Y就是PCA降維后的值 數據集矩陣:
![]()
8,通過特征值和特征向量進行SVD 計算
8.1 SVD分解步驟
首先,我們展示一下SVD分解的公式:

進行SVD分解的步驟就是:
1,求U(U中的每個特征向量叫做A的左奇異向量)
從下面公式我們可以發現,AAT的特征向量組成的就是U向量:

2,求V(V中的每個特征向量叫做A的右奇異向量)
從下面公式我們可以發現:ATA 的特征向量組成的就是V矩陣:

3,求Σ
所以先求出ATA和 AAT,進而求出ATA和 AAT 的特征值和特征向量,然后得到U和V,最后通過 σi = √λi 直接求出奇異值,然后代入我們上面的奇異值分解公式,得到奇異值分解。
8.2 SVD計算實例
我們需要進行奇異值分解的矩陣A如下:

我們首先求出 ATA和 AAT:


進行求出 ATA 的特征值和特征向量:

接着求 AAT 的特征值和特征向量:

利用 Avi=σiui,i=1,2 求奇異值:

當然,我們也可以用 σi = √λi 直接求出奇異值為 √3 和 1。
最終得到 A 的奇異值分解為:

參考地址:
https://zhuanlan.zhihu.com/p/165382601
https://zhuanlan.zhihu.com/p/36584206
https://zhuanlan.zhihu.com/p/126102942
https://www.zhihu.com/question/29589753/answer/1635329454
https://www.zhihu.com/search?type=content&q=%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E7%89%B9%E5%BE%81%E5%80%BC%E5%92%8C%E7%89%B9%E5%BE%81%E5%90%91%E9%87%8F%E7%9A%84%E7%9F%A5%E8%AF%86%E7%82%B9%E3%80%82
