威威學長|數據分析進階(大學補充)
📚 系列總覽:數據分析系列地圖|⬅️ 上一篇:R² 沒問題,不代表模型沒問題|➡️ 下一篇:正交投影、內積與正規方程
高中講最適直線,流程大概是這樣:公式抄下來,$a=\dfrac{\sum(x_i-\bar x)(y_i-\bar y)}{\sum(x_i-\bar x)^2}$,然後開始按計算機。
為什麼是這條?課本沒說😅
那條公式是怎麼冒出來的?為什麼分子偏偏是「離均差相乘再相加」、分母偏偏是「離均差的平方和」?還有:就算承認它是讓斜率歸零的那個解,憑什麼說它是最小,而不是最大、或者只是個鞍點?推一次大概十分鐘,而且推完你會多知道一件事:這個解到底是極小、極大、還是鞍點。
把「最適」寫成一個能微分的函數
「最適直線」四個字很抽象。要動手算,得先把「適」翻譯成數字。
我們有一組資料 $(x_1,y_1),\dots,(x_n,y_n)$。配一條直線 $\hat y=ax+b$,第 $i$ 個點的預測值是 $ax_i+b$,跟實際值 $y_i$ 的落差是
$$e_i=y_i-(ax_i+b)$$
這個落差叫殘差,白話說就是「這條線在這個點上猜歪了多少」。
希望它整體越小越好。於是(老規矩,跟最適直線入門一樣)把每一筆的落差平方後全部加起來,定義
$$S(a,b)=\sum_{i=1}^{n}\left[\,y_i-(ax_i+b)\,\right]^2$$
這個量叫 SSE(sum of squared errors),誤差平方和。$S$ 越小,直線配得越好。
(歷史小補充:這種「平方和最小」的配線法,是勒讓德 1805 年發表的,高斯則主張自己更早就用過了。兩人為了誰先發明吵了很久,不過對我們來說,重點是它真的很好用🙂)
那為什麼是平方,不是取絕對值?兩個理由。平方函數處處可微,絕對值在原點有個尖角,微積分在那裡會直接滑倒😅 這條路走死。另外,平方讓「差一點點」的懲罰是二次的:一筆差 5 的點,比五筆各差 1 的點還難看,這很符合直覺。
現在注意一件事:$x_i$、$y_i$ 都是已知的常數,會動的只有 $a$ 和 $b$。換句話說,$S$ 是一個「輸入是兩個數字、輸出是一個分數」的函數。想像一張 $a$-$b$ 平面,$S(a,b)$ 是這平面上方的一層曲面,我們要找這層曲面的最低點。最低點在哪?偏微分等於零的地方。
👑 威威說重點:把「最適」翻成數學,就是「找 $S(a,b)$ 的最小值」。一旦寫成函數,剩下的就是大一微積分的標準動作。
對 $b$ 偏微分:那條「必過平均值」是這樣來的
這裡的 $\partial$ 唸作「偏」,意思是「只把其中一個變數當成會動的,其他都當常數」。$x_i$、$y_i$ 是常數,只有 $a$、$b$ 會動。很多人對 $x$ 微分習慣了,手一滑就把 $\sum x_i^2$ 也拿去微,整條式子當場毀掉。動手前先默念一次:「誰是變數、誰是係數。」
用連鎖律偏微分與連鎖律走一遍:
$$\frac{\partial S}{\partial b}=\sum_{i=1}^{n}2\left[\,y_i-(ax_i+b)\,\right]\cdot(-1)=-2\sum_{i=1}^{n}\left(y_i-ax_i-b\right)$$
令它等於零,那個 $-2$ 可以直接扔掉:
$$\sum_{i=1}^{n}\left(y_i-ax_i-b\right)=0$$
拆開:
$$\sum y_i-a\sum x_i-nb=0$$
代入 $\sum y_i=n\bar y$、$\sum x_i=n\bar x$($\bar x$、$\bar y$ 就是這組資料的平均值):
$$n\bar y-an\bar x-nb=0$$
$n$ 約掉,
$$b=\bar y-a\bar x$$
這就是高中課本那條「最適直線必過 $(\bar x,\bar y)$」的來源。 它不是額外的定理,它就是 $\partial S/\partial b=0$ 這一個條件。把上式移項成 $\bar y=a\bar x+b$ 就會看到:把 $x=\bar x$ 代進直線,跑出來的 $y$ 剛好是 $\bar y$。平均點一定在線上。課本隨口帶過的一句性質,背後是一次偏微分。
對 $a$ 偏微分,兩式聯立
換對 $a$ 微分。這次連鎖律要多帶一個 $-x_i$:
$$\frac{\partial S}{\partial a}=\sum_{i=1}^{n}2\left[\,y_i-(ax_i+b)\,\right]\cdot(-x_i)=-2\sum_{i=1}^{n}x_i\left(y_i-ax_i-b\right)$$
等於零,$-2$ 拿掉:
$$\sum x_iy_i-a\sum x_i^2-b\sum x_i=0$$
這裡有兩個未知數 $a$、$b$,看起來要解聯立,但我們剛剛已經有 $b=\bar y-a\bar x$ 了,直接塞進去:
$$\sum x_iy_i-a\sum x_i^2-(\bar y-a\bar x)\sum x_i=0$$
把含 $a$ 的項集中:
$$\sum x_iy_i-\bar y\sum x_i-a\left(\sum x_i^2-\bar x\sum x_i\right)=0$$
用 $\sum x_i=n\bar x$ 整理兩邊:
$$\sum x_iy_i-n\bar x\bar y=a\left(\sum x_i^2-n\bar x^2\right)$$
所以
$$a=\frac{\sum x_iy_i-n\bar x\bar y}{\sum x_i^2-n\bar x^2}$$
看起來跟高中公式長得不一樣。別急,做兩個代數小魔術。先看分子:
$$\sum(x_i-\bar x)(y_i-\bar y)=\sum x_iy_i-\bar y\sum x_i-\bar x\sum y_i+n\bar x\bar y$$
三個 $\bar x\bar y$ 項裡有兩個會被吃掉:
$$=\sum x_iy_i-n\bar x\bar y-n\bar x\bar y+n\bar x\bar y=\sum x_iy_i-n\bar x\bar y$$
再看分母:
$$\sum(x_i-\bar x)^2=\sum x_i^2-2\bar x\sum x_i+n\bar x^2=\sum x_i^2-2n\bar x^2+n\bar x^2=\sum x_i^2-n\bar x^2$$
分子分母都對上了,於是
$$a=\frac{\sum(x_i-\bar x)(y_i-\bar y)}{\sum(x_i-\bar x)^2}$$
這正是高中那條公式。 推完了。
順便讀一下它的長相:分母是 $x$ 的離均差平方和,衡量「$x$ 本身的變動總量」;分子是 $x$、$y$ 離均差乘積和,衡量「$x$ 和 $y$ 同向變動的成分」。相除,就是每一單位 $x$ 的變動能帶動多少 $y$。所以 $a=\dfrac{\mathrm{Cov}(X,Y)}{\mathrm{Var}(X)}$ 這個寫法,比高中版本更能一眼看出在幹嘛。分子分母各做一次「離均差化」,高中那條公式就自動冒出來了。它只是把 $n\bar x\bar y$ 加進去又減掉而已。
一階條件只給你候選人:Hessian 進場
到這裡我們只做了「一階條件」:偏微分等於零。但一階條件只保證它是臨界點:極小、極大、鞍點,三種可能都符合。
高中不會問這件事,因為答案太明顯(資料怎麼配也不會配出「最差」的線)。但大學微積分要求你驗證,而且驗證過程會告訴你 $S$ 這層曲面長什麼樣。
看二階條件。把所有二階偏導數排成一個方陣,這個矩陣叫 Hessian:
$$H=\begin{pmatrix}\dfrac{\partial^2 S}{\partial a^2} & \dfrac{\partial^2 S}{\partial a\,\partial b}\\ \dfrac{\partial^2 S}{\partial b\,\partial a} & \dfrac{\partial^2 S}{\partial b^2}\end{pmatrix}$$
把三個二階偏導算出來。對 $a$ 再微一次:
$$\frac{\partial^2 S}{\partial a^2}=-2\sum x_i\cdot(-x_i)=2\sum x_i^2$$
對 $b$ 再微一次:
$$\frac{\partial^2 S}{\partial b^2}=-2\sum(-1)=2n$$
混合項(先 $a$ 後 $b$、或先 $b$ 後 $a$,結果一樣):
$$\frac{\partial^2 S}{\partial a\,\partial b}=-2\sum x_i\cdot(-1)=2\sum x_i$$
所以
$$H=\begin{pmatrix}2\sum x_i^2 & 2\sum x_i\\ 2\sum x_i & 2n\end{pmatrix}$$
判別式:
$$D=\left(2\sum x_i^2\right)(2n)-\left(2\sum x_i\right)^2=4n\sum x_i^2-4\left(\sum x_i\right)^2=4\left[n\sum x_i^2-\left(\sum x_i\right)^2\right]$$
中括號那一坨,用 $\sum x_i=n\bar x$ 摺一下:
$$n\sum x_i^2-\left(\sum x_i\right)^2=n\sum x_i^2-n^2\bar x^2=n\left(\sum x_i^2-n\bar x^2\right)=n\sum(x_i-\bar x)^2$$
(最後一步就是前面驗證過的分母等式。)於是
$$\boxed{\,D=4n\sum(x_i-\bar x)^2\,}$$
注意同一坨 $\sum(x_i-\bar x)^2$ 出現了兩次:一次在斜率公式的分母,一次藏在 $D$ 裡。迴歸的骨架就是這一坨。
現在看兩個數字。只要 $x_i$ 不全相等,$\sum(x_i-\bar x)^2>0$,所以 $D>0$,當場排除鞍點(鞍點的 $D<0$)。而 $\dfrac{\partial^2 S}{\partial b^2}=2n$,$n$ 是筆數,一定正的,這條排除極大值。
為什麼兩個都要看?因為 $D>0$ 只排除鞍點、$\partial^2S/\partial b^2>0$ 只排除極大,單獨一個都不夠。兩個一起成立,才鎖定「往每個方向都往上翹」,也就是極小。🙂
剩下要靠 Sylvester 判準。詹姆斯·約瑟夫·西爾維斯特(James Joseph Sylvester)是 19 世紀英國數學家,我們現在講的「矩陣」這個詞就是他取的。他證明了一件事:對稱矩陣要正定(白話:不管從哪個方向走,函數值都往上),只要左上角元素大於零、且行列式大於零。這兩個條件在我們這裡都成立,所以 $H$ 正定。臨界點是嚴格極小值。
而且不只是「某個局部極小」。$S$ 是二次函數,二次項的係數矩陣正是 $H$;$H$ 正定代表這層曲面在各方向都往上翹,像一個碗。碗只有一個底,$a$、$b$ 往無窮遠跑的時候 $S$ 也炸到無窮大。所以這個極小值是全區唯一的最小值,不會有第二個山谷跟你搶。(我們找的是谷底,不是山頂,「最差直線」應該沒人想知道🤣)
想再確認的話,算 $H$ 的兩個特徵值:跡(把對角線兩個元素相加)是 $2\sum x_i^2+2n$,行列式是 $D$,兩個都是正的,代表兩個方向都往上翹。用下面那組範例資料算出來會是 118.31 和 1.69,都大於零。1.69 這個方向特別平。沿著它走,$S$ 上升得很慢,這也是為什麼最適直線的參數常常「差一點點但 SSE 幾乎一樣」。
⚠️ 學長的警告:一階條件只給你「候選人」,不保證當選。看到「偏微分等於零」就下結論「這是最小值」的,是大一微積分最常見的扣分點。要驗二階:看 Hessian 正定,或看 $D>0$ 配上 $\partial^2S/\partial b^2>0$。
跑一次數字
假設有五位學生,記錄他們的「每週練習題數(以十題為單位)」與「小考成績(以十分為單位)」:
| $i$ | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| $x_i$(練習量) | 1 | 2 | 3 | 4 | 5 |
| $y_i$(成績) | 2 | 4 | 5 | 4 | 5 |
第一步,算五個總和。
$$\sum x_i=15,\quad \sum y_i=20,\quad \sum x_i^2=55,\quad \sum x_iy_i=66,\quad n=5$$
$$\bar x=\frac{15}{5}=3,\qquad \bar y=\frac{20}{5}=4$$
第二步,算離均差的兩個量。
$$\sum(x_i-\bar x)^2=55-5\cdot 3^2=55-45=10$$
$$\sum(x_i-\bar x)(y_i-\bar y)=66-5\cdot 3\cdot 4=66-60=6$$
(第二條用的就是前面推導時驗過的那個等式 $\sum x_iy_i-n\bar x\bar y$。)
第三步,套公式。
$$a=\frac{6}{10}=0.6,\qquad b=\bar y-a\bar x=4-0.6\cdot 3=4-1.8=2.2$$
最適直線:$\hat y=0.6x+2.2$。
第四步,把一階條件代回去檢驗。 這是推導完一定要做的動作,不然你只是換一個方式相信公式。兩條偏微分式子前面那個 $-2$ 在等於零時沒差,直接看括號裡的一坨:
$$\sum x_iy_i-a\sum x_i^2-b\sum x_i=66-0.6\cdot 55-2.2\cdot 15=66-33-33=0\ \checkmark$$
$$\sum y_i-a\sum x_i-nb=20-0.6\cdot 15-5\cdot 2.2=20-9-11=0\ \checkmark$$
兩個都歸零,這條直線確實是臨界點。
第五步,二階檢定。
$$\frac{\partial^2 S}{\partial a^2}=2\cdot 55=110,\qquad \frac{\partial^2 S}{\partial a\,\partial b}=2\cdot 15=30,\qquad \frac{\partial^2 S}{\partial b^2}=2\cdot 5=10$$
$$D=110\cdot 10-30^2=1100-900=200>0$$
對照公式:$4n\sum(x_i-\bar x)^2=4\cdot 5\cdot 10=200$ ✓
$D>0$ 且 $\partial^2S/\partial b^2=10>0$,Hessian 正定。確認是極小值。
第六步,算 SSE 並跟別的直線比。 殘差表:
| $x_i$ | $y_i$ | $\hat y_i=0.6x_i+2.2$ | $e_i$ | $e_i^2$ |
|---|---|---|---|---|
| 1 | 2 | 2.8 | $-0.8$ | 0.64 |
| 2 | 4 | 3.4 | $0.6$ | 0.36 |
| 3 | 5 | 4.0 | $1.0$ | 1.00 |
| 4 | 4 | 4.6 | $-0.6$ | 0.36 |
| 5 | 5 | 5.2 | $-0.2$ | 0.04 |
$$S(0.6,\;2.2)=0.64+0.36+1.00+0.36+0.04=2.4$$
換兩條附近的直線試試。取 $(a,b)=(0.5,2.4)$:
$$S(0.5,2.4)=0.81+0.36+1.21+0.16+0.01=2.55$$
再取 $(0.6,2.0)$:
$$S(0.6,2.0)=0.36+0.64+1.44+0.16+0=2.6$$
兩個都比 $2.4$ 大。最小值就是最小值,附近亂動只會更差。(順帶一提,殘差加起來 $-0.8+0.6+1.0-0.6-0.2=0$,這正是 $\partial S/\partial b=0$ 的意思:殘差和為零。)
這樣一輪跑完,你應該有感覺了:這條線是「解出來的」,不是「背來的」😁
把手上的資料換成你自己的一組五筆資料(任何兩欄數字都行),把六步走一遍:算五個總和、算離均差那兩個量、套公式、把 $a,b$ 代回兩條一階條件看有沒有歸零、算 $D$、再算 SSE。第五步那個 $D$ 如果對不上 $4n\sum(x_i-\bar x)^2$,通常是 $n$ 或 $\bar x$ 抄錯了一處。
這篇從頭到尾都在微分。同一件事用線性代數看是一個幾何問題:把 $y$ 投影到 $X$ 的行空間上。下一篇最適直線的線性代數證明換個視角,用內積再證一次,順便解釋為什麼叫「正交」投影。而那兩條偏微分式子,等你之後碰到多元迴歸多元迴歸、梯度下降,會發現還是同一招,只是矩陣變大而已。