特征值和特征向量到底描述了什么
矩陣的乘法
矩陣對向量可以做拉伸也可以做旋轉
對角矩陣對向量(x,y)(x,y)(x,y)在x軸上拉伸了3倍。非對角矩陣對向量(x,y)(x,y)(x,y)不僅做了拉伸,同時也做了旋轉。
特征值和特征向量到底描述了什么
舉個例子:打拳擊。我們可以把方向當做特征向量,在這個方向上用多大的力量就是特征值。
特征向量可以說是主要的前進目標,特征值是向這個目標產生多大的作用。
數學定義
對于給定矩陣A,尋找一個常數λ\lambdaλ和非零向量xxx,使得向量xxx被矩陣A作用后所得的向量AxAxAx與原向量xxx平行,并且滿足Ax=λxAx=\lambda xAx=λx。如下圖所示:
λ\lambdaλ就是特征值,xxx就是特征值λ\lambdaλ對應的特征向量。
例如要做降維操作,10維的數據,每一維度都有一個特征向量,有下面兩個維度逇特征向量,應該選擇哪一個?
如果有兩個特征值λ1>λ2\lambda_1 > \lambda_2λ1?>λ2?,我們會認為λ1\lambda_1λ1?對應的特征向量更重要,更有價值,所以在做降維操作時,選擇特征值大的一個特征向量。
特征空間
特征空間包含了所有的特征向量。
應用
既然特征值表達了重要程度,并且和特征向量所對應,那么特征值大的就是主要信息了,基于這一點,我們可以提取各種有價值的信息了!
圖像可以看做是一個矩陣,既然是矩陣,就可以算出這個矩陣的特征向量和特征值,我們如果取前10個特征值最大的特征向量,那么就可以對這個圖像進行壓縮,雖然圖像變的有一些模糊,但是整體不會有太大變化。
使用numpy計算特征值和特征向量
import numpy as np# 創建矩陣 維度 4*2 data = np.array([[2, 4], [1, 3], [0, 0], [0, 0]])# 將矩陣轉為方陣 維度 4*4 A = np.dot(data, data.T) #A=array([[20, 14, 0, 0], # [14, 10, 0, 0], # [ 0, 0, 0, 0], # [ 0, 0, 0, 0]]) # 求A的特征值和特征向量 val,vector = np.linalg.eig(A) # val=array([29.86606875, 0.13393125, 0. , 0. ]) # vector=array([[ 0.81741556, -0.57604844, 0. , 0. ], # [ 0.57604844, 0.81741556, 0. , 0. ], # [ 0. , 0. , 1. , 0. ], # [ 0. , 0. , 0. , 1. ]]) 特征值29.86606875 對應的特征值29.86606875 對應的特征向量為[ 0.81741556,0.57604844,0 ,0]
特征值0.13393125對應的特征向量為[-0.57604844,0.81741556,0,0]
驗證:
np.dot(A, vector[:,0]) # array([24.41298932, 17.20430221, 0. , 0. ]) np.dot(val[0], vector[:,0]) # array([24.41298932, 17.20430221, 0. , 0. ])np.dot(A, vector[:,1]) # array([-0.07715089, 0.10947749, 0. , 0. ]) np.dot(vector[:, 1], val[1]) array([-0.07715089, 0.10947749, 0. , 0. ])矩陣data:
矩陣A:
特征值:
特征向量:
總結
以上是生活随笔為你收集整理的特征值和特征向量到底描述了什么的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2022年5最好的平板电脑:高大上,效率
- 下一篇: 电脑一开机就跳闸是怎么回事机器一开机就会