特徵向量:這個動作的骨架
玩完這關,你看到任何 2×2 矩陣都能問出它「到底在幹嘛」, 而且知道找到骨架之後可以拿它做三件很實際的事。
① 這關在解什麼問題
03 關最後把資料的形狀壓成了一個 2×2 的共變異數矩陣 —— 形狀確實藏在那四個數字裡,但我們當時只能瞪著它。我們缺一把能看穿矩陣的刀。
先看一個你八成寫過的東西:一個每個月重跑一次的流程。 兩家外送平台在搶用戶,每個月藍家有 10% 的人跑去橘家、橘家有 20% 的人跑回藍家。 現在藍家市佔只有 10%。
然後有人問你:一直跑下去會停在哪?還是會來回震盪、或者整個爆掉? 你不想真的跑一百次來看 —— 而且就算跑了,你也只知道「這組數字會怎樣」, 換一組參數又要重跑一次。你要的是看一眼那幾個數字就知道結局。
那組流動比例擺成一個 2×2 矩陣,就是一台搬運機:餵它一個點(這個月的市佔), 它把那個點搬到別的地方(下個月的市佔),整個平面上每個點都被搬一次。 而這件事跟外送平台無關 —— 任何 2×2 矩陣都是一台搬運機。 問題是,隨便給你一台,它就只長這樣,四個數字擺在你面前:
所以這一關會照這個順序走,一步都不跳:
「有沒有哪個方向,你只把它拉長或壓短、卻完全不把它轉向?」
如果有,那幾個方向就是這個動作的骨架:整台機器再複雜,沿著骨架看它就只是「乘一個數字」而已。 而「跑一百次會怎樣」也就變成「一個數字的一百次方是多少」—— 心算就能回答。
這關給你的工具叫 特徵向量 (eigenvector) 與 特徵值 (eigenvalue)。 上面那兩家外送平台的下場,⑥ 會用它算完。 (這一關的主角是矩陣=一個動作;資料的特徵向量是下一關的事, 但那是同一把刀 —— 等一下你就會拿它去解剖 03 關那個共變異數矩陣。)
② 矩陣那四個數字,是怎麼長出來的
先把最容易勸退人的那件事解決掉:2112 這四個數字不是天上掉下來的。它們的來歷只有一句話:
矩陣的每一欄,就是一根「基礎箭頭」搬家之後的新位置。
平面上只有兩根基礎箭頭,其他所有點都是它們拼出來的:
- e₁ = (1, 0) —— 往右一格。(e 取自 elementary/基底; 下標 1 就是「第 1 根」,沒有別的意思。)
- e₂ = (0, 1) —— 往上一格。
任何一個點都能用它們寫出來:點 (3, 2) 就是「往右三格、再往上兩格」,也就是 3·e₁ + 2·e₂。
現在假設我告訴你這台機器做了什麼:它把 e₁ 搬到 (2, 1)、 把 e₂ 搬到 (1, 2)。這樣一講,它對其他每一個點做什麼就完全定死了, 因為這台機器不會把加法拆散(這個性質就叫「線性」):
所以整台機器的全部資訊 = 兩個新位置 = 四個數字。就這樣,沒有第五個數字。
把那兩個新位置直立著抄下來、一根一欄,就是矩陣:
第二欄 (1, 2) 讀作「e₂ 搬到 (1, 2)」。
習慣上這四格叫 a b(上排)、c d(下排),所以 第一欄是 a 跟 c、第二欄是 b 跟 d。
這就是等一下主實驗那四個滑桿的意思:拉 a、c 是在搬 e₁ 的新家, 拉 b、d 是在搬 e₂ 的新家。不是四個抽象的旋鈕。
你會看到什麼:兩根灰虛線是搬家前的 e₁、e₂;藍實線箭頭是 Ae₁(e₁ 的新家)、橘實線箭頭是 Ae₂;青點 p 是一個示範點, 綠箭頭 Ap 是它被搬到哪。
你可以動什麼:直接拖藍箭頭和橘箭頭的頭(每次跳 0.1、範圍 ±3)。 拖藍的 → 矩陣第一欄兩格數字跟著變;拖橘的 → 第二欄跟著變。
要看出什麼:矩陣裡的數字就是你手上那兩根箭頭的座標, 而青點 p 被搬到哪完全由這兩根決定(右邊讀數盤把乘法一步步代給你看)。
灰虛線 e₁ / e₂(搬家前) 藍 Ae₁ 橘 Ae₂ 青 示範點 p 綠 Ap 綠虛線 Ap 是怎麼被拼出來的
| 符號 | 它是什麼 | 現在的值 |
|---|---|---|
| e₁ | 往右一格的基礎箭頭(搬家前) | (1, 0) |
| e₂ | 往上一格的基礎箭頭(搬家前) | (0, 1) |
| Ae₁ | e₁ 被搬到哪 = 矩陣第一欄(a, c) | — |
| Ae₂ | e₂ 被搬到哪 = 矩陣第二欄(b, d) | — |
| p | 示範用的一個普通點(不是特別的點) | — |
| Ap | p 被這台機器搬到哪 | — |
| det A | 面積放大率(負號=把平面翻面) | — |
所以這一段的結論是:矩陣不是四個神秘數字, 是「兩根基礎箭頭的新地址」抄下來的一張表。看到任何矩陣,先把它的兩欄各讀成一個點, 你就已經知道它在幹嘛了。
③ 從你已經會的東西開始:一張橡皮膜
拿一張橡皮膜,用筆在上面畫滿從中心射出去的箭頭(像太陽的光芒)。現在抓住兩邊,往外拉。
- 大部分箭頭會又變長又歪掉 —— 它們被拉到別的方向去了。
- 但一定有幾根箭頭,原地變長或變短,方向一點都沒動。
那幾根沒歪的箭頭,就是這個拉法的特徵向量;它變長/變短的倍率就是特徵值 λ (λ 讀作 lambda,就是一個希臘字母,代表一個純數字,沒有別的含意)。 揉麵團也一樣:你朝某個方向壓下去,麵團裡就有那麼一兩條線上的東西只是被拉長,沒有被扭走。
λ = 0.5 → 這個方向被壓成一半(0 < λ < 1 就是壓扁)
λ = −1 → 翻到膜的反面,但還躺在同一條線上
λ = 0 → 這個方向被壓死成一個點(整個維度沒了) λ 只有一件事:倍率。負號=翻面,絕對值=拉長還是壓短。
骨架不是「看起來最長的方向」,是「動作沒有把它轉走的方向」。 這兩件事在對稱矩陣上剛好一樣(等一下你會親眼看到),在歪斜的矩陣上就不一樣了。
所以這一段的結論是:「骨架」=方向沒被轉走的那幾根,「λ」=那根被拉長幾倍。 接下來整關都在找這兩個東西。
④ 用一行式子把上面那句話寫下來
左邊讀作「把 v 餵進機器」,右邊讀作「把 v 乘一個數字」。 等號的意思是:整台機器作用在 v 身上的效果,跟「只把 v 乘一個數字」完全一樣。 這就是「沒有被轉走」的數學寫法。
注意這是一個方程式,不是在定義一個新運算:給你 A,要去找哪些 v 和 λ 能讓等號成立。 大部分 v 都不行 —— 這也是為什麼下面要一階一階慢慢找。
⑤ 主實驗:從一個點開始,慢慢找出那根不會歪的箭頭
這一節有四階,請照順序玩。前三階用的都是同一台機器 2112(就是 ② 那台), 到第四階才讓你自己捏矩陣。
先只拿一個點,看它被搬到哪
不要想特徵向量,先不要。畫面上只有一個點 v。 按「送進 A」,它會被搬到新位置 Av,中間用一條細線連起來 —— 那條線就是「這個點的搬家路線」。
你會看到什麼:藍箭頭 v 是你放的那個點; 按下按鈕後出現 橘箭頭 Av(同一個點被 A 搬完的位置), 灰虛線連著搬家前後,灰色弧線標出歪掉幾度。
你可以動什麼:拖藍色圓點換一個方向(長度會被固定在畫面裡, 長短完全不影響結論);按鈕可以把 Av 收起來再送一次。
要看出什麼:同一台機器,你把 v 擺在不同角度, 它被歪掉的度數是不一樣的。有些角度歪很多、有些角度歪很少。
藍 v(可拖) 橘 Av 灰虛線 搬家路線 灰弧 歪掉幾度
| 符號 | 它是什麼 | 現在的值 |
|---|---|---|
| v | 你放的那個點(也是一根從原點出發的箭頭) | — |
| Av | v 被機器 A 搬完之後的位置 | — |
| θv | v 指的角度(從 x 軸逆時針數,度) | — |
| |v| | v 的長度(兩條直線是「取長度」的意思) | — |
所以這一階的結論是:矩陣對不同方向的點做的事情不一樣, 「歪掉幾度」是會隨角度改變的一個數字。那接下來的問題就很自然: 有沒有哪個角度會讓它歪 0 度?
一次拿四個點,同時搬
一個一個試太慢。改成同時放四根探針,像一把張開的扇子,每根隔 45°。 整把扇子可以用滑桿一起轉(轉的角度叫 φ,讀作 phi, 意思就是「這把扇子現在轉到哪」)。四根同時送進 A,你一眼就能比較。
你會看到什麼:四個灰點是探針(搬家前), 每個點都有一條淡虛線射線從原點穿過它往外延伸 —— 那條射線就是「它原本的方向」。每個點連到自己搬完的位置。 紫色=這一根搬完之後還躺在自己那條射線上。
你可以動什麼:只有一個滑桿 φ: 把整把扇子一起轉。四根探針的相對角度永遠不變。
要看出什麼:轉到某些 φ 的時候, 四根裡有兩根會變成紫色(完全不歪),另外兩根照樣歪 —— 「不歪」不是每個方向都有的待遇,只有特定幾個方向才有。
灰點 探針(搬家前) 淡虛線 它自己那條射線 橘 被歪掉的搬家路線 紫 沒歪:沿著自己的射線滑出去
| 符號 | 它是什麼 | 現在的值 |
|---|---|---|
| φ | 整把扇子轉了幾度(滑桿控制的就是它) | — |
| φ+45k | 第 k 根探針的角度,k = 0,1,2,3 | — |
| 歪掉 | 搬完之後跟原本那條射線差幾度 | — |
| 倍率 | 搬完之後長度變成原本的幾倍 | — |
因為十字的四根互相垂直,而這台 A 的兩根骨架剛好也互相垂直(等一下會知道為什麼)。 兩個垂直的東西互相比,會變成「要嘛四根同時中、要嘛四根同時不中」,看不出對比。 隔 45° 張開才會出現「有的中、有的沒中」這種好看的畫面。
所以這一階的結論是:不歪的方向是存在的,而且很少。 轉整把扇子只是碰運氣 —— 我們需要一個「一次把所有方向都試過」的辦法。
那就一次拿 36 個點,把每個方向都試一遍
它們不是資料,不是誰的觀測值,也不是散布圖。它們是我刻意排出來的 36 根探針: 在單位圓上每 10° 放一根,10° × 36 = 360°,剛好把一圈的所有方向均勻試過一遍。
目的只有一個:一次做完 36 次階梯 1 的實驗,看哪幾根沒被歪掉。 點數 36 沒有玄機,就是「10° 一格」除出來的。
它們搬完之後會排成一個橢圓。 橢圓本身不是重點(它只是 36 個落點的輪廓,畫出來是為了讓你看到圓被拉扁了)—— 重點是那幾條沿著自己半徑滑動的細線。
你會看到什麼:虛線圓上 36 個灰點是探針; 每個點拉出一條細線到它搬完的位置;淡輪廓是那 36 個落點連起來的橢圓 (背景參考而已);紫色粗線是「歪得最少」的那幾根, 它們的射線也會一起畫出來。
你可以動什麼:三顆按鈕換三台不同的機器(對稱/純縮放/旋轉 90°), 另一顆可以把紫色標記關掉自己看。
要看出什麼:絕大多數細線都是斜著拉走的; 只有兩處的細線是沿著自己那條半徑滑出去的。換成「旋轉 90°」那台, 一根都不剩。
虛線圓 36 根探針站的地方 灰細線 搬家路線 淡輪廓 落點連成的橢圓(不是重點) 紫 歪得最少的那幾根
| 符號 | 它是什麼 | 現在的值 |
|---|---|---|
| N = 36 | 探針根數 = 360° ÷ 10° | 36 |
| 單位圓 | 長度 = 1 的所有方向。只借它來擺方向,跟長度無關 | r = 1 |
| min 歪角 | 36 根裡歪得最少的那一根,歪了幾度 | — |
| max 歪角 | 歪得最兇的那一根 | — |
所以這一階的結論是:36 根探針只是抽樣。 用對稱那台機器時,沒有任何一根剛好命中 —— 骨架在 45°,而探針只站在 40° 和 50°,一左一右夾著它, 真正的骨架就卡在採樣的縫隙裡。想要精確找到它,我們得把角度連續掃過去。
把 36 次實驗畫成一張成績單:掃描曲線
階梯 3 每一根探針都會產出一個數字:「這個方向被歪掉幾度」。 既然是「一個角度 → 一個數字」,那它就能畫成一張函數圖。 我們乾脆不要只取 36 個,直接把角度從 0° 連續掃到 360°,每一格都算一次,連成一條線。 那條線就是掃描曲線。
① 橫軸=你把 v 擺在哪個角度(0°–360°)。 跟左圖那根藍箭頭的角度是同一件事 —— 你拖藍箭頭,曲線上那顆 藍光標就會跟著左右跑。
② 縱軸=把 v 送進 A 之後,它被歪掉幾度(正的是逆時針歪、負的是順時針歪)。 這就是階梯 1 那個灰色弧線量的東西。
③ 碰到 0° 那條綠線=這個角度完全沒被歪(同向,λ > 0); 碰到 ±180° 那兩條粉虛線=被翻到反面但還在同一條線上(λ < 0)。 兩種都算找到骨架。
④ 有幾個交點=這台機器有幾根骨架(同一根骨架的正反兩端會各算一個交點, 所以「兩根骨架」看起來是 4 個交點)。曲線完全碰不到那三條線 → 這台機器沒有骨架。
你會看到什麼:上圖是幾何現場:藍 v、 橘 Av、灰弧標歪幾度。下圖是成績單:整圈掃過去的歪角曲線, 藍光標標出你現在站在哪一格。找到骨架時整張上圖會亮起來。
你可以動什麼:拖上圖的藍點轉 v; 四個滑桿 a b c d 改矩陣(a、c 是 Ae₁,b、d 是 Ae₂,見 ②); 五顆 preset 一鍵換典型的機器;「丟 36 個點」把階梯 3 疊上來;「我放棄」直接給答案。
要看出什麼:把藍光標推到綠線或粉線上, 上圖的 Av 就會躺回 v 那條線 —— 兩張圖講的是同一件事。
藍 v(可拖) 橘 Av(A 作用後) 紫/桃 正確答案的兩根特徵方向(預設藏起來) 淡灰 36 個點與它們的橢圓(可開關)
掃描曲線:橫軸=v 擺在哪個角度,縱軸=Av 被歪掉幾度。 碰到 0° 綠線或 ±180° 粉虛線的角度就是骨架。 這條線是解出來的,不是猜的 —— 穿過去的位置就那幾個,不會多也不會少。
特徵值 λ₁ , λ₂(真正解出來的答案)
| 符號 | 它是什麼(這一區用到的每一個都在這) | 現在的值 |
|---|---|---|
| A | 這台機器。四格 a b / c d,左欄是 Ae₁、右欄是 Ae₂ | — |
| v | 你拖的那個方向(藍箭頭)。長度不影響任何結論 | — |
| Av | v 被 A 搬完的位置(橘箭頭) | — |
| θv | v 的角度 = 掃描曲線的橫軸位置 | — |
| λ₁ , λ₂ | 真正的兩個特徵值(用公式解出來的,不是量的) | — |
| λ̂ | 帶帽子=現場量出來的估計值。用你手上這根 v 硬算的倍率 (λ̂ = (Av·v)/(v·v),叫 Rayleigh 商)。v 不是骨架時它是假的, 跟真正的 λ 不一定相等 | — |
| 殘差 | |Av − λ̂v|:把「最貼近的純縮放」扣掉之後還剩多少。 真的是骨架就會剩 0 | — |
| tr(A) | 跡 (trace):左上 + 右下(a + d)。它等於 λ₁ + λ₂ | — |
| det(A) | 行列式:ad − bc,就是面積放大率。它等於 λ₁ · λ₂ | — |
| Δ | 判別式 = tr(A)² − 4·det(A)。就是二次公式裡根號內那一坨; Δ < 0 就開不出實數根 → 沒有實特徵向量 | — |
那 36 個點就是階梯 3 那批探針,疊到主實驗上而已。 細線是「搬家前 → 搬家後」;絕大多數是斜著被拉走, 只有骨架附近那幾根是沿著自己那條半徑滑動的。按「給我答案」會把它們塗成紫/桃色。
(如果 A 把圓放得太大超出畫面,程式會把圓的半徑等比例縮小再畫。 縮放跟 A 可以交換順序,所以形狀完全一樣,不影響你看到的結論。)
所以這一階的結論是:掃描曲線把「找骨架」變成一件用看的事情 —— 曲線碰線的地方就是答案,碰幾次就有幾根。接下來三節在講:找到之後能幹嘛。
⑥ 用途一:預測「一直做下去會怎樣」
先講一個具體到不能再具體的情境,完全不出現矩陣:
市面上只有兩家外送平台:藍家和 橘家, 所有人都在用其中一家。每個月月底大家會重新選一次,長期統計下來是這樣:
- 這個月用藍家的人:90% 留下、10% 跑去橘家。
- 這個月用橘家的人:80% 留下、20% 跑去藍家。
現在藍家只有 10% 的市佔。一年後呢?十年後呢?藍家會不會歸零?
把上面那四句話直接畫成一張表。直著讀一欄是「這家的人下個月分別去哪」:
| 這個月是藍家的用戶 | 這個月是橘家的用戶 | |
|---|---|---|
| 下個月人在藍家 | 0.90 | 0.20 |
| 下個月人在橘家 | 0.10 | 0.80 |
把表頭遮住,剩下四個數字,那就是 T:
第一欄 (0.90, 0.10)=藍家的人:九成留下、一成跑掉。 第二欄 (0.20, 0.80)=橘家的人:兩成跑來、八成留下。
每一欄加起來一定是 1(人不會憑空消失,也不會多出來)。
市佔本身寫成一個兩格的向量,下標就是「第幾個月」:
s₁ 就是第 1 個月的市佔、s₁₂ 是第 12 個月的。sₖ 是「第 k 個月」的通稱, k 是一個還沒指定的月份編號。
規則只有一條:下個月 = T × 這個月,寫成 sk+1 = T sk。
第一步長什麼樣?把數字直接代進去,一格都不跳:
藍家從 10% 一個月就跳到 27%。那第二個月、第三個月…… 會停在哪?自己按。
你會看到什麼:橫軸是藍家市佔、縱軸是橘家市佔。 青點是每一個月的位置(顏色越深=越晚的月份),它們一定落在 x + y = 1 那條虛線上(兩家加起來是全部的人)。 紫線是 T 的 λ = 1 特徵方向,紫圈是它跟那條虛線的交點。
你可以動什麼:「再跑一個月」一步一步走、「一次跑 12 個月」快轉一年、「重置」回到起點。 每按一次,右邊會把那一步的乘法完整代給你看。
要看出什麼:青點一路往紫圈爬,而且再也離不開。 那個黏住的位置就是 T 的 λ = 1 特徵向量 —— 「乘了矩陣還是自己」。
青點 每個月的市佔(沿著 x+y=1 這條線走) 綠箭頭 目前的市佔向量 紫 λ = 1 的特徵向量方向(從原點射出去的那條線)
| 符號 | 它是什麼 | 現在的值 |
|---|---|---|
| T | 轉移矩陣。每一欄=這家的人下個月會跑去哪,每欄加起來 = 1 | [[.90,.20],[.10,.80]] |
| s₀ | 第 0 個月的市佔(下標=第幾個月)。讀作「藍家 10%、橘家 90%」 | (0.10, 0.90) |
| k | 已經跑了幾個月 | — |
| sk | 第 k 個月的市佔(藍, 橘) | — |
| 穩態 | 再乘 T 也不會變的那個市佔,就是 λ = 1 的特徵向量 | — |
| d | 現在離穩態還有多遠(兩點的直線距離) | — |
| d₀ | 一開始(第 0 個月)離穩態多遠 | — |
| λ₁ , λ₂ | T 的兩個特徵值。λ₁ = 1 撐住穩態,λ₂ = 0.7 管「偏差衰減得多快」 | — |
| 第 k 月 | 藍平台 | 橘平台 | 離穩態的距離 d | d₀ × 0.7k(預測) |
|---|
最後兩欄請對著看:實測距離跟「初始距離乘 0.7 的 k 次方」一模一樣。 0.7 不是我硬湊的,它是 T 的第二個特徵值 λ₂。
為什麼可以直接用 λk 預測,不用真的乘 k 次
把起始向量拆成兩根特徵向量的組合(骨架是一組座標,任何向量都能這樣拆):
Tks₀ = c₁ λ₁k v₁ + c₂ λ₂k v₂ v₁ / v₂=T 的兩根特徵向量;c₁ / c₂=兩個純數字,是「s₀ 裡各含多少份 v₁ 和 v₂」的配方。
矩陣乘 k 次,在骨架上就只是每根軸各自乘 λ 的 k 次方。
這裡 λ₁ = 1(所以 v₁ 那份永遠不變 → 那就是穩態)、 λ₂ = 0.7(所以偏離穩態的那份每個月乘 0.7 → 一路衰減到看不見)。
上面那張表就是 PageRank,只是 Google 那個矩陣有幾十億列: 每個網頁的分數會沿著連結流到它指向的網頁,一直流下去。 你剛剛按十幾下按鈕看到的收斂,Google 叫 power iteration; 收斂到的那個向量就是 λ = 1 的特徵向量,也就是網頁排名。
幾十億階矩陣的特徵向量沒人真的去解特徵多項式 —— 就是像你這樣「一直乘」, 因為其他 λ 的絕對值都比 1 小,乘幾十次就自己消失了。
所以這一節的結論是:只要問題長成「下一步 = 矩陣 × 這一步」, 結局完全由 λ 決定:λ = 1 的那根撐住終點,|λ| < 1 的那幾根負責衰減掉。 不必真的跑一百次。
⑦ 用途二:換一套座標,動作就變簡單(對角化)
同一個動作,看兩次。左邊用你習慣的 x/y 座標,右邊改用骨架當座標軸。 注意右邊:格子還是同一組方向,只是各自被縮放,沒有任何歪斜。
你會看到什麼:兩張圖都是「一格方格被 A 搬過之後變成什麼形狀」。 淡虛線是搬家前那一格,綠實線是搬完的樣子。 左圖用 e₁/e₂ 當格線方向, 右圖改用 v₁/v₂(骨架)當格線方向。
你可以動什麼:三顆按鈕換三種矩陣(對稱/歪斜/本來就對角)。
要看出什麼:左圖的正方形被拉成歪的平行四邊形; 右圖那一格只是被拉長/壓短,四個角還是原本的角度 —— 同一個動作,換個座標就沒有歪斜了。
標準座標:淡的是原本的方格,亮的是被 A 搬過之後的格子 —— 正方形被拉成歪的平行四邊形,x 軸與y 軸都被轉走了。
特徵座標:改用v₁/v₂當格線方向。 同一個 A,現在只做兩件事:v₁ 方向乘 λ₁、v₂ 方向乘 λ₂。 沒有歪斜,兩根軸互不干擾。
| 符號 | 它是什麼 | 現在的值 |
|---|---|---|
| v₁ , v₂ | 兩根骨架(特徵向量),已經縮成長度 1 | — |
| λ₁ , λ₂ | 兩根骨架各自的倍率 | — |
| P | 翻譯機:把兩根骨架一欄一欄擺進去(跟 ② 同一招)。 作用是「骨架座標 → 標準座標」 | — |
| D | 對角矩陣:只有對角線有東西,就是 λ₁、λ₂。意思是「兩軸各自乘一個數,互不干擾」 | — |
| P⁻¹ | 反向翻譯機(右上那個小 −1 是「反過來做」的意思):標準座標 → 骨架座標 | — |
| det A | 面積放大率,等於 |λ₁ λ₂| | — |
兩張圖下緣那個 badge 寫的是面積放大率:淡虛線是原本那一格(左圖就是單位正方形), 實線是它被 A 搬過之後的平行四邊形。面積變成 N 倍,那個 N 就是 |det A|; 而它剛好等於 |λ₁λ₂| —— 兩根骨架各自被拉 λ₁、λ₂ 倍,面積當然就是兩者相乘。
所以 det = 0 的意思是「面積被壓成 0」:圖形塌成一條線(甚至一個點), 代表至少有一根骨架的 λ = 0。塌掉的那個維度回不來,這就是 det = 0 ⇒ 矩陣不可逆的白話版。 階梯 4 讀數盤裡的 det(A) = λ₁·λ₂ 跟 Δ = tr²−4det 兩列,靠的都是這一件事。
(P、D、P⁻¹ 各是什麼,看上面那張符號表最後三列。)
順帶一個好處:Ak = P Dk P−1, 而 Dk 只是把對角線各自次方 —— 這就是 用途一能一秒算完「跑一百年」的原因,兩件事是同一件事。
所以這一節的結論是:對角化=換一組看事情的座標,把糾纏在一起的動作拆成兩個獨立的乘法。 矩陣沒變,只是你站的位置變了。
⑧ 用途三:把這把刀對準資料(下一關的門口)
到現在為止,A 一直是我用滑桿捏出來的動作。但03 關結尾那個 共變異數矩陣 C 也是一個 2×2 矩陣 —— 它同樣可以問「有沒有哪個方向不會被轉走」。
下面這顆按鈕會把一份真實資料算出來的共變異數矩陣(用 LAB.M.covMatrix 算,
樣本版 ddof = 1,四捨五入到 0.1 好塞進滑桿)直接灌進階梯 4 的主實驗,並幫你把答案打開:
| 符號 | 它是什麼 |
|---|---|
| C | 共變異數矩陣:把一坨資料的「形狀」壓成 2×2(03 關做的事) |
| ddof = 1 | 算變異數時分母用 n−1 而不是 n(樣本版)。全站統一,換了數字會對不上 |
| n | 資料點數 |
| v₁ · v₂ | 兩根主軸的內積(01 關)。= 0 就是互相垂直 |
你會看到兩件事:它是對稱的(b = c,因為 cov(x,y) = cov(y,x)), 所以兩根特徵向量互相垂直;而那兩根垂直的線,就是資料躺著的方向與它的厚度方向。 這正是 PCA 在做的事,我們下一關把它做完。
⑨ 有些動作根本沒有骨架
「一定找得到不轉向的方向」是錯的。把整個平面轉 90°:每一根箭頭都被轉走,一根都不剩。 下面 A = 先轉 θ 度、再乘一個縮放 r。轉一轉滑桿,看掃描曲線 —— 它會整條平移,但永遠碰不到 0° 也碰不到 ±180°。
你會看到什麼:上圖從一根藍箭頭出發, 反覆送進 A 十四次,青點是每一次的落點(越淡=越後面),連起來是一條螺旋。 下圖是同一條掃描曲線(讀法見 階梯 4)。
你可以動什麼:θ 是每一次轉幾度、 r 是每一次長度乘幾倍。
要看出什麼:下圖那條曲線整條是水平的,而且永遠停在 θ 的高度 —— 碰不到 0°、也碰不到 ±180°。沒有任何方向能讓 Av 躺回 v 那條線上。
藍 起始向量 青點 連續作用 14 次的落點(v, Av, A²v, …)
同一條掃描曲線。完全水平、離 0° 與 ±180° 都有距離 —— 沒有任何方向能讓 Av 躺回 v 的那條線上。
| 符號 | 它是什麼 | 現在的值 |
|---|---|---|
| θ | 每作用一次,整個平面被轉幾度 | — |
| r | 每作用一次,長度乘幾倍 | — |
| Δ | 判別式 tr² − 4det。負的=開不出實數根 | — |
| |λ| | 複數特徵值的絕對值(在複數平面上離原點多遠)。 這裡剛好 = r,管「每一圈是漲還是縮」 | — |
| i | 虛數單位(i² = −1)。看到它就代表「這個動作含旋轉」 | — |
這時候特徵值變成複數:判別式 Δ = tr(A)² − 4·det(A) < 0,開根號開不出實數。 翻成人話:這個動作本質上含旋轉,在實數的平面上不存在「不轉向的方向」。 複數的實部管「轉多少」,絕對值 |λ| 管「每一圈是漲還是縮」 —— 振盪、交流電、任何週期系統都是這一類。
所以這一節的結論是:「有沒有骨架」是矩陣自己決定的,不是你找得夠不夠努力。 Δ < 0 就是它在跟你說「我含旋轉,別找了」。
⑩ 數學長怎樣
先寫「怎麼驗證一個 v 是不是特徵向量」—— 這只需要 01 關的餘弦:同一條線上,cos = ±1。
// ① 驗證:Av 跟 v 是不是躺在同一條線上?
const A = [[2, 1], [1, 2]];
const v = { x: 1, y: 1 };
const Av = LAB.M.matVec(A, v); // { x: 3, y: 3 }
const c = LAB.M.cos(v, Av); // 1 → 完全同向,v 是特徵向量
const lam = LAB.M.dot(Av, v) / LAB.M.dot(v, v); // 3 → 倍率 λ(這叫 Rayleigh 商)
// ② 不用猜:直接解特徵多項式 λ² − tr(A)·λ + det(A) = 0
function eigenvalues([[a, b], [c, d]]) {
const tr = a + d; // 跡:對角線相加,等於 λ₁ + λ₂
const det = a * d - b * c; // 行列式:面積放大率,等於 λ₁ · λ₂
const disc = tr * tr - 4 * det; // 判別式 Δ
if (disc < 0) return { real: false }; // 開不出實根 → 這動作含旋轉
const s = Math.sqrt(disc);
return { real: true, l1: (tr + s) / 2, l2: (tr - s) / 2 };
}
(還沒跑)
那個特徵多項式是推出來的,不是背的。把定義搬到一邊:
一個動作能把非零向量壓成 0,代表它把面積壓成 0 —— 也就是 det(A − λI) = 0。把 2×2 的行列式展開,就是 λ² − tr(A)·λ + det(A) = 0。
所以:λ 是「讓這個動作變得可以壓死一個維度」的那個倍率。
順便把兩個老朋友接起來:λ₁ + λ₂ = tr(A)(對角線相加)、 λ₁ · λ₂ = det(A)(面積放大率)。 所以只要看到 det(A) = 0,就知道至少有一個 λ 是 0 —— 有一個方向被壓死了。
⑪ 工程師的「原來如此」
任何「這一步的狀態 = 矩陣 × 上一步的狀態」的系統(控制迴路、遞迴濾波器、RNN、物理模擬), 跑久了的行為完全由最大的 |λ| 決定:
- |λ| < 1 → 每一步都在縮 → 衰減、穩定(震動會停、誤差會收斂)。
- |λ| = 1 → 不縮不漲 → 永遠振盪(LC 電路、單擺)。
- |λ| > 1 → 每一步都在漲 → 爆掉(控制系統失控、RNN 梯度爆炸)。
這就是「譜半徑 (spectral radius)」跟 spectral normalization 在深度學習裡出現的原因: 它在鎖最大的 |λ|,免得訊號一層一層放大到爆表。你在 ⑨ 拖 r 那個滑桿看到的螺旋, 就是這三種命運的現場版。
⑫ 踩坑
特徵向量是一條線,不是一個點。如果 v 是特徵向量,那 2v、−v、100v 全都是
(A(2v) = 2Av = 2λv = λ(2v))。所以「長度」沒有意義,
慣例是取單位長度,正負號也只是慣例(LAB.M.eig2 固定讓 x 分量為正,
免得每次重算方向就翻面)。你在主實驗裡拖 v 拖多長都不影響有沒有找到。
λ 可以是負的,也可以是 0。負的不代表「錯」,代表那個方向被翻到反面 (試試「鏡射」preset,λ = −1)。λ = 0 更嚴重:那個方向被壓死成一個點, 資訊回不來了 —— 而 det(A) = λ₁λ₂ = 0, 這正是「矩陣不可逆」的意思。把「純縮放」的 d 拉到 0 就看得到。
不是每個矩陣都有實特徵向量。旋轉就沒有(⑨)。 看到複數特徵值不要以為算錯了,那是矩陣在告訴你「我含旋轉」。 好消息:對稱矩陣(b = c)保證有兩根實特徵向量,而且互相垂直 —— 共變異數矩陣天生對稱,所以 PCA 永遠不會遇到這個坑。
「兩個特徵值」不等於「兩根特徵向量」。剪切 1101 的特徵值是 λ = 1(重根,兩個),但特徵向量只有 x 軸一根。 這叫退化 (defective),這種矩陣不能對角化(P 湊不出兩個獨立的欄,會是奇異矩陣), 所以 ⑦ 的 preset 裡沒有它。 自己選「剪切」看主實驗的分類欄,它會明講只有一根。
「角度看起來很小」不等於「找到了」。選「剪切」那顆 preset, 隨便把 v 擺在第一象限,你會看到 Av 只歪了 2°–3°,肉眼幾乎重合 —— 但它不是骨架。
因為剪切很接近「什麼都不做」,它在真骨架旁邊有一整片角度都很小的區域。 所以主實驗的判定用兩道門檻:角度要 < 3.5°,而且殘差 |Av − λ̂v| 要小於 |Av| 的 2%。 讀數盤最後一列就是在給你看第二道門檻過了沒。
⑬ 所以,找到骨架之後到底能幹嘛
這是整關最該記住的一頁。你剛剛花力氣找的那幾根方向,換來的是這三件事 —— 每一件你上面都已經玩過了:
把一個動作拆成互不干擾的軸
換一套座標(用骨架當軸),一個歪七扭八的動作就變成「兩個各做各的乘法」, 沒有任何交互作用 —— 這就是 A = PDP−1。 → 回去看 ⑦ 那兩張並排圖
Ak 一秒算完,不用乘 k 次
在骨架上,做 k 次只是 λk。所以「跑一百年會停在哪、 系統會不會爆掉」看一眼 λ 就有答案。PageRank 就是這個。 → 回去看 ⑥ 那張市佔表
找出一坨資料的主軸
把資料的共變異數矩陣 C 丟進來找骨架,浮出來的兩根垂直方向就是資料自己的座標軸 —— 那是 PCA,降維、embedding、eigenfaces 全靠它。 → 05 關的掃描實驗
一句話收口:特徵向量把「一個看不懂的矩陣」翻譯成 「幾個方向 + 每個方向一個倍率」。一旦翻譯完成, 預測、拆解、找主軸這三件事就都只剩乘法而已。
⑭ 本頁符號總表(看到不認識的就回來這裡)
| 符號 | 怎麼讀 / 它是什麼 | 在哪一節解釋 |
|---|---|---|
| A | 矩陣,也就是「一台搬運機/一個動作」。四格叫 a b(上排)c d(下排) | ② |
| e₁ , e₂ | 兩根基礎箭頭 (1,0) 與 (0,1)。下標是「第幾根」 | ② |
| Ae₁ , Ae₂ | 基礎箭頭搬家後的新位置 = 矩陣的第一欄/第二欄 | ② |
| v | 你手上那個方向(非零向量)。長度不影響任何結論 | 階梯 1 |
| Av | v 被 A 搬完的位置。讀作「A 作用在 v 上」 | 階梯 1 |
| θv | v 的角度(從 x 軸逆時針數)= 掃描曲線的橫軸 | 階梯 4 |
| φ | phi。階梯 2 那把探針扇子整體轉了幾度 | 階梯 2 |
| λ | lambda。倍率:骨架方向被拉長/壓短幾倍。負號=翻面 | ③ |
| λ₁ , λ₂ | 兩個特徵值,習慣上 |λ₁| ≥ |λ₂|(大的排前面) | 階梯 4 |
| λ̂ | lambda hat。帽子=現場量出來的估計值,用手上這根 v 硬算的倍率 (Av·v)/(v·v)。v 不是骨架時它是假的 | 階梯 4 |
| |v| | 兩條直線=「取長度」。|Av| 同理 | 階梯 1 |
| tr(A) | trace,跡:a + d(對角線相加)。等於 λ₁ + λ₂ | 階梯 4 |
| det(A) | 行列式:ad − bc,就是面積放大率。等於 λ₁ · λ₂ | 階梯 4 · ⑦ |
| Δ | delta,判別式 = tr² − 4det。就是二次公式根號裡那一坨;負的=沒有實特徵向量 | 階梯 4 · ⑨ |
| 殘差 | |Av − λ̂v|:扣掉「最貼近的純縮放」之後還剩多少。骨架上會剩 0 | 階梯 4 · 坑 5 |
| T | transition,轉移矩陣。每一欄=這家的人下個月會跑去哪,每欄加起來 = 1 | ⑥ |
| s₀ | 第 0 個月的市佔(下標就是第幾個月)。s₁ = 第 1 個月、sₖ = 第 k 個月 | ⑥ |
| k | 第幾步 / 第幾個月。Ak = 做了 k 次 | ⑥ |
| d , d₀ | 離穩態的距離;d₀ 是一開始的距離 | ⑥ |
| c₁ , c₂ | 把 s₀ 拆成 c₁v₁ + c₂v₂ 時的兩個配方數字 | ⑥ |
| P | 翻譯機:兩根特徵向量一欄一欄擺成的矩陣(骨架座標 → 標準座標) | ⑦ |
| D | 對角矩陣:只有對角線有東西(λ₁、λ₂),代表「兩軸各乘一個數、互不干擾」 | ⑦ |
| P⁻¹ | 反向翻譯機(−1 = 反過來做):標準座標 → 骨架座標 | ⑦ |
| I | 單位矩陣:什麼都不做的動作(對角線全 1) | ⑩ |
| θ , r | ⑨ 那台機器的參數:每次轉幾度、每次長度乘幾倍 | ⑨ |
| i | 虛數單位(i² = −1)。特徵值帶 i = 這個動作含旋轉 | ⑨ |
| C | 共變異數矩陣:一坨資料的形狀壓成 2×2 | ⑧ · 03 關 |
| ddof = 1 | 算變異數時分母用 n−1(樣本版)。全站統一 | ⑧ |
⑮ 這關回答了什麼
特徵值 / 特徵向量到底是什麼?
矩陣是一個動作。特徵向量是「這個動作沒有把它轉走」的那幾個方向, 特徵值 λ 是那個方向上的倍率。
橡皮膜版本:拉一張畫滿箭頭的橡皮膜,大多數箭頭又長又歪, 只有少數幾根「原地變長/變短、方向不動」—— 那幾根是特徵向量,變長幾倍就是特徵值。 式子只有一行:Av = λv,見 ④。
那個矩陣的四個數字到底是怎麼來的?我看不出它為什麼長那樣
每一欄就是一根基礎箭頭搬家後的新位置。 A = [ Ae₁ │ Ae₂ ]:第一欄是「(1,0) 被搬到哪」、第二欄是「(0,1) 被搬到哪」。
因為任何點都能寫成 x·e₁ + y·e₂,而這台機器不拆散加法, 所以知道那兩根去哪,就等於知道全部的點去哪 —— 整台機器只需要四個數字。 在 ② 直接拖那兩根箭頭,四格數字會跟著跳。
主實驗那 36 個點是幹嘛的?畫出來那一圈東西是什麼?
它們不是資料。它們是排在單位圓上、每 10° 一根的探針(10° × 36 = 360°), 目的是「一次把所有方向都試一遍」,看哪幾個方向沒被歪掉。
它們搬完之後排成的那圈橢圓只是落點的輪廓,是背景參考,不是主角。 真正要看的是那幾條沿著自己半徑滑動的細線 —— 那才是骨架。 完整的一步步版本在 階梯 3。
上面那條掃描曲線是什麼?怎麼讀?
它是一張成績單:把「v 擺在某個角度 → Av 被歪掉幾度」這件事, 從 0° 到 360° 全部算一遍畫成線。
- 橫軸=v 擺在哪個角度(跟左圖藍箭頭的角度是同一件事,藍光標會跟著跑)。
- 縱軸=Av 被歪掉幾度。
- 碰到 0° 綠線=完全沒歪(λ > 0);碰到 ±180° 粉線=翻面但同一條線(λ < 0)。
- 有幾個交點=有幾根骨架(一根骨架的正反兩端各算一個交點)。碰不到 = 沒有骨架。
詳細讀法在 階梯 4 那張綠色說明卡。
為什麼要花力氣去找這種特殊向量?找到之後能幹嘛?
因為找到骨架之後,一個矩陣就從「四個看不懂的數字」變成「兩個獨立的乘法」。具體三條:
- 把動作拆成互不干擾的軸:A = PDP−1, 換座標之後歪斜消失 → ⑦。
- 預測長期行為:Ak 在骨架上只是 λk,不用真的乘 k 次 → ⑥(PageRank 就是這個)。
- 找出資料變異最大的主軸:對共變異數矩陣做這件事,就是 PCA → ⑧ 與 05 關。
整理版在 ⑬。
s₀、sₖ、T、λ̂ 這些符號各是什麼?
T=轉移矩陣,每一欄是「這家的人下個月會跑去哪」。 s₀=第 0 個月(一開始)的市佔,下標就是第幾個月;sₖ=第 k 個月的市佔。 λ̂=帶帽子表示「現場量出來的估計值」,用你手上那根 v 硬算的倍率, v 不是骨架的時候它是假的。
全部符號整理在 ⑭ 本頁符號總表,每一列都標了在哪一節解釋。
特徵值代表什麼?負的、0、大於 1 各是什麼意思?
就是倍率,只有這一件事。
- λ > 1:這個方向被拉長。
- 0 < λ < 1:被壓短(方向還是原方向)。
- λ < 0:被翻到反面,還躺在同一條線上(λ = −1 就是純鏡射)。
- λ = 0:這個方向被壓死成一個點,等於少了一個維度,矩陣不可逆 (因為 det = λ₁λ₂ = 0)。
- 反覆作用時只看 |λ|:大於 1 爆掉、小於 1 衰減 → ⑪。
什麼時候會用到特徵值?
只要你的問題裡有「同一個矩陣被反覆作用」或「想知道一坨東西的主要方向」,就是它。
網頁排名(PageRank)、馬可夫鏈的穩態、控制系統會不會失控、橋樑與機殼的共振頻率、 RNN 的梯度爆炸/消失、PCA 與 embedding 降維、圖分割(spectral clustering)、 推薦系統的矩陣分解 —— 全部都在問「這個矩陣的骨架是什麼」。
是不是每個矩陣都有特徵向量?
不是。旋轉矩陣在實數域裡一根都沒有(每個方向都被轉走),特徵值是複數 → ⑨。
還有一種更陰的:剪切 1101 有實特徵值(λ = 1 重根) 卻只有一根特徵向量,這種叫退化,不能對角化 → 坑 4。
但對稱矩陣一定有兩根實特徵向量,而且互相垂直 —— 共變異數矩陣正是對稱的, 所以做 PCA 的時候這個坑不存在。
這跟資料的特徵向量是同一件事嗎?
是同一件事,但要先看清楚順序:特徵向量是矩陣才有的東西,一坨資料點沒有特徵向量。
流程是:資料 → 算出共變異數矩陣(把形狀壓成 2×2)→ 對那個矩陣找特徵向量 → 得到的方向就是資料的主軸。 所以「資料的特徵向量」是簡稱,中間永遠站著一個矩陣。
先在 ⑧ 按那顆按鈕看一眼,完整版在 05 關;容易搞混的地方另外整理在 全景 01 關的對照表。