MODULE 01 — DOT PRODUCT · COSINE · ORTHOGONALITY

內積問的是:你們朝同一邊嗎

玩完這關,你會用一個數字判斷兩排數字有多同步 —— 並且知道這個數字什麼時候會騙你。

① 你手上的問題:程式不會「看」

你有一張評分表:每個使用者對每部電影打了幾分。你想做兩件事 —— 找出口味像的人互相推薦; 再拿兩支股票的每日報酬,判斷它們是不是一起漲、一起跌。

你自己瞄一眼就知道答案:這兩排數字一起上一起下,那兩排剛好相反。 問題是你的程式不會「看」。它需要一個函式:吃兩排數字,吐一個數字 —— 而且這個數字要能回答「他們朝同一邊嗎?有多用力?」,還要能拿去排序、能塞進 index、能一次算一百萬對。

寫 if/else 去比大小是死路:兩部電影還行,兩千部呢?你要的是一條 O(n) 的算式。

這關給你的工具

它叫內積(dot product)。兩排數字進去,一個數字出來: 正的=朝同一邊,負的=反著走,=互不相干。 整關就在把這句話變成你能默寫出來的東西。

上一關留下的洞

這是第一關,沒有上一關,可以獨立看完。 但它是整套教材的地基:後面的變異數共變異數PCA,全部都是這一個數字換個名字。這頁的直覺不釘死,後面每一關都會鬆。

② 從影子開始:你國中就會算內積了

太陽在正上方,光線垂直往下照。你把一根棍子斜插在地上,地上會出現一道影子。 棍子越挺直,影子越短;棍子越貼地,影子越長。影子的長度只跟「棍子有多斜」有關 —— 這句話就是 cos 在做的事,數學課本只是把它寫成符號。

這一頁只有六個符號,先一次講完

後面每張圖、每個讀數盤、每顆按鈕上出現的字母就這幾個。看到不認識的回來對一下:

  • u —— 第一個向量(本頁一律藍色)。這一段裡它就是那根斜插在地上的棍子; 到了後面的推薦系統例子,它是「某個使用者的評分」。
  • v —— 第二個向量(一律橘色),是你拿來當尺去量的那一根。 這一段裡它就是地面的方向
  • |u||v| —— 兩側那對直線讀作「長度」。 |u| 就是 u 這根箭頭有多長,用畢氏定理量出來(√(u1² + u2²))。 長度永遠 ≥ 0,不會有負的。
  • θ —— 希臘字母 theta,就是 u 跟 v 之間的夾角,範圍 0° 到 180°。
  • cos θ —— 夾角的餘弦,一個 −1 到 1 之間的數字。白話:影子佔原長的幾成。 0° 時是 1(影子=全長),90° 時是 0(沒影子),180° 時是 −1(影子等長但在反方向)。
  • u · v —— 讀作「u dot v」,就是這關的主角內積。 中間那個點不是小數點、也不是普通乘號,是「內積」這個運算的符號;它吃兩個向量、吐一個數字

現在地上另外躺一根棍子 v,它決定了「地面的方向」。 把影子的長度乘上 |v|,你得到一塊長方形的面積。 拖動下面的滑桿,看那塊面積怎麼變 —— 那塊面積就是內積

實驗:拖傾角,看那塊面積怎麼變

這張圖在幹嘛

你會看到什麼:藍箭頭 u 是斜插在地上的棍子,橘箭頭 v 是地面的方向, 綠色粗線是 u 打在地面上的影子(刻意畫在地面下方一點,純粹為了不跟箭頭疊在一起), 影子下面那塊半透明長方形的面積就是內積 u·v。 圖上方那幾條灰虛線是垂直照下來的陽光,弧線上的數字是目前的 θ

你可以動什麼:只有一根滑桿 —— 棍子的傾角 θ(0° 是完全貼著 v 躺平, 90° 是直挺挺站著,一路可以推到 170° 倒向反邊)。兩根的長度固定不動: |u| = 3.40、|v| = 3.60。

要看出什麼:θ 越小 → 影子越長 → 長方形越大 → 內積越大;推過 90° 影子翻到 v 的反側, 長方形往反邊長,內積變負。看懂之後你要能講出這一句: 內積只由「兩根有多同向」跟「兩根各自多長」這兩件事決定

藍色是斜插的棍子 u,橘色是地面方向 v,綠色粗線是影子, 下面那塊半透明長方形就是 影子 × |v|。面積畫在地面下方,純粹是為了不跟棍子疊在一起。

棍子的傾角 θ(跟地面方向的夾角)35°
u·v = +10.03
|u|(棍子長度)3.40
|v|(地面那根)3.60
cos θ0.819
影子 = |u| cos θ2.79
面積 = 影子 × |v|10.03
在說什麼

推過 90°:影子跑到對面去

把滑桿推過 90°,棍子倒向另一邊,影子就跑到 v反方向去了。 長度帶了負號,面積也跟著變負 —— 這就是「內積是負的」的物理意義,不是規定,是影子真的跑到對面去了。 推到剛好 90°,棍子直挺挺站著,影子縮成一個點:面積 0。

關鍵一句

內積 =「u 在 v 上的影子」×「v 的長度」。 所以它一個數字裡塞了兩件事:方向合不合(影子)跟規模多大(兩根的長度)。 這是它強的地方,也是它會騙你的地方 —— 下一段就把這兩件事拆開。

③ 主實驗:兩條向量,一個數字

直接拖。兩個圓點分別是 uv 的箭頭尖端。 拖的時候盯著大數字看它換號、換色,也盯著那條虛線 —— 那是 u 落在 v 上的影子,跟上一段的棍子完全是同一件事。

這張圖在幹嘛

你會看到什麼:藍箭頭 u橘箭頭 v 兩條向量; 橘色細虛線是 v 的延長線(影子只會落在這條線上);綠色粗線是影子本體, 被平移到旁邊一點才不會壓住 v;灰虛線是 u 垂直打下來的那條路徑,落腳處的小方角就是直角記號; 原點附近那條細弧線是夾角 θ

你可以動什麼:用滑鼠拖藍點或橘點(兩個點分別是 u、v 的箭頭尖端,可以拖到任何位置); 懶得拖就按上面四顆按鈕:同向/垂直/反向/一長一短,直接跳到典型狀況。

要看出什麼:大數字 u·v正負號, 跟「影子落在 v 的哪一側」永遠是同一件事。拖到接近垂直時你會看到: 兩條向量的座標明明都不是 0,u·v 卻趨近 0 —— 相乘的兩項互相抵消掉了。

拖曳藍點或橘點改變兩條向量。虛線是 u 垂直落到 v 那條線上的路徑, 小方角是直角記號:影子永遠是「垂直打下來」量到的。

u·v = +0.00
u(0, 0)
v(0, 0)
|u|0.00
|v|0.00
cos θ0.000
夾角 θ0.0°
u 在 v 上的影子0.00
解讀

按「垂直」那顆按鈕:u = (4, 2)v = (−1, 2), 內積剛好 4×(−1) + 2×2 = 0。兩條向量的數字都不是 0,乘出來的兩項互相抵消 —— 這種「抵消」是後面 正交 那段的全部重點。

④ 為什麼要把長度除掉:內積會被「音量」放大

三個使用者,兩部電影(動作片、愛情片)。他們的評分向量長這樣:

拿「跟熱情派的內積」當相似度分數,冷淡派立刻吃虧: 5×2 + 4×1.6 = 16.4,而熱情派跟自己是 41。 可是這兩人的口味明明完全相同,差的只是評分習慣 —— 一個大方、一個小氣。 把長度除掉(cos θ),冷淡派的分數立刻變成 1.000:滿分同向。

實驗:整體評分放大,看誰會動

這張圖在幹嘛

你會看到什麼:三根箭頭=三個人對兩部電影的評分,橫軸是動作片分數、縱軸是愛情片分數: 熱情派(藍,基準)、冷淡派(橘)、口味相反派(青)。 那條細虛線是被放大那個人的方向射線 —— 它從原點出發、穿過那個人原本的評分點。

你可以動什麼:先用兩顆按鈕選「要放大誰」(冷淡派或口味相反派), 再拉滑桿 k(0.2× 到 3×)把那個人的評分整體乘上 kk 就是「這個人給分習慣的大方程度」,基準的熱情派永遠不動。

要看出什麼:k 一動,那根箭頭只在同一條射線上伸長縮短,方向從頭到尾沒變過。 所以下面表格裡 u·v 跟著 k 暴衝, cos θ 跟夾角紋風不動。結論一句:內積會被音量放大,cos 只問方向。

三條箭頭是三個人的評分向量。虛線是被放大那個人的方向射線 —— 不管你把評分放大幾倍,箭頭永遠沿著同一條射線滑動,方向沒動過。

整體評分放大倍率 k1.00×
u·v(跟熱情派)16.40
cos θ(跟熱情派)1.000
夾角 θ0.0°
解讀

使用者 評分(動作, 愛情) 長度 |v| 跟熱情派 u·v cos θ 夾角

拉滑桿的時候只看兩欄:u·v 暴衝,cos θ 紋風不動。內積被音量放大,cos 只問方向。

誠實揭露

注意口味相反派的 cos 大約 0.766(夾角約 40°),不是負的。 因為評分全是正數,三個人都擠在第一象限,向量之間根本轉不到 90° 以上。 要讓「相反」真的變出負號,得先減掉平均(中心化)再算 —— 那正是第 03 關的相關係數在做的事:中心化之後的 cos。

⑤ 正交代表什麼:兩個互不干擾的問題

內積 = 0 讀作「正交」。工程上它不只是「垂直」這個幾何形狀,它的真正意思是: 這兩個方向互不干擾,可以各自獨立地問、獨立地答。下面這組對照就是在示範這句話。

左邊是一組正交基底 e1e2(互相垂直,長度 1); 右邊是一組斜的基底 f1f2(沒垂直)。 同一個向量 w 在兩組基底底下各有一組座標。

先把這四個下標符號講清楚

e1e2f1f2 不是什麼新東西 —— 它們就是你自己挑的兩根量尺,數學上的正式名字叫「基底」(basis)。 你平常在用的 x 軸、y 軸也只是其中一種挑法,沒有誰規定非用它不可。

  • e1e2 —— 第一組量尺:互相垂直、長度都剛好是 1。字母 e 只是慣例(elementary),下標 1 / 2 就是「第幾根」。 本頁刻意把這兩根轉了個角度、不去對齊 x/y 軸,你才看得出「量尺」跟「畫在圖上的座標格線」是兩件不同的事。
  • f1f2 —— 第二組量尺:長度同樣都是 1,但故意沒有垂直(夾角由下面的滑桿控制)。 f 純粹是為了跟 e 區隔,沒有別的意思。注意 f1e1同一個方向,兩組的差別全在第二根。
  • w —— 被量的那個向量(藍色、可以拖的那個點)。 這裡用 w 而不是 u,是因為這一段沒有「兩個向量做內積」這回事,只有一個向量、兩種量法
  • 座標 (a, b)(s, t) —— 同一個 w 在兩組量尺底下的讀數a =「沿 e1 走幾格」、b =「沿 e2 走幾格」;st 同理,只是換成 f 那一組。兩組讀數描述的是同一個 w,就像同一段長度可以讀成 30 公分、也可以讀成 11.8 英吋。

實驗:同一個 w,兩組基底

這張圖在幹嘛

你會看到什麼:兩張並排的圖,畫的是同一個 藍色向量 w。 左圖的兩根短箭頭是互相垂直的量尺 e₁e₂(原點有小方角=直角), 右圖是刻意歪掉的量尺 f₁f₂(弧線上的數字是它們的實際夾角)。 綠色是 w 被拆出來的兩個分量,兩條綠虛線把它們接成一個平行四邊形回到 w。

你可以動什麼:拖任一張圖的藍點(w 兩邊會同步);拉滑桿f₂f₁ 的夾角(20°–90°);或按三顆按鈕把 w 擺到特定位置。 滑桿只會動右圖 —— 左圖的 e₁、e₂ 從頭到尾一動也沒動。

要看出什麼:拉滑桿的時候你根本沒有碰 w,但右邊的斜座標 (s, t) 變了, 左邊的正交座標 (a, b) 完全不動。 結論一句:斜量尺的兩個座標會互相污染,正交量尺可以各問各的

正交基底 e₁ ⊥ e₂座標 = 兩個內積

斜基底 f₁, f₂ 沒垂直座標 = 解聯立

兩張圖裡的藍點是同一個 w,拖任一邊都會同步。綠色是分解出來的兩個分量, 沿著基底方向串成一個平行四邊形回到 w。左圖那個小方角=直角,右圖是實際夾角。

斜基底的夾角(f₁ 與 f₂)40°
正交座標 (a, b)(0, 0)
a = w·e₁ / b = w·e₂
斜座標 (s, t)(0, 0)
重建誤差(兩邊都應為 0)0.000 / 0.000
解讀

重點在滑桿:你根本沒有動 w,只是把 f2 轉了幾度, 斜座標的 s 就跟著變了。這就是「座標互相污染」—— 在斜基底裡,第一個座標的答案取決於第二根軸放哪裡,你沒辦法只問一半。 正交基底不會有這回事:a 永遠就是 w·e1, 跟 e2 完全無關。把滑桿推到 90°,兩邊數字會對上 —— 斜基底變回正交基底了。

這就是 PCA 為什麼死要正交軸

PCA 要做的事是「幫資料找幾根新軸,然後只留最重要的幾根」。 如果那些軸是斜的,會出三件事:① 每根軸上的座標要解聯立才算得出來(不能一個內積搞定); ② 兩根軸講的資訊會重複計算,「這根軸解釋了 60% 的變異」這種話直接失去意義; ③ 丟掉一根軸造成的誤差沒辦法乾淨地算出來。 軸正交的時候,總變異數會像畢氏定理一樣直接相加(下一段會親眼看到), 每根軸各自獨立、加起來剛好是全部 —— 這才是「主成分」能排名的前提。

最後補一個名字,下一輪會用到:把一整組互相垂直、長度都是 1 的量尺 (就是左圖那組 e1e2) 一根一根當成直欄排進一個矩陣,那個矩陣就叫正交矩陣 Q。 它好用的地方正是你剛剛親手玩過的:座標一個內積就拿到、不必解聯立;而且 Q 乘上去不會改變任何長度與夾角, 只是換一組量尺來讀同一個東西。它為什麼好用,攤開來看在 06 · 空間補完 的 #ortho-matrix

⑥ 投影:把 u 拆成「v 看得到的」跟「v 看不到的」

影子這件事正式的名字叫投影。給你 uv,投影把 u 切成兩塊: 沿著 v 的那一塊(綠色,v 量得到)跟 垂直於 v 的那一塊(紅色,v 完全看不到)。 兩塊拼起來還是 u,而且它們互相垂直 —— 所以長度關係是畢氏定理

符號:proj 怎麼讀

這個動作寫成 projv(u),讀作「u 在 v 上的投影」: proj 是 projection 的縮寫;下標的 v 是「投影到誰身上」(拿誰當尺), 括號裡的 u 是「誰被投影」(被量的東西)。順序不能反 —— proju(v) 是另一件事(改成拿 u 當尺去量 v)。

它吐出來的是一個向量(有方向),這點跟內積不同(內積吐一個數字)。 所以下面讀數盤裡會有三個相關但不同的數字:投影長度是這個向量的帶號長度, 係數是「這個向量等於 v 的幾倍」,垂直分量長度是剩下那塊 v 量不到的長度。

實驗:把 u 切成看得到的跟看不到的

這張圖在幹嘛

你會看到什麼:藍箭頭 u(被拆的那個)、橘箭頭 v(當尺的那個)、 綠箭頭是 u 之中沿著 v 的那一塊(投影向量), 紅色虛線箭頭是剩下垂直於 v 的那一塊(殘差),兩者交會處有直角記號。 綠色接上紅色剛好就是 u;橘色細虛線是 v 的延長線。

你可以動什麼:拖藍點(u)或橘點(v);或按四顆按鈕跳到銳角、鈍角、垂直、平行四種情形。

要看出什麼:綠色永遠貼在 v 那條線上、紅色永遠垂直於它,不管你把 u 拖到哪裡。 把 u 拖到 v 的後方,綠箭頭會翻到 v 的反側、投影長度變成負數。 然後盯讀數盤最後三列:|u 跟「投影² + 垂直²」永遠是同一個數。

拖曳藍點(u)或橘點(v)。綠箭頭是投影向量,紅箭頭是垂直分量(殘差), 兩者交會處有直角記號。把 u 拖到 v 的後方,投影長度會變成負數

投影長度 = +0.00
u·v0.00
|v|0.00
投影長度 = u·v / |v|0.00
係數 = u·v / v·v0.00
垂直分量長度0.00
|u|²0.0000
投影² + 垂直²0.0000
兩者差距0.000000
解讀

畢氏定理藏在最後三列

注意最後三列:|u|投影|² + |垂直|² 永遠是同一個數, 差距那一列你拖到手酸都會是 0.000000(真正的差在 10−15 級,那是浮點數的自尊心問題,不是數學)。 這條就是畢氏定理|u|² = |投影|² + |垂直|²,只是斜邊叫 u。 「把一個東西拆成互相垂直的幾塊,各塊的平方加起來剛好是全部」—— 這句話在 02 關會變成「總變異數怎麼分配」, 在 05 關會變成「留兩維丟一維,誤差是多少」。同一條定理,換三次衣服。

投影跟內積的關係,一句話

投影長度 = 內積 ÷ |v|。反過來說:內積 = 投影長度 × |v|。 內積是「影子」跟「尺的長度」黏在一起的產物; 除以 |v| 得到影子本身,再除以 |u| 得到純方向 —— 那就是 cos θ。三個量是同一件事的三種歸一化程度。

投影這把刀先放這裡,待會用來講共變異數: 兩組資料各自減掉自己的平均之後,就變成兩個向量,「它們有多同步」問的其實就是 「其中一個在另一個身上投出多長的影子」。接法寫在 03 · 共變異數 的 #dot-bridge

⑦ 數學長怎樣

程式版:三行

先看程式。整關的內容就這三行,其他都是包裝:

const dot  = (u, v) => u.x * v.x + u.y * v.y;              // 逐項相乘再加總 —— 就這樣
const cos  = (u, v) => dot(u, v) / (norm(u) * norm(v));    // 把兩邊的「音量」除掉,只剩方向
const proj = (u, v) => scale(v, dot(u, v) / dot(v, v));    // u 沿著 v 的那一塊(向量)

// 維度變多也不用改邏輯,for 迴圈多跑幾圈而已:
const dotN = (a, b) => a.reduce((s, ai, i) => s + ai * b[i], 0);

符號版:一個等號

再看符號版。同一件事的兩種寫法,中間那個等號是這關唯一需要記的東西:

u · v = u1v1 + u2v2 = |u| |v| cos θ 左邊是「怎麼算」(電腦愛的形式),右邊是「什麼意思」(人腦愛的形式)。

每個字母是什麼

逐個符號拆開,一個都不要跳過:

所以那個等號在說:「逐項相乘加總」這種土法煉鋼的算式,算出來的東西剛好等於「影子 × 尺長」。 左邊好寫,右邊好懂。內積之所以有用,就是因為這兩件事是同一個數字。

⑧ 工程師的「原來如此」

語意搜尋 / RAG 的相似度,就是這一頁的 cos

你打 embedding API 拿回一個 1536 維(或 3072 維)的 float 陣列,然後用 cosine similarity 找最像的文件 —— 那個公式跟本頁一模一樣,只是加總從 2 項變成 1536 項,dot(u,v) / (|u||v|) 一個字都沒改。

兩個實務細節現在你能自己推出來: ① 大家都先把 embedding normalize 成長度 1,因為這樣 cos = dot, 查詢就退化成一次矩陣乘法,GPU 一秒幾百萬次 ——「除以長度」這步被搬到寫入時做掉了。 ② 為什麼要用 cos 而不是內積?因為文件長度會灌水:長文件的向量通常比較長, 用內積排序你會一直撈到長文,而不是最相關的文。這就是 那個「音量」問題, 只是主角從小氣的使用者換成一篇落落長的文件。

量化對沖:內積為負是要花錢買的東西

把兩檔標的過去 250 天的日報酬各排成一個 250 維向量(記得先減掉各自的平均)。 兩個向量的內積為=一個漲的日子另一個常常跌=天然避險: 兩檔一起持有,組合的波動會比單押任一檔小。內積且很大=你以為分散了,其實買了同一個東西兩份, 2008 年很多人是這樣死的。

再往下一步:市場中立(delta-neutral)策略在找的,就是一個跟大盤報酬向量正交的部位組合 —— 大盤怎麼走都不影響它。至於這個「減掉平均之後的內積再除以 n−1」有個名字, 叫共變異數;除以兩邊標準差之後叫相關係數。 整個風險模型就是拿一堆這種內積排成矩陣。

為什麼是除以 n−1 而不是 n?那個平均數不是天上掉下來的,是你從同一批資料算出來的, 所以 n 個偏差量裡有一個是被平均數綁死的(它們必須加起來等於 0)—— 真正能自由變動的只有 n−1 個, 這個數字就叫自由度。除以 n−1 是「樣本」版,本站六關全部統一用它。

⑨ 踩坑

坑 1:內積大 ≠ 比較像

內積把「方向合不合」跟「兩邊多大」乘在一起了,所以它可以靠灌長度作弊。 一個到處亂給高分的使用者,跟誰的內積都很大;一篇塞滿關鍵字的長文,跟任何 query 的內積都不低。 要比「像不像」就用 cos θ;內積只在你刻意要把規模算進去的時候用 (例如「這個方向上有多少能量」)。

坑 2:cos 只看方向,所以它分不出「都給高分」跟「都給低分」

[5, 4][2, 1.6]cos = 1.000, 判定「一模一樣」。方向上完全正確 —— 兩人偏好比例相同; 但如果你的產品要的是「找出願意付錢的重度使用者」,cos 剛好把你最在意的那個訊號(給分絕對值)除掉了。 歸一化不是免費的:你除掉的東西,就是你決定不在乎的東西。想同時要方向又要規模,就別只丟一個數字給下游。

坑 3:正交 ≠ 沒關係

內積 0 只代表「在線性這個尺度上互不影響」。非線性關係它完全看不到: 取 x 對稱分佈、y = x², 兩者的內積(中心化之後)會是 0,但 y 明明被 x 完全決定 —— 你知道 x 就知道 y,這叫「沒關係」? 第 03 關會把這個反例畫出來給你看。 所以正確的讀法是:「共變異數 = 0」是沒有線性關係,不是「獨立」。

⑩ 這關回答了什麼

兩個向量做內積,到底代表什麼意思?

它回答一句話:你們朝同一邊嗎,有多用力? 正的=同一邊,負的=反著走,0=互不相干。

具體長相是「u 在 v 上的影子長度 × v 的長度」(見 那塊長方形面積)。 所以它同時吃了兩件事:方向合不合,以及兩邊的規模有多大。 算法上它就是逐項相乘再加總,一行 reduce 寫完,維度多高都一樣。

內積算出來的角度 cosine 代表什麼?為什麼要除以長度?

cos θ = u·v / (|u||v|) 是「影子佔原長的幾成」,範圍固定在 −1 到 1: 1=完全同向,0=垂直,−1=完全相反。它是一個純粹的方向分數,跟兩邊多長無關。

要除以長度,是因為內積會被「音量」放大。 熱情派 [5,4]冷淡派 [2,1.6] 的口味完全相同, 只是後者給分小氣,內積就從 41 掉到 16.4 —— 你會誤判他們不像。 除掉兩邊的長度之後 cos = 1.000,真相才出來(自己拉 的滑桿看: 內積跟著倍率暴衝,cos 一動也不動)。

兩個向量正交(內積 = 0)代表什麼?為什麼工程上很想要正交?

幾何上是垂直;工程上的意思是互不干擾,可以各自獨立地問跟答。 「這個問題的答案完全問不出那個問題的答案」—— u 在 v 上的影子是 0,v 這把尺量不到 u 的任何一點。

想要正交是因為它讓事情可以拆開算: ① 每個座標只要一個內積就得到(a = w·e₁),不必解聯立; ② 改一根軸不會污染另一根軸的座標( 拉那個夾角滑桿就看得到污染長什麼樣); ③ 各分量的平方可以直接相加(畢氏),所以「這根軸解釋了幾成」才講得通, 丟掉一根軸的誤差也算得出來。這三點就是 PCA 堅持要正交軸的全部理由。

什麼是投影向量?投影跟內積是什麼關係?

投影向量是「u 之中沿著 v 的那一塊」,是個向量proj = (u·v / v·v) · v,方向跟 v 同(或反), 剩下那塊 u − proj 垂直於 v,是 v 看不到的殘差。

關係就一條:內積 = 投影長度 × |v|,反過來 投影長度 = 內積 ÷ |v|。 三個量是同一件事的三種歸一化程度 —— 內積(都沒除)→ 投影長度(除 |v|)→ cos θ(再除 |u|)。 注意投影長度是帶號的:鈍角時為負,代表影子落在 v 的反方向( 按「鈍角」那顆按鈕)。 還有那條免費贈品:|u|² = |投影|² + |垂直|²,畢氏定理。

為什麼後面講變異數、共變異數要先學這個?

因為它們就是內積換個名字,不是「用到內積」,是本身就是

  • 變異數=把資料減掉平均得到一個向量 d, 然後 d·d / (n−1) —— 一個向量跟自己做內積,也就是 |d|²。 「有多散」=「這個向量有多長」。
  • 共變異數=兩組資料各自減掉平均得到 dxdy,然後 dx·dy / (n−1) —— 兩個不同向量的內積。正的=一起漲,負的=一個漲一個跌,0=沒有線性關係。
  • 相關係數=上面那個除以兩邊長度,也就是中心化之後的 cos θ。 所以它必然落在 −1 到 1 之間 —— 不是巧合,是 cos 的值域。

再往上疊一層:把這些內積排成 2×2 表格就是共變異數矩陣, 它的特徵向量剛好是資料的主軸,那就是 PCA。整條主線從這頁的一個乘加開始。 下一關就從「一堆數字有多散」接手:02 · 變異數其實是內積

這關留下什麼洞

內積很好用,但它有個前提:你手上得先有兩個「已經是向量」的東西。 可是你最常遇到的資料不是這樣 —— 你只有一堆數字:250 天的股價、3000 個使用者的年齡、一批感測器讀數。 「這一堆數字有多散」要怎麼變成一個向量,好讓我對它做內積?

下一關補02 · 平均、變異數、標準差。 你會看到「減掉平均」這個動作其實是在造一個向量, 而「變異數」就是那個向量跟自己做內積 —— 這頁的公式一個字都不用改。