特征值與特征向量的幾何意義
矩陣的乘法是什么,別只告訴我只是“前一個矩陣的行乘以后一個矩陣的列”,還會一點的可能還會說“前一個矩陣的列數等於后一個矩陣的行數才能相乘”,然而,這里卻會和你說——那都是表象。
矩陣乘法真正的含義是變換,我們學《線性代數》一開始就學行變換列變換,那才是線代的核心——別會了點貓膩就忘了本——對,矩陣乘法 就是線性變換,若以其中一個向量A為中心,則B的作用主要是使A發生如下變化:
-
伸縮
clf; A = [0, 1, 1, 0, 0;... 1, 1, 0, 0, 1]; % 原空間 B = [3 0; 0 2]; % 線性變換矩陣 plot(A(1,:),A(2,:), '-*');hold on grid on;axis([0 3 0 3]); gtext('變換前'); Y = B * A; plot(Y(1,:),Y(2,:), '-r*'); grid on;axis([0 3 0 3]); gtext('變換后');
1
從上圖可知,y方向進行了2倍的拉伸,x方向進行了3倍的拉伸,這就是B=[3 0; 0 2]的功勞,3和2就是伸縮比例。請注意,這時B除了對角線元素為各個維度的倍數外,非正對角線元素都為0,因為下面將要看到,對角線元素非0則將會發生切變及旋轉的效果。
-
切變
clf; A = [0, 1, 1, 0, 0;... 1, 1, 0, 0, 1]; % 原空間 B1 = [1 0; 1 1]; % 線性變換矩陣 B2 = [1 0; -1 1]; % 線性變換矩陣 B3 = [1 1; 0 1]; % 線性變換矩陣 B4 = [1 -1; 0 1]; % 線性變換矩陣 Y1 = B1 * A; Y2 = B2 * A; Y3 = B3 * A; Y4 = B4 * A; subplot(2,2,1); plot(A(1,:),A(2,:), '-*'); hold on;plot(Y1(1,:),Y1(2,:), '-r*'); grid on;axis([-1 3 -1 3]); subplot(2,2,2); plot(A(1,:),A(2,:), '-*'); hold on;plot(Y2(1,:),Y2(2,:), '-r*'); grid on;axis([-1 3 -1 3]); subplot(2,2,3); plot(A(1,:),A(2,:), '-*'); hold on;plot(Y3(1,:),Y3(2,:), '-r*'); grid on;axis([-1 3 -1 3]); subplot(2,2,4); plot(A(1,:),A(2,:), '-*'); hold on;plot(Y4(1,:),Y4(2,:), '-r*'); grid on;axis([-1 3 -1 3]);
2
-
旋轉
所有的變換其實都可以通過上面的伸縮和切變變換的到,如果合理地對變換矩陣B取值,能得到圖形旋轉的效果,如下,
clf; A = [0, 1, 1, 0, 0;... 1, 1, 0, 0, 1]; % 原空間 theta = pi/6; B = [cos(theta) sin(theta); -sin(theta) cos(theta)]; Y = B * A; figure; plot(A(1,:),A(2,:), '-*'); hold on;plot(Y(1,:),Y(2,:), '-r*'); grid on;axis([-1 3 -1 3]);
3
好,關於矩陣乘就這些了。那么,我們接着就進入主題了,對特定的向量,經過一種方陣變換,經過該變換后,向量的方向不變(或只是反向),而只是進行伸縮變化(伸縮值可以是負值,相當於向量的方向反向)?這個時候我們不妨將書上對特征向量的定義對照一遍:
數學教材定義: 設A是n階方陣,如果存在 λ 和n維非零向量X,使
,則 λ 稱為方陣A的一個特征值,X為方陣A對應於或屬於特征值 λ 的一個特征向量。
上面特定的向量不就是特征向量嗎? λ 不就是那個伸縮的倍數嗎?因此,特征向量的代數上含義是:將矩陣乘法轉換為數乘操作;特征向量的幾何含義是:特征向量通過方陣A變換只進行伸縮,而保持特征向量的方向不變。特征值表示的是這個特征到底有多重要,類似於權重,而特征向量在幾何上就是一個點,從原點到該點的方向表示向量的方向。
特征向量有一個重要的性質:同一特征值的任意多個特征向量的線性組合仍然是A屬於同一特征值的特征向量。關於特征值,網上有一段關於“特征值是震動的譜”的解釋:
戲說在朝代宋的時候,我國就與發現矩陣特征值理論的機會擦肩而過。話說沒有出息的秦少游在往池塘里扔了一顆小石頭后,剛得到一句“投石沖開水底天”的泡妞詩對之后,就猴急猴急地去洞房了,全然沒有想到水波中隱含着矩陣的特征值及特征向量的科學大道理。大概地說,水面附近的任一點水珠在原處上下振動(實際上在做近似圓周運動),並沒有隨着波浪向外圈移動,同時這些上下振動的水珠的幅度在漸漸變小,直至趨於平靜。在由某塊有着特定質量和形狀的石頭被以某種角度和速度投入某個面積和深度特定的水池中所決定的某個矩陣中,紋波盪漾中水珠的漸變過程中其特征值起着決定性的作用,它決定着水珠振動的頻率和幅度減弱的衰退率。
在理解關於振動的特征值和特征向量的過程中,需要加入復向量和復矩陣的概念,因為在實際應用中,實向量和實矩陣是干不了多少事的。機械振動和電振動有頻譜,振動的某個頻率具有某個幅度;那么矩陣也有矩陣的譜,矩陣的譜就是矩陣特征值的概念,是矩陣所固有的特性,所有的特征值形成了矩陣的一個頻譜,每個特征值是矩陣的一個“諧振頻點”。
美國數學家斯特讓(G..Strang)在其經典教材《線性代數及其應用》中這樣介紹了特征值作為頻率的物理意義,他說:
大概最簡單的例子(我從不相信其真實性,雖然據說1831年有一橋梁毀於此因)是一對士兵通過橋梁的例子。傳統上,他們要停止齊步前進而要散步通過。這個理由是因為他們可能以等於橋的特征值之一的頻率齊步行進,從而將發生共振。就像孩子的秋千那樣,你一旦注意到一個秋千的頻率,和此頻率相配,你就使頻率盪得更高。一個工程師總是試圖使他的橋梁或他的火箭的自然頻率遠離風的頻率或液體燃料的頻率;而在另一種極端情況,一個證券經紀人則盡畢生精力於努力到達市場的自然頻率線。特征值是幾乎任何一個動力系統的最重要的特征。
其實,這個矩陣之所以能形成“頻率的譜”,就是因為矩陣在特征向量所指的方向上具有對向量產生恆定的變換作用:增強(或減弱)特征向量的作用。進一步的,如果矩陣持續地疊代作用於向量,那么特征向量的就會凸現出來。
更多關於特征向量及特征值的實際例子參見Wikipedia: http://zh.wikipedia.org/wiki/特征向量 。
特征值分解
設A有n個特征值及特征向量,則:
將上面的寫到一起成矩陣形式:
若(x1,x2,...,xn)可逆,則左右兩邊都求逆,則方陣A可直接通過特征值和特征向量進行唯一的表示,令
Q=(x1,x2,...,xn)
Σ = diag(λ1, λ2, ..., λn)
則 ,該表達式稱為方陣的特征值分解,這樣方陣A就被特征值和特征向量唯一表示。
一個變換方陣的所有特征向量組成了這個變換矩陣的一組基。所謂基,可以理解為坐標系的軸。我們平常用到的大多是直角坐標系,在線性代數中可以把這個坐標系扭曲、拉伸、旋轉,稱為基變換。我們可以按需求去設定基,但是基的軸之間必須是線性無關的,也就是保證坐標系的不同軸不要指向同一個方向或可以被別的軸組合而成,否則的話原來的空間就“撐”不起來了。從線性空間的角度看,在一個定義了內積的線性空間里,對一個N階對稱方陣進行特征分解,就是產生了該空間的N個標准正交基,然后把矩陣投影到這N個基上。N個特征向量就是N個標准正交基,而特征值的模則代表矩陣在每個基上的投影長度。特征值越大,說明矩陣在對應的特征向量上的方差越大,功率越大,信息量越多。不過,特征值分解也有很多的局限,比如說變換的矩陣必須是方陣。
在機器學習特征提取中,意思就是最大特征值對應的特征向量方向上包含最多的信息量,如果某幾個特征值很小,說明這幾個方向信息量很小,可以用來降維,也就是刪除小特征值對應方向的數據,只保留大特征值方向對應的數據,這樣做以后數據量減小,但有用信息量變化不大,PCA降維就是基於這種思路。
Matlab中通過eig函數就可求得特征值和特征向量矩陣。
>> B = [ 3 -2 -.9 2*eps
-2 4 1 -eps
-eps/4 eps/2 -1 0
-.5 -.5 .1 1 ]
B =
3.0000 -2.0000 -0.9000 0.0000
-2.0000 4.0000 1.0000 -0.0000
-0.0000 0.0000 -1.0000 0
-0.5000 -0.5000 0.1000 1.0000
>> [V D] = eig(B)
V =
0.6153 -0.4176 -0.0000 -0.1437
-0.7881 -0.3261 -0.0000 0.1264
-0.0000 -0.0000 -0.0000 -0.9196
0.0189 0.8481 1.0000 0.3432
D =
5.5616 0 0 0
0 1.4384 0 0
0 0 1.0000 0
0 0 0 -1.0000
D對角線的元素即為特征值(表示了伸縮的比例),D就是特征值分解公式中的Q,V的每一列與D沒列對應,表示對應的特征向量,即特征值分解中的Σ。
奇異值分解
特征值分解是一個提取矩陣特征很不錯的方法,但是它只適用於方陣。而在現實的世界中,我們看到的大部分矩陣都不是方陣,比如說有M個學生,每個學生有N科成績,這樣形成的一個M * N的矩陣就可能不是方陣,我們怎樣才能像描述特征值一樣描述這樣一般矩陣呢的重要特征呢?奇異值分解就是用來干這個事的,奇異值分解是一個能適用於任意的矩陣的一種分解的方法。我們有必要先說說特征值和奇異值之間的關系。
對於特征值分解公式, ATA 是方陣,我們求 ATA 的特征值,即 ,此時求得的特征值就對應奇異值的平方,求得的特征向量v稱為右奇異向量,另外還可以得到:
所求的ui就是左奇異向量, σi 就是奇異值。已有人對SVD的幾何機理做了清晰的分析,非常受用,就不重復造輪子,下文為轉載自http://blog.sciencenet.cn/blog-696950-699432.html 。