彎得剛剛好:從多項式到 GAM

ISLP 第 7 章 — 對應講義 07
多項式|階梯函數|基底函數|迴歸樣條|自然樣條|平滑樣條|局部迴歸|GAM
向下捲動開始互動↓
📌 本頁使用方式(ISLP Ch.7|講義 07)

① 依序閱讀:每節先讀說明;遇到互動元件時,先預測結果,再操作驗證。 ② 對照來源:章節旁標示課本章節與講義主題,正文保留公式、條件與算例;計算細節、完整實作與證明預設收合,可按需要展開。來源標記可查原教材。 ③ 檢查理解:答錯時先看回饋,再回到相關說明;標為延伸的內容可留待第二輪。 ④ 最後翻關鍵詞彙卡自測術語,並用 重點速查與來源查閱。

教科書:An Introduction to Statistical Learning with Applications in Python(ISLP);
進階參考:The Elements of Statistical Learning(ESL)。章節旁的來源標記可點到本頁書目。

CONTENTS · 內容目錄
PROLOGUE · 開場

以可解讀的函數描述非線性關係 教科書 · 第 7 章開頭講義 07

到目前為止的每一個模型都長成 $y = \beta_0 + \beta_1 x_1 + \cdots + \beta_p x_p$。 它好用、好解讀、推論工具齊全,但它假設「x 每增加一單位,y 就固定增加 $\beta$」。 實際資料的關係未必是線性的。Wage 資料裡薪水隨年齡先升後降, 用一條直線去擬合,你會得到一個「年齡愈大薪水愈高」的結論,然後在 60 歲那群人身上產生很大的預測誤差。

要放寬線性假設,最極端的做法是丟掉參數化模型(KNN、樹、核方法)。 但那樣同時丟掉了「這個變數對 y 的影響長什麼樣」這種可以畫出來、可以講給人聽的東西。 這一章走的是中間路線:把 x 換成一組在估係數之前就決定好的轉換 $b_1(x), \ldots, b_K(x)$,模型對係數還是線性的。所以第 3 章的最小平方可以照用,只是預測變數換人了。

六條路線,兩條主線 1. 多項式迴歸:加 x²、x³…,全域一條曲線。
2. 階梯函數:把 x 切段,每段一個常數。
3. 迴歸樣條:分段三次多項式,在節點上接得平滑。
4. 自然樣條:樣條再加兩端線性約束,邊界穩定得多。
5. 平滑樣條:不選節點,直接懲罰彎曲程度。
6. 局部迴歸:每個點只看鄰居,加權擬合一條線。
主線一:基底展開。前四個都是選好基底,再用最小平方估係數(§7.3)。平滑樣條用的也是基底,只是多了懲罰;GAM 則是每個變數各一組基底,再加起來(§7.7)。
主線二:線性平滑器。固定調整參數時,六種方法的擬合值都能寫成 $\hat y=Sy$,自由度都用 $\operatorname{tr}S$ 衡量(穩健化的局部迴歸除外)。局部迴歸沒有一組全域基底,但也屬於這一條。
比較各種方法的彈性、邊界與調整參數
方法彈性怎麼來的由什麼控制邊界行為一句話
多項式拉高次數 dd(整數)很糟,可能大幅振盪最省事,但 d > 4 就別碰
階梯函數多切幾段切點數 K還可以(常數)沒有自然切點就會漏掉趨勢
立方樣條多加節點內部節點數 K(df = K+4)偏糟,信賴區間可能很寬次數固定 3,靠節點取得彈性
自然樣條多加節點內部節點數 K(df = K+2)好,兩端是直線同樣的彈性、更穩的兩端
平滑樣條調 λ有效自由度 dfλ(連續)好(兩端線性)不必選節點,只要選 λ
局部迴歸調鄰域大小跨距 s變異偏大(單邊資料),局部直線可修正部分偏差每次預測都要用到全部資料

本章依照這些路線介紹各種方法,搭配例子與互動觀察擬合結果。 先猜結果再按按鈕,再對照畫面,檢查自己對參數效果的理解。

QUIZ · 為什麼它還算線性模型

把 age、age²、age³、age⁴ 一起丟進迴歸,為什麼書上還說這是「一般的線性迴歸模型」?

(A) 因為擬合出來的曲線在資料範圍內仍然近似一條直線
(B) 因為 age² 與 age³ 跟 age 高度相關,實際上只有一個自由的預測變數
(C) 因為模型對係數是線性的;x 的轉換是事先固定、已知的,只是換了預測變數
如何在這些方法之間選擇

先問三件事:需要解讀單一變數的形狀嗎?兩端外推合理嗎?資料是否足以估計交互作用?多項式牽動整條曲線,樣條讓變化比較局部,局部迴歸在每個目標位置重新估計,GAM 則把多個一維效果加起來。選擇方法時,還要檢查曲線在新資料上的表現;次數、自由度、平滑參數與跨距應用保留資料或 CV 比較。

講義連結的表格資料模型比較研究提醒我們:演算法的表現依資料型態、樣本數、調參預算而變。這裡先建立可解讀的非線性工具;樹與深度學習的比較不能直接用來判定 Wage 的最佳方法。對相同資料和切分比較預測誤差,再把邊界、可解讀性及計算需求一起考量,才能選出適合資料與任務的方法。

PART 01 · 多項式迴歸

高次多項式的擬合與邊界變動 教科書 · 第 7.1 節講義 07

最直接的放寬:把直線換成 d 次多項式。

$$y_i = \beta_0 + \beta_1 x_i + \beta_2 x_i^2 + \beta_3 x_i^3 + \cdots + \beta_d x_i^d + \varepsilon_i \tag{7.1}$$

多項式對係數仍是線性的。解讀時看整條擬合曲線:個別係數會隨基底選擇改變,曲線與預測才是這裡的重點。

深入計算:係數、基底與標準誤

信賴區間怎麼來的?在某個 $x_0$ 上,擬合值是 $\hat f(x_0) = \hat\beta_0 + \hat\beta_1 x_0 + \cdots + \hat\beta_d x_0^d$。 令 $\ell_0 = (1, x_0, x_0^2, \ldots, x_0^d)^{\mathsf T}$、$\hat C$ 是 $\hat\beta$ 的 共變異數矩陣,那麼

$$\widehat{\operatorname{Var}}\left[\hat f(x_0)\right] = \ell_0^{\mathsf T} \hat C \, \ell_0$$

把每個 $x_0$ 的 $\hat f(x_0) \pm 2\,\mathrm{SE}$ 連起來,就是圖 7.1 那兩條虛線。 這個公式是整節的關鍵:常態線性模型下它等於 $\hat\sigma^2\ell_0^{\mathsf T}(B^{\mathsf T}B)^{-1}\ell_0$, 其中 $B$ 是基底的設計矩陣。邊界附近的 $x_0$ 槓桿值大,次數愈高愈明顯,所以變異集中在兩端。下面把滑桿推到 15 就看得到。

同一條曲線,為什麼需要整個共變異數矩陣?

Wage 的四次年齡模型把 $b(x)=(1,x,x^2,x^3,x^4)^T$ 作為基底。在指定年齡 $x_0$,預測的平均薪資是 $b(x_0)^T\hat\beta$。係數估計通常彼此相關;把各係數標準誤分別乘上 $x_0$ 的冪次再相加,會漏掉共變異項,並不等於預測曲線的標準誤。

區間的完整推導,以及線性和 logistic 的對照,放在本節最後的收合。

Lab 的 plot_wage_fit 使用 get_prediction 計算平均擬合的標準誤,再畫 $\hat f\pm2\,\mathrm{SE}$。這是逐點近似區間:每個固定年齡各自有涵蓋率,沒有保證整條未知曲線同時位於帶內。summary_frame 的 mean_ci_* 和 obs_ci_* 分別回答平均與個別觀測的問題。

正交多項式、ANOVA 與交叉驗證

Lab 的 poly('age', degree=4) 用正交多項式改善數值條件;把相同次數的原始冪次改用另一組滿秩基底表示,不會改變張成的模型空間。因此擬合值相同,係數卻不同,不能把正交基底的第二欄係數讀成年齡平方的係數。新資料必須由訓練時已擬合的轉換器 transform,不能各自重新正交化。

anova_lm 比較 1–5 次的巢狀模型。由低次升至高次時,新增項的 RSS 降幅相對於殘差變異形成 F 統計量;只加一個係數時,該 F 等於相應 t 統計量的平方。它是在指定模型、誤差條件下檢定新增項,不是直接估計泛化誤差。CV 則在每折重新擬合基底和模型,再比較留出觀測的損失;以全資料的轉換器先處理各折,會把應由訓練折決定的資訊帶入驗證折。

›把滑桿從 1 推到 15,比較兩端與中央的信賴區間寬度(淡藍)。
次數 d4
課程/lab 資料
怎麼看這張圖 圖 7.1
上圖:灰點是 Wage 的全部 3000 筆觀察,紅線與淡藍帶是用全部 3000 筆擬合出來的 d 次多項式與 95% 信賴區間。
目前設定
次數 d4
方法示範與原 Lab
擬合多項式
poly_age = MS([poly('age', degree=4)]).fit(Wage) M = sm.OLS(y, poly_age.transform(Wage)).fit()
來源:Ch07-nonlin-lab-zh.ipynb
比較多項式次數
models = [MS([poly('age', degree=d)]) for d in range(1, 6)] Xs = [model.fit_transform(Wage) for model in models] anova_lm(*[sm.OLS(y, X_).fit() for X_ in Xs])
來源:Ch07-nonlin-lab-zh.ipynb
多項式邏輯斯迴歸
X = poly_age.transform(Wage) high_earn = Wage['high_earn'] = y > 250 # shorthand glm = sm.GLM(y > 250, X, family=sm.families.Binomial()) B = glm.fit()
來源:Ch07-nonlin-lab-zh.ipynb
信賴區間的推導:線性迴歸與 logistic 迴歸

兩種迴歸共用同一個骨架

令 $x_0=(1,x_{01},\ldots,x_{0p})^{\mathsf T}$;多項式與樣條只是把它換成基底向量 $b(x_0)$。兩種迴歸都先估線性預測量 $\hat\eta_0=x_0^{\mathsf T}\hat\beta$。它是係數的線性組合,所以 $\operatorname{Var}(\hat\eta_0)=x_0^{\mathsf T}\operatorname{Cov}(\hat\beta)x_0$,標準誤也就有了。不同的只有三處:係數的共變異數矩陣、用哪個分位數、最後要不要轉回機率。這裡 $q$ 是含截距的係數個數。

多元線性迴歸多元 logistic 迴歸
估計目標$E[Y\mid x_0]$$\pi_0=P(Y=1\mid x_0)$
線性預測量$\hat\eta_0=x_0^{\mathsf T}\hat\beta$$\hat\eta_0=x_0^{\mathsf T}\hat\beta$(logit 尺度)
標準誤$\sqrt{x_0^{\mathsf T}\hat Vx_0}$$\sqrt{x_0^{\mathsf T}\hat Vx_0}$
$\hat V=\widehat{\operatorname{Cov}}(\hat\beta)$$\hat\sigma^2(X^{\mathsf T}X)^{-1}$,$\hat\sigma^2=\mathrm{RSS}/(n-q)$$(X^{\mathsf T}\hat WX)^{-1}$,$\hat W=\operatorname{diag}\{\hat\pi_i(1-\hat\pi_i)\}$
區間的分位數$t_{n-q}$(常態誤差下是精確的)標準常態,1.96(大樣本近似)
最後一步不用轉換兩端各代入 inverse logit

線性迴歸需要常態、等變異、獨立誤差與滿秩設計。只有一個預測變數時,矩陣式化簡成常見的

$$\hat y_0\pm t\,\hat\sigma\sqrt{\frac1n+\frac{(x_0-\bar x)^2}{\sum_i(x_i-\bar x)^2}},$$

它只是兩欄設計的特例,不能原封不動套到四次模型。要預測一個新觀測值,根號內再加 1,因為新觀測自己也有誤差。

從 logit 的信賴區間回到機率

logistic 函數嚴格遞增,所以把 logit 尺度的兩端點 $L=\hat\eta_0-1.96\,\mathrm{SE}$、$U=\hat\eta_0+1.96\,\mathrm{SE}$ 各自轉回去就好:

$$\left[\frac1{1+e^{-L}},\ \frac1{1+e^{-U}}\right].$$

舉例:$\hat\eta_0=1$、$\mathrm{SE}=0.3$,則 $\hat\pi_0\approx0.731$。logit 尺度的區間是 $[0.412,1.588]$,轉回機率是 $[0.602,0.830]$。端點一定落在 0 到 1 之間,而且區間不對稱:下方差 0.129,上方差 0.099。

標準誤是哪個尺度的? 這個標準誤屬於 logit 尺度,大於 1 也不奇怪(講義連結的討論串就有 6.14),不能直接拿去和機率相加減。另外,區間估的是條件機率 $\pi_0$。個別的 $Y_0$ 只會是 0 或 1,不能說它有 95% 的機率落在 $[0.602,0.830]$。小樣本、稀有事件或完全分離時,常態近似也可能失準。

另外兩件要分清楚的事

係數的區間與機率的區間不同。單一係數用 $\hat\beta_j\pm1.96\,\mathrm{SE}(\hat\beta_j)$,取指數後是 odds ratio 的區間 $\left[e^{\hat\beta_j-1.96\,\mathrm{SE}},\ e^{\hat\beta_j+1.96\,\mathrm{SE}}\right]$;機率的區間則要用整個 $x_0^{\mathsf T}\hat Vx_0$。

逐點區間不保證整條曲線。圖 7.1 的虛線在每個固定的 $x_0$ 各有約 95% 的涵蓋率;要讓整條曲線同時被涵蓋,區間必須更寬,不能在每個點都用 1.96。

實作上,Lab 對線性模型用 get_prediction;logistic 可以用 cov_params() 與 scipy.special.expit 手算,也可以改用 Binomial GLM 的 get_prediction。

證明:線性預測量的變異與區間轉換

固定基底向量 $b_0$ 時,$\operatorname{Var}(b_0^T\hat\beta)=b_0^T\operatorname{Cov}(\hat\beta)b_0$。大樣本下以標準常態分位數建立 $\eta_0$ 的區間。因為 logistic 函數嚴格遞增,事件 $L\le\eta_0\le U$ 等價於 $\operatorname{logistic}(L)\le p_0\le\operatorname{logistic}(U)$,因此轉換端點保留同一近似涵蓋率。連續反應的常態線性模型則使用殘差自由度的 $t$ 分位數。

PART 02 · 階梯函數

把 x 切段,每段給一個常數 教科書 · 第 7.2 節講義 07

多項式有個結構上的毛病:它是全域的。60 歲那群人的資料會透過 $\hat\beta_3$ 影響 20 歲那一段的曲線形狀。階梯函數(step function)換一個想法: 把 x 的範圍切成幾段,每段各擬合一個常數,段與段之間互不干涉。

選好切點後,每段各給一個常數;只有這個預測變數、以平方損失擬合時,該常數就是段內反應的平均。例如把年齡分成四段,就得到四個段內平均。讀課本圖 7.2 時留意:切點處那段短斜線只是畫圖時把相鄰格點連起來的視覺效果。模型本身在切點是垂直跳躍,虛線的信賴區間也一樣。

階梯函數的完整編碼與係數解讀

做法是選切點 $c_1, \ldots, c_K$,造出 K+1 個指示變數:

$$C_0(X) = I(X < c_1),\quad C_k(X) = I(c_k \le X < c_{k+1}),\quad C_K(X) = I(c_K \le X) \tag{7.4}$$

然後把 $C_1, \ldots, C_K$ 丟進迴歸($C_0$ 跟截距重複,要丟掉一個):

$$y_i = \beta_0 + \beta_1 C_1(x_i) + \cdots + \beta_K C_K(x_i) + \varepsilon_i \tag{7.5}$$

為什麼 $C_0$ 要丟?每個 $X$ 恰好落在一段裡,所以 $\sum_{j=0}^{K}C_j(X)=1$,而右邊的 1 正是截距那一欄。把截距和全部 $K+1$ 個指示變數一起放進去,設計矩陣就完全共線,係數無法唯一估計。以切點 35、50、65 為例:

區間$X<35$$35\le X<50$$50\le X<65$$X\ge65$
預測平均$\beta_0$$\beta_0+\beta_1$$\beta_0+\beta_2$$\beta_0+\beta_3$
係數怎麼讀 因為每個 x 只落在一段裡,$\beta_0$ 就是第一段的平均 y, $\beta_j$ 是第 j+1 段相對於第一段的增量。 因此,只有 x 一個變數時,每一段的擬合值就是那一段的樣本平均。 下面的元件顯示的就是這個。
如果改成「保留全部 K+1 個指示變數、去掉截距」(lab 範例 的 pd.get_dummies() 就是這樣),係數會直接變成各段的平均值。 兩種編碼擬合出來的曲線完全一樣。

等寬與等人數切分,回答的是不同問題

pd.cut(age,4) 把年齡範圍分成四個等寬區間;pd.qcut(age,4) 依分位數分成樣本數大致相近的四組。年齡重複值集中時,分位數邊界可能重複,因此不能只由「四組」推論實際得到四個可用區間。講義指定 35、50、65 的切點是依年齡意義分組,也不同於自動等寬或等人數切分。

Lab 的四個年齡區段分別估計平均薪資。邊界左閉或右閉由切分函式設定決定,實作必須保留同一規則;預測新資料時也應沿用訓練資料的切點,而不是重新計算它的分位數。用年齡區段與年份交互作用時,模型可以讓各組有不同年份斜率;這是在加入可解讀的交互作用,並不會讓分段常數自動變得連續。

自己畫圖時,用 plt.step(x_grid, y_pred, where="post"),並讓格點包含切點,跳躍才會落在正確位置。同一區間內的基底向量都一樣,所以預測值和逐點標準誤也都是常數,信賴區間同樣呈階梯狀。

›拖橘色的切點看每一段的平均怎麼變。用下面的選單改段數。
段數
課程/lab 資料
怎麼玩
拖動橘色的切點。每一段的水平紅線就是該段的樣本平均,也就是階梯函數的擬合值。切點會被夾在鄰居之間(至少差 2 歲),拖不過去是刻意的。
每一段
整體
段數4
切點—
RSS—
R²—
為什麼第一段常常很難看
ISLP 圖 7.2 左的第一段完全錯過了「薪水隨年齡上升」的趨勢——一個常數沒辦法表達段內的斜率。沒有自然切點的時候,階梯函數會漏掉區間內的變化趨勢。不過流行病學與生物統計很愛用它(例如固定的 5 歲一組),因為切點本身有現實意義。
方法示範與原 Lab
切段與虛擬變數
cut_age = pd.qcut(age, 4) X_cut = pd.get_dummies(cut_age) model = sm.OLS(y, X_cut).fit()
來源:Ch07-nonlin-lab-zh.ipynb
QUIZ · 階梯函數

只有 age 一個預測變數時,階梯函數在每一段的擬合值是什麼?

(A) 那一段內所有觀測值的 y 平均
(B) 那一段兩個端點上迴歸直線的中點
(C) 全體樣本平均,加上該段切點對應的偏移量
延伸:切段後的交互作用

用切段建立可解讀的交互作用

若不同年份的年齡斜率不同,可擬合 $y=\beta_0+\beta_1x+\beta_2I(t\ge2005)+\beta_3xI(t\ge2005)+\varepsilon$。較早年份的截距、斜率是 $(\beta_0,\beta_1)$,較晚年份是 $(\beta_0+\beta_2,\beta_1+\beta_3)$。切段可以改變截距,也能讓同一連續變數在不同群中有不同斜率。

PART 03 · 基底函數框架

用基底函數表示多項式與階梯函數 教科書 · 第 7.3 節講義 07

比較前兩節的方法:多項式迴歸用的預測變數是 $x, x^2, x^3, \ldots$; 階梯函數用的是 $I(c_1 \le x < c_2), I(c_2 \le x < c_3), \ldots$。 形式不同,但結構完全一樣:都是「先把 x 過一組固定函數,再做線性迴歸」。 ISLP §7.3 把這個結構抽出來叫做基底函數(basis function):

$$y_i = \beta_0 + \beta_1 b_1(x_i) + \beta_2 b_2(x_i) + \cdots + \beta_K b_K(x_i) + \varepsilon_i \tag{7.7}$$

關鍵是 $b_1(\cdot), \ldots, b_K(\cdot)$ 在估係數之前就固定了,本身不含要估的參數。 於是 (7.7) 就是一個以 $b_1(x_i), \ldots, b_K(x_i)$ 為預測變數的標準線性模型, 最小平方可以照搬,分類時則沿用 GLM。基底沒有依同一份資料反覆挑選時,標準誤與 F 檢定也一樣成立。

「把 x 換成新特徵,再做線性模型」你已經見過。Taylor 展開用的是固定的多項式基底;第 6 章的 PCR、PLS 則先從資料學出新特徵,再做迴歸。這一章的基底大多固定,學出來的版本放在下面的收合對照。

幾種常見的基底函數 多項式:$b_j(x) = x^j$
階梯函數:$b_j(x) = I(c_j \le x < c_{j+1})$
立方樣條:$x, x^2, x^3$ 再加每個節點一個 $(x - \xi_k)^3_+$
B-樣條:和立方樣條同一個函數空間的另一組基底
自然樣條:再加上邊界條件,函數空間小了一點,所以基底少兩個
換基底就換方法,但擬合方法(最小平方)從頭到尾沒換過。
基底可以固定,也可以學:從 Taylor 到 PCR、PLS

這些方法都先把原始變數換成新特徵 $\phi_1(X),\ldots,\phi_K(X)$,再擬合

$$Y=\beta_0+\sum_{k=1}^{K}\theta_k\phi_k(X)+\varepsilon.$$

模型對係數 $\theta_k$ 是線性的,對 $X$ 則可以是非線性的。差別在於特徵從哪裡來。

方法基底或特徵怎麼決定
Taylor 展開$(x-a)^k$形式固定;係數由 $a$ 點的導數決定
多項式$x^k$形式固定;係數由資料估
Fourier$\sin kx,\ \cos kx$形式固定;適合週期函數
Wavelet$\psi_{j,k}(x)$形式固定;不同位置與尺度,適合局部特徵
Spline$b_k(x)$形式固定;節點常依分位數放
PCR$Z_k=a_k^{\mathsf T}X$從 $X$ 學方向
PLS$Z_k=w_k^{\mathsf T}X$從 $X$ 與 $Y$ 學方向
神經網路隱藏層$\sigma(w_k^{\mathsf T}X+c_k)$和輸出層一起訓練;對 $X$ 是非線性的

Taylor 展開是最熟悉的例子。對在 $a$ 附近等於自身 Taylor 級數的函數,$f(x)=\sum_{k=0}^{\infty}f^{(k)}(a)(x-a)^k/k!$,也就是用多項式基底表示函數,只是係數來自導數。截到有限項後只是近似,而且離 $a$ 愈遠通常愈差。迴歸改用整批資料估係數,但全域多項式在遠處失控的毛病還在,這正是接下來改用分段多項式的理由。第 4 章的 logistic 擬合用過一次 Taylor 線性化,下一節則用它解釋樣條的連續條件。

兩種「基底」的數學意義不同。Taylor、Fourier、Wavelet、Spline 是在函數空間裡選一組積木;PCR、PLS 是在預測變數空間裡換座標。例如 $Z_1=0.6X_1+0.8X_2$:即使方向是學來的,$\beta Z_1$ 對 $X_1,X_2$ 仍是線性的,所以學到特徵不等於模型變成非線性。要讓學到的特徵也對 $X$ 非線性,就得像神經網路那樣加上非線性的激活函數。

PCR 和 PLS 的得分通常同時依賴多個 $X_j$,因此也不具備 GAM 的 $f_1(X_1)+\cdots+f_p(X_p)$ 結構。特徵是看同一份資料學來的話,把它當成固定基底算標準誤也會太樂觀。

一個模型可以拆成三層來看:

  • 特徵表示:怎麼表示原始資料,例如多項式、樣條、PCR、PLS。
  • 模型結構:怎麼組合特徵,例如線性、加法、含交互作用。
  • 估計:怎麼估係數,例如 OLS、MLE、懲罰最小平方。

GAM 主要是在第二層指定加法結構,通常在第一層用樣條基底,在第三層用懲罰避免過度擬合。

操作比較:勾選基底、組合曲線

下面的元件讓你組合不同基底。左邊每一個核取方塊都是一個基底函數; 你選哪幾個,下面就用那幾個去擬合。三個預設按鈕分別把選擇切成 「三次多項式」、「立方樣條」、「階梯函數」。你會看到它們只是勾選項不同而已。

›勾選基底函數,看它們怎麼組合成一條曲線。三個預設按鈕在最右邊。
課程/lab 資料
怎麼玩
上圖是被選中的每一個基底函數的形狀(各自正規化到同高,否則 x³ 會把別人壓扁)。下圖是資料與它們線性組合出來的曲線 $\hat f(x) = \sum_k \hat\beta_k b_k(x)$。節點固定在 33.75 與 51(Wage 的 25% 與 75% 分位數)。
目前的模型
選了幾個基底4
參數個數4
RSS—
R²—
三個預設分別是什麼
三次多項式=1, x, x², x³(4 個參數)
立方樣條=上面再加 (x−33.75)³₊、(x−51)³₊(6 個參數=K+4)
階梯函數=1, I(x≥33.75), I(x≥51)(3 段,3 個參數)
按下去看曲線怎麼變。三種「不同的方法」在程式裡只差幾個勾。
QUIZ · 基底函數框架

基底函數框架要求 $b_1(\cdot), \ldots, b_K(\cdot)$ 在估係數之前就固定,本身不含要估的參數。這個要求為什麼這麼重要?

(A) 因為固定的基底函數保證擬合出來的曲線一定平滑
(B) 因為只有固定的基底函數才能讓設計矩陣可逆
(C) 因為這樣模型才對參數線性,第 3 章的最小平方與推論工具(標準誤、F 檢定)才能原封不動使用
PART 04 · 迴歸樣條

分段三次多項式,在節點上接得平滑 教科書 · 第 7.4.1–7.4.3 節講義 07

樣條在不同區段使用低次多項式,再於節點上接合。三次樣條要求函數值、一階與二階導數連續,因此能彎曲而不出現斷裂或折角;K 個內部節點、含截距時共有 K+4 個自由度。

為什麼要接起來?節點是我們為了建模選的位置,不代表真實函數在那裡會突然改變。如果相信 $E[Y\mid X=x]$ 是平滑的,就不該讓人為的切點造成跳躍或折角。但母體的迴歸函數不一定連續:假如 65 歲才開始領補助,平均收入就可能在 65 歲跳一格,即使年齡本身是連續變數。這種已知的門檻,保留跳躍才合理。

連續條件也不必另外解。換一組自動滿足條件的基底,問題就變回普通最小平方;實務上用的是數值比截斷冪穩定的 B-spline。

完整計算:樣條基底、連續性與自由度

多項式的毛病是全域、次數一高就在邊界暴衝。階梯函數的毛病是段內沒有斜率。 把兩個想法縫起來:分段擬合低次多項式。節點(knot)就是換係數的地方。 一個節點在 c 的分段三次多項式長這樣:

$$y_i = \begin{cases} \beta_{01} + \beta_{11} x_i + \beta_{21} x_i^2 + \beta_{31} x_i^3 + \varepsilon_i & x_i < c \\ \beta_{02} + \beta_{12} x_i + \beta_{22} x_i^2 + \beta_{32} x_i^3 + \varepsilon_i & x_i \ge c \end{cases} \tag{7.8}$$

兩段各 4 個參數,總共 8 個自由度。ISLP 圖 7.3 左上就是這樣擬合出來的—— 函數在節點上不連續。解法是加約束。每加一個約束就少一個自由度:

  • 要求連續(8 → 7):不能跳,但接點是個 V 字,很不自然(圖 7.3 右上)。
  • 再要求一階導數連續(7 → 6):斜率也接上了,折角不見了。
  • 再要求二階導數連續(6 → 5):這就是立方樣條(圖 7.3 左下)。

一般而言,K 個內部節點的立方樣條用掉 K + 4 個自由度。 d 次樣條的定義是:分段 d 次多項式,且導數連續到 d − 1 階。 所以線性樣條只要求函數連續(圖 7.3 右下),而 §7.2 的階梯函數就是 0 次樣條。

那要怎麼真的把約束擬合進去?不必解限制式最小平方——換基底就好。 從三次多項式的基底 $x, x^2, x^3$ 出發,每個節點加一個截斷冪基底 (truncated power basis)函數:

$$h(x, \xi) = (x - \xi)^3_+ = \begin{cases} (x-\xi)^3 & x > \xi \\ 0 & \text{否則} \end{cases} \tag{7.10}$$

加上 $\beta_4 h(x, \xi)$ 只會讓三階導數在 ξ 跳(跳 $6\beta_4$), 函數值、一階、二階導數都保持連續。所以 K 個內部節點的立方樣條就是對 $X, X^2, X^3, h(X,\xi_1), \ldots, h(X,\xi_K)$ 做普通的最小平方, K + 4 個係數;這裡 K 一律指內部節點數。

約束自由度(單節點)圖 7.3 的位置長相
都不加(分段三次)8左上在節點上不連續
函數值連續7右上接上了,但是 V 字折角
+一階導數連續6(書上沒單獨畫)折角消失
+二階導數連續 = 立方樣條5 = K+4左下看起來完全平滑
線性樣條(只要求連續)3 = K+2右下折線

截斷冪基底從哪裡來?

它可以由連續條件直接推出來。設節點 $c$ 左右是兩個至多三次的多項式 $p_1,p_2$,令 $q=p_2-p_1$。連續條件要求 $q(c)=q'(c)=q''(c)=0$,也就是 $c$ 至少是 $q$ 的三重根。$q$ 至多三次,所以只能是 $q(x)=\gamma(x-c)^3$,於是

$$f(x)=p_1(x)+\gamma(x-c)_+^3.$$

這條式子是精確的改寫,沒有近似。有多個節點時,每過一個節點就多一項,係數

$$\gamma_j=\frac{f'''(c_j^+)-f'''(c_j^-)}{3!}$$

控制三階導數在該節點跳多少。

把限制放進模型的兩種做法

以單一節點為例,把兩段都寫成 $(x-c)$ 的多項式,係數分別是 $a_0,\ldots,a_3$ 與 $b_0,\ldots,b_3$。連續條件就是 $a_0=b_0$、$a_1=b_1$、$a_2=b_2$,所以 $8-3=5$ 個自由參數,只有最高次係數可以不同。

做法一:限制式最小平方。解 $\min_\beta\|Y-Z\beta\|^2$,受限於 $A\beta=0$。用 Lagrange 乘數得到下面的線性系統:

$$\begin{pmatrix}Z^{\mathsf T}Z&A^{\mathsf T}\\A&0\end{pmatrix}\begin{pmatrix}\hat\beta\\\hat\nu\end{pmatrix}=\begin{pmatrix}Z^{\mathsf T}Y\\0\end{pmatrix}.$$

做法二:換基底。令 $\gamma=b_3-a_3$,模型變成 $a_0+a_1(x-c)+a_2(x-c)^2+a_3(x-c)^3+\gamma(x-c)_+^3$。不管係數估出來是多少,連續條件都自動成立,所以直接做 OLS 就好。

解唯一時,兩種做法給出同一條擬合曲線。實務上幾乎都用第二種:基底函數就是把連續限制寫進模型的參數化。節點有 $K$ 個時,$4(K+1)-3K=K+4$,剛好等於截斷冪基底的個數。

一次樣條與一般次數

令內部節點為 $\xi_1<\cdots<\xi_K$。連續分段直線可寫成 $f(x)=\beta_0+\beta_1x+\sum_{k=1}^K\theta_k(x-\xi_k)_+$;通過節點 $\xi_k$ 後,斜率增加 $\theta_k$。一般 degree-$d$ 樣條要求到 $d-1$ 階導數連續,基底為 $1,x,\ldots,x^d,(x-\xi_1)_+^d,\ldots,(x-\xi_K)_+^d$,空間維度為 $K+d+1$。

證明:樣條的維度與連續性

$K+1$ 段各有 $d+1$ 個係數,共 $(K+1)(d+1)$ 個。每個內部節點要求函數值與前 $d-1$ 階導數一致,提供 $d$ 個獨立線性條件,所以剩下 $(K+1)(d+1)-Kd=K+d+1$。截斷冪 $(x-\xi)_+^d$ 在節點兩側到 $d-1$ 階導數都接為 0,而第 $d$ 階可以改變,故滿足這些條件;基底彼此獨立且數量相符,便張成整個空間。

›拖節點、切換連續性層級,看曲線從斷裂變平滑,同時看自由度從 8 掉到 5。
課程/lab 資料
怎麼玩 圖 7.3
拖動橘色的節點 ξ,再用下面的選項切換要求到第幾階連續。曲線會從斷裂 → 折角 → 平滑。每加一個約束,右邊的參數個數就少 1。
目前狀態
節點 ξ50.0
約束層級二階導數連續
參數個數(自由度)5
RSS—
R²—
基底是怎麼被拿掉的
完整的 8 個基底是 1, x, x², x³ 再加四個截斷項 I(x>ξ), (x−ξ)₊, (x−ξ)²₊, (x−ξ)³₊。要求連續=拿掉 I(x>ξ)(它是唯一會讓函數值跳的),再要求一階導數連續=再拿掉 (x−ξ)₊,再要求二階導數連續=再拿掉 (x−ξ)²₊。剩下的 5 個就是單節點立方樣條的基底,K + 4 = 5。
觀念釐清
Q:為什麼三次樣條剛好要求到二階導數連續?少一階或多一階會怎樣?

先看少一階。只要求函數值與一階導數連續,二階導數可以跳——二階導數是「斜率變化的速度」,也就是曲率。曲率突然改變,人眼看得出來:曲線在節點附近會有一個「彈一下」的感覺。所以只到一階不夠。

再看多一階。$d$ 次多項式在 $c$ 的 Taylor 展開是精確的:$p(x)=\sum_{k=0}^{d}p^{(k)}(c)(x-c)^k/k!$。所以兩個至多 $d$ 次的多項式若在 $c$ 的第 $0$ 到第 $d$ 階導數全部相同,Taylor 係數就全部相同,兩段其實是同一個多項式,節點等於不存在。

只要求到第 $d-1$ 階時,最高次係數還能不同:$p_2(x)=p_1(x)+a(x-c)^d$。這一項在 $c$ 的前 $d-1$ 階導數都是 0,不破壞連續;第 $d$ 階導數則可以改變,留下彈性。這就是「導數連續到 $d-1$ 階」的來源:它是還能保留彈性的最高要求。這是標準樣條的定義,數學上並非只能如此:只要求到較低階也可行,重複節點就會降低連續性。

樣條次數0123$d$
連續性不要求(階梯函數)$C^0$$C^1$$C^2$$C^{d-1}$

書上還補了一句很實用的話:三階導數的不連續人眼幾乎偵測不到,所以立方樣條「看起來」就是平滑的。這就是為什麼實務上 degree 3 幾乎是唯一的選擇,更高次只是多花自由度,看起來沒有更平滑。

方法示範與原 Lab
擬合立方樣條
bs_age = MS([bs('age', internal_knots=[25,40,60])]) Xbs = bs_age.fit_transform(Wage) M = sm.OLS(y, Xbs).fit()
來源:Ch07-nonlin-lab-zh.ipynb
QUIZ · 樣條的自由度

在 age 上擬合一個有 5 個內部節點的立方樣條(含截距),要估幾個參數?

(A) 24 個(6 段各 4 個參數)
(B) 5 個(節點數就是自由度)
(C) 9 個(K + 4 = 5 + 4)
PART 05 · 自然樣條

自然樣條:以線性約束處理兩端的擬合 教科書 · 第 7.4.4–7.4.5 節講義 07

立方樣條在資料兩端仍有一個問題:兩端的變異很大。 在最小節點以左、最大節點以右,資料只從單邊來,三次多項式卻還有完整的四個自由度可以亂扭。 ISLP 圖 7.4 就在示範這件事。三個節點的立方樣條,兩端的信賴區間用書上的話說是「相當狂野」。

自然樣條(natural spline)在立方樣條上加入兩個自然邊界條件: 左、右端點的二階導數各等於 0,並以端點的值與斜率向邊界外作線性延伸。 這是總共兩個獨立約束。固定 K 代表內部節點數、並把截距算進去時, 立方樣條的 K + 4 個參數因此減為自然立方樣條的 K + 2 個,等於少了兩個基底。

圖表需要連網載入 Chart.js比較立方樣條與具有線性尾端的自然樣條。
›兩條曲線用同樣的三個節點。比較的是兩端信賴區間的寬度。
課程/lab 資料
怎麼看這張圖 圖 7.4
兩條實線是擬合曲線,兩片淡色帶是各自的 95% 信賴區間。兩者用完全相同的三個內部節點(25、40、60),差別只在自然樣條多了兩端的線性約束。中間幾乎重疊,兩端差很多。
樣條設定
立方樣條 參數個數7
自然樣條 參數個數5
內部節點25 · 40 · 60
代價是什麼
自然樣條放棄了「兩端也可以彎」的能力。如果真實函數在邊界確實彎得厲害,自然樣條會擬合不出來(有偏差)。但邊界的資料本來就少,那裡的彎曲通常反映了雜訊,所以這個交換在實務上幾乎總是划算的。

ISLP 圖 7.7 把這件事推到極端:15 個自由度的自然樣條 vs 高次多項式。 課本寫 15 次(df 不含截距),講義寫 14 次(df 含截距),兩者彈性相當,但多項式在尾端大幅振盪,自然樣條則較穩定。 這就是「樣條通常優於多項式」的理由:樣條靠加節點取得彈性、把次數鎖在 3; 多項式只能靠拉高次數,而高次的代價全部集中在邊界。

觀念釐清
Q:節點該放幾個?放哪裡?

放哪裡:理論上該把節點放在「函數變化快」的地方,變化慢的地方少放。實務上幾乎沒人這樣做,因為你事先不知道哪裡變化快。標準做法是指定自由度,讓軟體把對應數量的節點放在資料的均勻分位數上。lab 範例 的 BSpline(df=6) 就自動選了 33.75、42.0、51.0,正好是 25%/50%/75% 分位數。用分位數放節點的好處是每一段的樣本數差不多,不會出現「某一段只有 3 個點」的情況。

放幾個:用交叉驗證。ISLP 圖 7.6 對 Wage 掃了 df = 1 到 10 的10-fold CV MSE:自然樣條在 df = 3、立方樣條在 df = 4 就已經足夠,曲線之後就拉平了。做法跟第 5 章完全一樣——留一部分資料、擬合一個指定節點數的樣條、在留出的部分算誤差,換不同的 K 重複,選 CV 誤差最小的。

還有一個很務實的答案:§7.7 擬合多變數 GAM 時,每個變數都要選 df 就太麻煩了,所以實務上常常直接把所有項的 df 都定成 4,先跑起來再說。書上說的是「我們通常採取比較務實的做法」。

方法示範與原 Lab
擬合自然樣條
ns_age = MS([ns('age', df=5)]).fit(Wage) M_ns = sm.OLS(y, ns_age.transform(Wage)).fit()
來源:Ch07-nonlin-lab-zh.ipynb
QUIZ · 自然樣條

自然樣條相對於立方樣條,多了什麼約束、換到了什麼?

(A) 多了「兩端區域必須是線性」的約束,換到邊界處明顯較窄的信賴區間
(B) 多了「節點必須放在分位數上」的約束,換到不必自己選節點位置
(C) 多了「二階導數在節點連續」的約束,換到更平滑的曲線
深入基底:自然樣條與 B-spline 的計算

自然樣條與 B-spline 基底

給定有序節點 $\xi_1<\cdots<\xi_K$,可令 $d_k(x)=\{(x-\xi_k)_+^3-(x-\xi_K)_+^3\}/(\xi_K-\xi_k)$。自然立方樣條的一組基底為 $1,x,d_k(x)-d_{K-1}(x)$($k=1,\ldots,K-2$);相減消去邊界外的二次、三次項,使兩端保持線性。這裡的 $\xi_1,\xi_K$ 是邊界節點,計數時不可與只算內部節點的記號混用。

截斷冪基底方便看連續性,但高次冪容易造成數值問題。B-spline 用只在一段節點範圍非零的局部支撐基底,表示相同的樣條空間,通常更適合計算。更換基底不等於更換模型;需保持次數、節點、邊界條件與截距設定一致。

實際計算 B-spline 基底

取非遞減節點序列 $t_i$,degree 為 $d$。零次基底是區間指示函數,高次基底用下面的 Cox–de Boor 遞迴計算:

$$B_{i,0}(x)=I(t_i\le x<t_{i+1}),\qquad B_{i,d}(x)=\frac{x-t_i}{t_{i+d}-t_i}B_{i,d-1}(x)+\frac{t_{i+d+1}-x}{t_{i+d+1}-t_{i+1}}B_{i+1,d-1}(x).$$

某項分母為 0 時把該整項定為 0。基底只在 $[t_i,t_{i+d+1}]$ 可能非零;端點重複 $d+1$ 次的 clamped 設定須把最右端點另按連續極限納入。相同次數與節點下,B-spline 與截斷冪張成相同空間,實作時仍須另加自然邊界限制才成為自然樣條。

來源:UTC:樣條與加法模型講義、ESL 第 5 章。

證明:自然基底為何在邊界外線性

令 $d_k(x)=\{(x-\xi_k)_+^3-(x-\xi_K)_+^3\}/(\xi_K-\xi_k)$。在 $x<\xi_1$,所有截斷冪為 0。在 $x>\xi_K$,展開得 $d_k(x)=3x^2-3(\xi_k+\xi_K)x+(\xi_k^2+\xi_k\xi_K+\xi_K^2)$。因此 $d_k-d_{K-1}$ 的二次項抵消,剩下一次函數。各基底原本已在節點具有二階連續性,故線性尾端的二階導數 0 與內部相接,滿足自然邊界條件。

先數內部節點,再說自由度

講義使用的 $K$ 有兩種節點計數方式。一般三次樣條若有 $m$ 個內部節點,含截距的空間維度是 $m+4$。自然三次樣條加上兩端線性條件後,維度是 $m+2$。若改把左右邊界也算入節點總數,$K=m+2$,自然樣條的維度才寫成 $K$。這兩種說法描述相同空間,不能把 $K+4$ 和 $K$ 直接相減而忽略節點定義。

每個內部節點允許曲率改變。把節點放在樣本分位數,可讓各區域都有觀測資料;等距節點在資料稀疏的尾端可能配置過多彈性。邊界外線性限制減少極端振盪,仍不能保證訓練範圍外的預測可靠;新年齡遠超過訓練範圍時仍沒有資料可以驗證延伸的斜率。

圖 7.6 的 df 為什麼從 1 開始?

$K$ 個內部節點的立方樣條有 $K+4$ 個自由度,最少也是 4,但圖上兩個面板的橫軸都從 1 起算。主要原因是這張圖的 df 不含截距:

模型總自由度不含截距
線性迴歸21
三次多項式43
立方樣條($K$ 個內部節點)$K+4$$K+3$
自然樣條($K$ 個內部節點)$K+2$$K+1$

截距只把曲線上下平移,所有模型都有,不增加函數形狀的彈性,所以比較彈性時常把它扣掉。估變異數時它仍然要算進去:簡單線性迴歸的 $\hat\sigma^2$ 分母是 $n-2$。例如 lm(y ~ bs(x, df=5)) 的基底有 5 欄,加上截距共 6 個係數。

扣掉截距後,自然樣條最少是 1(沒有內部節點時就是直線),但立方樣條最少還是 3。所以右圖的 df = 1、2 不可能是完整的立方樣條。課本只明說 df = 1 是線性迴歸;df = 2 大概是二次多項式,這是推論,書上沒有交代。

對照 Lab 的七欄與六欄

Lab 的 BSpline(internal_knots=[25,40,60], intercept=True) 產生七欄,正是三個內部節點加四個三次多項式自由度。bs('age', internal_knots=[25,40,60]) 預設不包含截距基底,會保留六欄,再由 ModelSpec 加上整體截距。兩種總維度一致;不能再把完整七欄和常數欄一起送入模型,造成線性相依。

Patsy 的 bs 與 cr 是建立設計矩陣的工具:cr 的自然邊界條件不等於懲罰平滑擬合。使用 constraints='center' 時還會吸收中心化限制,因此要一起檢查基底欄數、截距與秩,而非把函式引數 df 一律當成模型總自由度。預測新資料用 build_design_matrices 沿用原 design_info;重新呼叫建立基底可能改變節點。

若要以 CV 選自由度,每折先從訓練年齡決定節點、擬合模型,再把同一轉換套到留出年齡。以每個候選自由度的折外誤差比較,最後在完整訓練資料建立選定模型。不要在測試資料上反覆挑選「看起來最平滑」的曲線。

實務上用的樣條家族

名稱基底複雜度怎麼控制在哪裡會遇到
迴歸樣條截斷冪或 B-spline節點數bs()
自然樣條B-spline 加邊界條件,或以節點上的值參數化節點數ns()、patsy cr()
平滑樣條每個相異 $x$ 一個節點$\lambda$精確解的理論形式
P-spline較多的等距 B-spline$\lambda$,懲罰係數的差分pyGAM 的 s()(預設 20 個基底)

P-spline(Eilers 與 Marx)解 $\min_\beta\|y-B\beta\|^2+\lambda\|D\beta\|^2$,$D$ 是相鄰係數的差分。它用較多節點,不必細選位置,再靠懲罰控制彎曲;差分懲罰近似曲率懲罰,不是同一個量。mgcv 也採類似框架,自動選各項的 $\lambda$。

連續性限制和平滑懲罰是兩回事:前者由基底保證,讓各段在節點接得平滑;後者控制整條曲線彎多少,用來避免過度擬合。

PART 06 · 平滑樣條

換個想法:直接懲罰彎曲程度,用有效自由度描述複雜度 教科書 · 第 7.5 節講義 07

迴歸樣條的流程是:選節點 → 造基底 → 最小平方。平滑樣條(smoothing spline) 直接把擬合誤差與平滑程度寫進同一個最佳化問題。

我們希望函數 g 同時有較小的 RSS 與平滑的曲線。平滑程度可以如何量化? 二階導數 $g''(t)$ 衡量斜率變化的速度,也就是粗糙度: g 在 t 附近很抖,$|g''(t)|$ 就大;直線的二階導數恆為 0。 把它平方後在整個範圍上積起來,就得到總粗糙度。於是:

$$\min_g \;\sum_{i=1}^{n} \left(y_i - g(x_i)\right)^2 \;+\; \lambda \int g''(t)^2 \, dt \tag{7.11}$$
這是「損失+懲罰」,跟脊迴歸相同的做法 第一項是損失,逼 g 貼近資料; 第二項是懲罰,逼 g 平滑。λ ≥ 0 是調整參數:
λ = 0:懲罰失效。設計點相異時可內插到 RSS = 0;同一 x 若有不同 y,擬合值只能取該組平均,RSS 通常不為 0。兩者都可能追隨資料中的雜訊。
λ → ∞:懲罰無限重,只有 $\int g''^2 = 0$ 的函數不受懲罰, 也就是直線。這時損失項退化成普通的線性最小平方, 所以 g 就是那條最小平方直線。
中間的 λ 給你介於兩者之間的東西。λ 控制的就是偏差–變異取捨。

這個無限維最佳化問題的解可以明確寫出:使 (7.11) 最小的 g 是 在每一個相異的 $x_1, \ldots, x_n$ 上都有節點的自然立方樣條。 但它不等於「拿全部 x 當節點去擬合自然樣條」。在相異設計點上不加懲罰會插值,因而容易過度擬合; 它是那個自然樣條的收縮版,收縮的程度由 λ 決定。

所以平滑樣條同樣是基底展開。把 $g$ 寫成 $\sum_j\beta_jb_j$ 代回 (7.11),就得到

$$\min_\beta\ \|y-B\beta\|^2+\lambda\beta^{\mathsf T}\Omega\beta,\qquad \Omega_{jk}=\int b_j''(t)b_k''(t)\,dt,$$

這裡 $B$ 的第 $i$ 列第 $j$ 行是 $b_j(x_i)$。解是 $\hat\beta=(B^{\mathsf T}B+\lambda\Omega)^{-1}B^{\mathsf T}y$,形式上就是廣義的脊迴歸。差別在 $\Omega$ 不懲罰常數與直線;脊迴歸的單位矩陣則對每個方向都懲罰。

「收縮版」到底縮了什麼? 不是把整條曲線乘上一個小於 1 的常數。把 $y$ 拆到一組由平滑排到彎曲的方向後,第 $k$ 個方向乘上 $1/(1+\lambda d_k)$,其中 $d_k\ge0$ 衡量這個方向有多彎曲,愈彎曲愈大:
$d_1=d_2=0$:常數與直線完全保留。
$d_k$ 愈大:愈彎曲的方向,縮得愈多。
把這些因子加起來就是有效自由度。迴歸樣條靠基底的個數控制複雜度;平滑樣條留著基底,靠 $\lambda$ 調整每個基底方向留下多少。
有效自由度與留一法的完整公式

令 m 為相異設計點的數目;自然樣條可在這 m 個位置調整擬合值。所以我們不用「參數個數」描述它的彈性, 改用有效自由度(effective degrees of freedom)。把擬合值寫成

$$\hat g_\lambda = S_\lambda \, y, \qquad \mathrm{df}_\lambda = \sum_{i=1}^{n} \{S_\lambda\}_{ii} \tag{7.12–7.13}$$

$S_\lambda$ 是那個 $n \times n$ 的平滑矩陣,$\mathrm{df}_\lambda$ 是它的跡。 在至少有兩個相異設計點時,λ 從 0 增到 ∞,$\mathrm{df}_\lambda$ 從 m 降到 2;只有 x 全部相異時 m = n。 它是連續值,可以是 6.8 這種數字。

λ 怎麼選?交叉驗證。而且平滑樣條的 LOOCV 有捷徑,只擬合一次模型就算得出來 (跟第 5 章式 5.2 相同的做法,$\{S_\lambda\}_{ii}$ 扮演槓桿值的角色):

$$\mathrm{RSS}_{\mathrm{cv}}(\lambda) = \sum_{i=1}^{n} \left(y_i - \hat g_\lambda^{(-i)}(x_i)\right)^2 = \sum_{i=1}^{n} \left[\frac{y_i - \hat g_\lambda(x_i)} {1 - \{S_\lambda\}_{ii}}\right]^2$$

$\hat g_\lambda^{(-i)}$ 是拿掉第 $i$ 筆後重新擬合的函數。

為什麼跡可以叫自由度?

OLS 的擬合值是 $\hat y=Hy$,$H=X(X^{\mathsf T}X)^{-1}X^{\mathsf T}$ 是投影矩陣,$H^2=H$,特徵值只有 0 和 1,所以 $\operatorname{tr}H$ 恰好等於參數個數 $p$。平滑矩陣 $S_\lambda$ 不是投影,特徵值落在 $[0,1]$。例如特徵值是 $1,1,0.8,0.3,0.1$ 時,$\mathrm{df}_\lambda=3.2$:有 5 個方向,但有的只留下一部分,所以自由度可以不是整數。

也可以從敏感度來看。因為 $\hat g_\lambda(x_i)=\sum_j\{S_\lambda\}_{ij}y_j$,所以

$$\{S_\lambda\}_{ii}=\frac{\partial\hat g_\lambda(x_i)}{\partial y_i},\qquad \mathrm{df}_\lambda=\sum_{i=1}^{n}\frac{\partial\hat g_\lambda(x_i)}{\partial y_i}.$$

$\{S_\lambda\}_{ii}$ 衡量第 $i$ 個擬合值對自己觀測值的敏感度。擬合值愈依賴自己的 $y_i$,模型在那裡就愈有彈性,加總起來就是模型對資料的總敏感度。固定 $\lambda$ 時,$S_\lambda$ 只由 $x_i$ 與基底決定,和 $y$ 無關;若 $\lambda$ 是看資料選的,整個程序就不再是 $y$ 的線性函數。

線性迴歸平滑樣條
擬合值$\hat y=Hy$$\hat g=S_\lambda y$
矩陣性質投影,特徵值 0 或 1收縮,特徵值在 $[0,1]$
自由度$\operatorname{tr}H=p$,一定是整數$\operatorname{tr}S_\lambda$,通常不是整數
複雜度怎麼控制變數或基底的個數$\lambda$

兩端的極限:$x$ 全部相異時,$\lambda\to0^+$ 有 $S_\lambda\to I$、$\mathrm{df}_\lambda\to n$,有重複位置時則趨近相異位置數 $m$;$\lambda\to\infty$ 時 $S_\lambda$ 趨近直線迴歸的 $H$,$\mathrm{df}_\lambda\to2$。常看到的「下限是 1」只是不算截距的計數慣例,所以 lab 呼叫 approx_lam(..., df+1),圖上標 df = 1 的其實是直線。

圖表需要連網載入 Chart.js比較不同平滑程度下的曲線。
›推滑桿改有效自由度。df 接近 2 時接近直線,df 愈大愈抖。
df5.0
課程/lab 資料
怎麼看這張圖 圖 7.8
灰點是全部 3000 筆觀察,曲線用全部 3000 筆擬合,實際上是 pyGAM 以 20 個基底的 P-spline(懲罰樣條)近似平滑樣條。滑桿以有效自由度 dfλ 顯示複雜度,每個刻度對應一個 λ,df 較容易用來比較複雜度。課本圖 7.8 比較 16 df 與留一交叉驗證選出的 6.8 df 兩條曲線,在這份資料上兩者差別不大。
目前設定
dfλ5.0
對應的 λ—
›推動 λ,看哪些方向先被壓下去,有效自由度又怎麼變。
log₁₀ λ—
課程/lab 資料
怎麼看這張圖
每根長條是一個方向留下的比例 1/(1+λdₖ),由最平滑排到最彎曲,只畫前 12 個。前兩根是常數與直線,λ 再大也不縮。和第 6 章 Ridge 的收縮因子是同一個想法。
目前的收縮
λ—
有效自由度—
其中前 12 個方向—
其餘方向合計—
這個 λ 的尺度
這裡的 λ 是精確平滑樣條、年齡以歲計的值,和上面 df 滑桿那張圖(pyGAM)的 λ 尺度不同;比較時請看有效自由度。
迴歸樣條與平滑樣條怎麼選?

兩者都能得到三次樣條,差別在怎麼控制彈性:迴歸樣條限制模型能用多少個方向;平滑樣條允許很多方向,但限制每個方向能發揮多少。

迴歸樣條平滑樣條懲罰迴歸樣條(P-spline 等)
控制彈性靠節點的數量與位置$\lambda$有限個基底+$\lambda$
目標$\min_\beta\|y-B\beta\|^2$$\min_g\sum_i(y_i-g(x_i))^2+\lambda\int g''^2$$\min_\beta\|y-B\beta\|^2+\lambda\beta^{\mathsf T}\Omega\beta$
適合已知轉折點、想要低維又簡單的模型不想決定節點,讓 $\lambda$ 決定平滑程度多變數或大型模型,如現代 GAM
要選什麼節點數或 df,用 CV$\lambda$,用 CV 或 GCV基底數上限,$\lambda$ 由 GCV(廣義交叉驗證)或 REML(限制最大概似)選

這是一般傾向,不是絕對規則:迴歸樣條也能加懲罰,一維的平滑樣條也有高效率演算法。兩種方法可以調到相同的有效自由度,但限制函數的方式不同,曲線不會一樣。mgcv 的 s(x, bs="cr", k=20) 裡,k 只是基底維度的上限,最後的有效自由度仍由懲罰決定。

觀念釐清
Q:「自由度」在這一章出現了三次,它們是同一回事嗎?

不完全是。前兩個是同一回事,第三個是另一種東西。

(1)d 次多項式的 d + 1、(2)K 個內部節點之立方樣條的 K + 4:這兩個都是參數個數。你要估幾個 β,自由度就是幾。它們一定是整數;四次多項式含截距有 5 個參數,3 個內部節點的立方樣條有 7 個,分別對應到設計矩陣有幾欄。這裡均含截距;設計矩陣的欄向量線性獨立時,殘差自由度是 n 減去參數個數。

(3)平滑樣條的 $\mathrm{df}_\lambda$:這個量由平滑矩陣的跡定義。精確自然平滑樣條的彈性上界是 m 個相異設計點,而非一律 n;這些擬合值又被懲罰項限制住。所以我們改量「這個平滑器實際上用掉多少彈性」,定義成平滑矩陣的跡 $\sum_i \{S_\lambda\}_{ii}$。它是連續的(例如講義的 6.8),而且會隨 λ 連續變化。

把它們放在同一把尺上看是有道理的:$\mathrm{df}_\lambda = 5$ 的平滑樣條,彈性大約等於一個 5 個參數的迴歸樣條。這就是為什麼 pygam 提供 approx_lam(X, term, df) 讓你「用 df 指定 λ」——df 較容易對照模型的複雜度。局部迴歸也可以這樣量:ISLP 圖 7.10 標了「span 0.2 相當於 16.4 個自由度、span 0.7 相當於 5.3 個」。

QUIZ · 平滑樣條的懲罰

$\lambda \to \infty$ 時,(7.11) 的解 $\hat g$ 會變成什麼?

(A) 常數函數 $\hat g(x) = \bar y$,因為懲罰項要求函數完全不變化
(B) 最小平方直線,因為只有二階導數恆為 0 的函數才不被懲罰
(C) 在每個 xᵢ 上都有節點的自然立方樣條,因為解永遠是自然立方樣條
深入計算:函數空間、平滑矩陣、交叉驗證與 IRLS

$g$ 在哪裡找?為什麼解是三次?

(7.11) 不是對所有函數求最小,$g$ 要夠光滑,懲罰項才有定義。直觀的設定是 $C^2[a,b]$(二階導數存在且連續)。嚴格一點用 Sobolev 空間 $H^2[a,b]=\{g:g,g',g''\in L^2[a,b]\}$($L^2$ 指平方可積),導數以弱導數理解,二階導數不必處處存在。兩者的最佳解相同,而且解本身是 $C^2$ 的。

解的形狀可以由變分推出來。令 $g_\varepsilon=g+\varepsilon h$,其中 $h$ 只在相鄰資料點之間 $(x_i,x_{i+1})$ 不為零。因為沒有動到任何 $g(x_i)$,RSS 不變,所以最佳解要讓 $\int[g'']^2$ 在這個擾動下不再下降:

$$\left.\frac{d}{d\varepsilon}\int[g_\varepsilon'']^2\right|_{\varepsilon=0}=2\int g''h''=2\int g^{(4)}h=0.$$

第二個等號分部積分兩次,邊界項因 $h$ 在區間兩端附近為零而消失。對所有這樣的 $h$ 都成立,所以兩點之間 $g^{(4)}=0$,也就是三次多項式。為零的是四階導數:三次多項式的三階導數是常數,不一定是 0。穿過資料點時,RSS 那一項讓三階導數可以跳,因此節點就落在資料點;端點的斜率不受資料約束,又給出 $g''(a)=g''(b)=0$,這正是自然邊界條件。

懲罰$\int[g']^2$$\int[g'']^2$$\int[g''']^2$$\int[g^{(m)}]^2$
節點間滿足$g''=0$$g^{(4)}=0$$g^{(6)}=0$$g^{(2m)}=0$
節點間的次數135$2m-1$

表中的 $m$ 是導數的階數,和前面的相異設計點數 $m$ 無關。我們沒有事先假設 $g$ 是樣條,三次與節點位置都是最佳化導出來的。

由曲率懲罰到可計算的線性系統

寫 $g(x)=\sum_j\beta_jb_j(x)$、$B_{ij}=b_j(x_i)$、$\Omega_{jk}=\int b_j''b_k''$,最小化 $\|y-B\beta\|^2+\lambda\beta^T\Omega\beta$。當 $B^TB+\lambda\Omega$ 可逆時,係數與擬合值分別是

$$\hat\beta=(B^TB+\lambda\Omega)^{-1}B^Ty,\qquad\hat y=B\hat\beta=S_\lambda y.$$

實務上解線性系統,不必顯式求逆。若 $B$ 是相異設計點上的方形可逆基底矩陣,令 $M=B^{-T}\Omega B^{-1}$,就有 $S_\lambda=(I+\lambda M)^{-1}$。若 $M$ 的特徵值是 $d_j\ge0$,則

$$\operatorname{df}_\lambda=\sum_j\frac1{1+\lambda d_j}.$$

相異 $x_i$ 至少兩個且線性項可識別時,零懲罰空間由常數與一次函數組成;$\lambda\to\infty$ 留下最小平方直線與 2 個有效自由度。若有重複 $x$,應先把同位置觀測合併為有權重的平均,插值不能同時通過相同 $x$ 上不同的 $y$;自由度上界是相異位置數,不能直接寫成樣本數。

GCV 則把 LOOCV 的逐點槓桿近似成平均槓桿:

$$\operatorname{GCV}(\lambda)=\frac{\|y-S_\lambda y\|^2/n}{\{1-\operatorname{tr}(S_\lambda)/n\}^2}.$$

GCV 和精確 LOOCV 的分母不同,不能把其選出的自由度差異當作程式錯誤;比較時也要固定基底、懲罰和資料。

證明:正常方程、平滑矩陣與自由度

對係數微分得 $-2B^T(y-B\beta)+2\lambda\Omega\beta=0$,解出正文的正常方程。令 $u=B\beta$,目標改寫為 $\|y-u\|^2+\lambda u^TMu$,微分得 $(I+\lambda M)u=y$。對稱半正定矩陣 $M=Q\operatorname{diag}(d_j)Q^T$,因此 $S_\lambda=Q\operatorname{diag}\{(1+\lambda d_j)^{-1}\}Q^T$,取跡即得有效自由度。每個正特徵值方向的因子隨 $\lambda$ 遞減;零特徵值方向保留。

為何無限維問題可限制在自然樣條?這是自然樣條的最小彎曲能量性質。設 $s$ 為通過所有 $g(x_i)$ 的自然立方插值樣條,令 $h=g-s$,故 $h(x_i)=0$,而且

$$\int(g'')^2=\int(s'')^2+2\int s''h''+\int(h'')^2.$$

在每一段上分部積分兩次:$\int_{x_i}^{x_{i+1}}s''h''=[s''h']_{x_i}^{x_{i+1}}-[s'''h]_{x_i}^{x_{i+1}}+\int_{x_i}^{x_{i+1}}s^{(4)}h$。三個條件讓它們全部消失:$h(x_i)=0$ 與 $s^{(4)}=0$ 消去後兩項;$s''$ 連續使內部節點的 $s''h'$ 互相抵消;自然邊界 $s''(a)=s''(b)=0$ 消去兩端。於是交叉項為零,得到類似畢氏定理的等式

$$\int(g'')^2=\int(s'')^2+\int\big((g-s)''\big)^2\ge\int(s'')^2.$$

$s$ 和 $g$ 在資料點的值相同,RSS 也相同,所以不管最佳解的擬合值 $z_i=g(x_i)$ 是多少,用自然樣條連接都不會變差。至少有兩個相異 $x_i$ 且 $\lambda>0$ 時,等號只在 $h\equiv0$ 成立,最佳解唯一;$\lambda=0$ 時只約束觀測位置,不能聲稱整個函數唯一。

證明:平滑樣條的留一法捷徑

固定基底與同一未按樣本數重新縮放的 $\lambda$,令 $A=B^TB+\lambda\Omega$,$b_i^T$ 是設計矩陣第 $i$ 列,$s_{ii}=b_i^TA^{-1}b_i$。刪除第 $i$ 筆後的方程為 $(A-b_ib_i^T)\hat\beta^{(-i)}=B^Ty-b_iy_i$。由秩一逆矩陣恆等式可得 $\hat\beta^{(-i)}=\hat\beta-A^{-1}b_i(y_i-\hat y_i)/(1-s_{ii})$。左乘 $b_i^T$ 並整理即得 $y_i-\hat y_i^{(-i)}=(y_i-\hat y_i)/(1-s_{ii})$。平方加總得到正文公式;需 $1-s_{ii}\ne0$,插值極限不能直接用 $0/0$ 計算。

二元反應的懲罰 IRLS

同樣的想法可以搬到 logistic 迴歸:把 $g(x)$ 放進 logit,最大化 $\sum_i\{y_ig(x_i)-\log(1+e^{g(x_i)})\}-\frac\lambda2\int g''(t)^2dt$,最佳的 $g$ 仍是節點在資料點的自然樣條。令 $\eta=B\beta$、$p_i=\operatorname{logistic}(\eta_i)$,最小化負對數概似加 $\lambda\beta^T\Omega\beta/2$。從有限的初值開始,每輪用目前的 $p_i$ 組成 $W=\operatorname{diag}\{p_i(1-p_i)\}$ 與工作反應 $z=\eta+W^{-1}(y-p)$,再解

$$ (B^TWB+\lambda\Omega)\beta_{\rm new}=B^TWz.$$

這就是懲罰的迭代加權最小平方(IRLS)。若更新使目標變差,可縮短步長;接近 0 或 1 的機率會使 $W$ 很小,須處理分離、可識別性與數值穩定性。

證明:懲罰 logistic 的 Newton 更新

負對數概似 $\ell(\beta)=\sum_i\{\log(1+e^{b_i^T\beta})-y_ib_i^T\beta\}+\lambda\beta^T\Omega\beta/2$ 的梯度為 $B^T(p-y)+\lambda\Omega\beta$,Hessian 為 $B^TWB+\lambda\Omega$。Newton 步為 $\beta_{\rm new}=\beta-(B^TWB+\lambda\Omega)^{-1}\{B^T(p-y)+\lambda\Omega\beta\}$。兩邊乘上 Hessian,代入 $Wz=WB\beta+y-p$,便得到正文的 IRLS 線性系統。

懲罰不是刪掉節點,而是限制曲率

平滑樣條在每個相異訓練 $x$ 放節點,但以 $\lambda\int[g''(t)]^2dt$ 收縮彎曲部分。懲罰的零空間是直線:若 $g''=0$,曲率成本為零。因此 $\lambda$ 很大時保留下來的是最佳線性趨勢,不是整條曲線縮至零。資料點重複時,應以相異位置或適當加權表示;不能無條件宣稱「$n$ 個節點、$n$ 個完全獨立參數」。

LOOCV 捷徑使用 $(y_i-\hat g(x_i))/(1-S_{ii})$。分母大致補回該觀測對自己預測的影響;當 $S_{ii}$ 接近 1,留一誤差可能很大。此式要求相同線性平滑規則,不能把二元反應的 IRLS 權重、資料驅動選節點或已調過的 $\lambda$ 當作固定,就以為不用重新擬合也能評估完整的模型選擇流程。

講義連結的 Bone Mineral Density notebook 是另一個平滑曲線例子;它用來展示相同的基底與懲罰框架,不取代本課 Wage 的資料與輸出。Lab 的 pyGAM 用的是 P-spline,與每個 $x$ 都放節點的精確平滑樣條屬於相關但不同的參數化;不能因都叫 spline 就宣稱兩者結果必然相同。

PART 07 · 局部迴歸

只看附近的點,加權配一條線 教科書 · 第 7.6 節講義 07

再換一個想法。前面所有方法都在擬合一個全域的函數形式 (就算是分段的,段的邊界也是事先定死的)。局部迴歸(local regression)說: 要預測 $x_0$ 上的值,就只用 $x_0$ 附近的點,擬合一條加權直線,取它在 $x_0$ 的值。 換一個 $x_0$,重新擬合一次。

ISLP 演算法 7.1 · 在 X = x₀ 的局部迴歸 1. 取出 x 離 x₀ 最近的 s = k/n 比例的訓練點(k 是鄰域點數、n 是總筆數)。
2. 給鄰域內每個點一個權重 $K_{i0}$:最近的最重,最遠的那個剛好是 0, 鄰域外全部是 0。
3. 用這些權重做加權最小平方,找 $\hat\beta_0, \hat\beta_1$ 使 $\sum_{i=1}^{n} K_{i0}\left(y_i - \beta_0 - \beta_1 x_i\right)^2$ 最小。
4. 在 x₀ 的擬合值就是 $\hat f(x_0) = \hat\beta_0 + \hat\beta_1 x_0$。

放回本章的兩條主線看。基底展開走到這裡變成局部的:每個 $x_0$ 各用一組以自己為中心的基底 $1,(x-x_0)$(演算法 7.1 寫成 $\beta_0+\beta_1x$,只是參數化不同),係數 $\hat\beta(x_0)$ 隨目標點改變;迴歸樣條則是整條曲線共用同一組係數。線性平滑器那條線照樣成立:權重只看距離、不看 $y$,所以擬合值仍是 $y$ 的線性組合,$\hat y=Ly$($L$ 的第 $i$ 列是第 $i$ 個點的局部權重組合),自由度是 $\operatorname{tr}L$,跨距扮演平滑樣條裡 $\lambda$ 的角色(前提是固定跨距、不做穩健化)。

局部迴歸其實分兩步:先選鄰域,決定哪些點參與;再依距離給權重,決定每個點有多少影響力。權重帶來兩個好處。第一,離 $x_0$ 愈近的點愈能代表 $x_0$ 的情況,影響就該愈大。第二,如果鄰域內一律等權重(方框),點一進出鄰域擬合值就會跳;tricube 讓鄰域邊緣的權重平滑降到 0,曲線隨 $x_0$ 移動時也比較平順。下面的元件可以切換兩種權重,比較淡紅曲線的鋸齒。

要做的選擇有三個:權重函數 K、第 3 步擬合常數/直線/二次、以及跨距(span)s。它們彼此獨立:同一種權重可以配不同次數的局部多項式。平滑的權重函數之間差異通常不大,最關鍵的是 s: 它控制平滑程度,作用類似平滑樣條的 λ。 s 小則鄰域窄、曲線抖;s 大則鄰域寬、接近全域擬合。s 一樣可以用交叉驗證選。

課程 LOWESS、跨距與實作差異
圖表需要連網載入 Chart.js。課程 lab 的 LOWESS 使用完整 Wage 資料,跨距 0.2 與 0.5 比較局部平滑程度。
›課程 lab 的 LOWESS 曲線。下方互動再拆解一次局部加權擬合。
課程/lab 資料
課程 LOWESS
全部 3000 筆 Wage;span 為 0.2 與 0.5,保留套件預設的三次穩健疊代。年齡以歲、薪資以千美元表示。
span s鄰域曲線ISLP 圖 7.10 標的有效自由度
0.220% 的資料抖,跟著局部起伏16.4
0.770% 的資料平滑5.3
1.0全部資料,仍按距離加權通常更平滑,但不一定是直線不一定等於 2
›直接調 span 與 x₀,看鄰域、權重、局部斜率與擬合值怎麼一起變。
span s0.30目標點 x₀49
課程/lab 資料
虛擬碼
for x0 in 格點: d = |x - x0|;取最近的 k = s·n 個 w = tricube(d / d_max) b0, b1 = 加權最小平方(x, y, w) f[x0] = b0 + b1 * x0
這個目標點
跨距 s0.30
鄰域點數 k—
目標點 x₀—
局部斜率 b₁—
擬合值 f̂(x₀)—
曲線的最大折動—
圖上的元素 圖 7.9
橘色垂直線是目前的 x₀,橘點是它的鄰域,黃色曲線是權重(越高越重;可切換鐘形的 tricube 與等權重的方框),短橘線段是這一次的加權迴歸直線,紅色粗曲線是掃過去累積出來的 f̂。淡紅細線是這個 span 的完整曲線,每 0.25 歲算一點;最大折動是相鄰兩段的變化量最多差多少。
兩個要記住的限制
1. 記憶式(memory-based):每做一次預測都要用到全部訓練資料,沒有一組係數可以存下來。模型體積 = 資料體積。
2. 高維度時鄰近資料稀少:p 超過 3 或 4,x₀ 附近幾乎找不到點(與第 3 章 KNN 的維度詛咒有相同的問題)。所以局部迴歸主要用在 1~2 維,或者當 GAM 的單變數積木。第 8 章的樹換一種方式定義「附近」:由資料決定怎麼切,同一片葉子裡的點就是鄰居。
方法示範與原 Lab
局部迴歸的跨距
fitted = lowess(y, age, frac=span, xvals=age_grid)
來源:Ch07-nonlin-lab-zh.ipynb
QUIZ · 局部迴歸

為什麼局部迴歸被叫做「記憶式(memory-based)」方法?

(A) 因為它把每個訓練點的預測值先算好存起來,查表時直接取用
(B) 因為每算一次預測都要重新用到全部訓練資料,沒有一組固定的係數可以存起來
(C) 因為它需要記住每個節點的位置與對應的係數
局部加權擬合、自由度與多變數延伸

局部加權擬合

用中心化的局部設計向量 $b_i=(1,x_i-x_0)^T$,令 $B_0$ 是以 $b_i^{\mathsf T}$ 為各列的矩陣、$W_0=\operatorname{diag}(K_{i0})$。當 $B_0^TW_0B_0$ 可逆(局部設計滿秩),$\hat\beta=(B_0^TW_0B_0)^{-1}B_0^TW_0y$,而 $\hat f(x_0)=\hat\beta_0$;下一個目標點要重新選鄰居、權重和局部係數。擬合值剛好等於截距,是因為基底以 $x_0$ 為中心:其他基底在 $x=x_0$ 都是 0。把 $\hat f(x_0)$ 展開成 $\sum_i w_i^*(x_0)\,y_i$,這些等價權重不一定等於原本的核權重,也不一定全是正的;局部直線在邊界會給某些點負權重,用來修正鄰居只在單側造成的偏差。常用 tricube 權重 $K(u)=(1-|u|^3)^3I(|u|<1)$,其中 $u=(x_i-x_0)/h(x_0)$;$h(x_0)$ 可由第 $k$ 近鄰決定。

權重不是觀測誤差精確變異數的倒數,推論不能無條件照搬一般 WLS。

局部迴歸的自由度怎麼估?

權重只看距離、不看 $y$,所以每個目標點的擬合值都是 $y$ 的線性組合:$\hat f(x_0)=\ell(x_0)^{\mathsf T}y$,其中 $\ell(x_0)^{\mathsf T}=e_1^{\mathsf T}(B_0^{\mathsf T}W_0B_0)^{-1}B_0^{\mathsf T}W_0$,$e_1$ 取出截距。把各訓練點的 $\ell(x_i)^{\mathsf T}$ 疊成矩陣 $L$,就有 $\hat y=Ly$,自由度和平滑樣條一樣定義成 $\operatorname{tr}L$(ESL §6.2)。跨距愈大,鄰居愈多,$\operatorname{tr}L$ 愈小。span = 1.0 仍依距離加權,所以自由度不會剛好是 2。

statsmodels 的 lowess 不提供自由度,也沒有回傳 $L$,要自己依上式計算。穩健化迭代(it>0)的權重會依殘差而變,擬合就不再是 $y$ 的線性函數,$\operatorname{tr}L$ 只能當近似。

自由度的定義不只一種,例如 $\operatorname{tr}L$ 與 $\operatorname{tr}(LL^{\mathsf T})$;比較不同軟體或課本圖上標的自由度時,要先確認用的是哪一種。

局部的次數與穩健化

局部常數只做加權平均,在邊界的鄰居只剩單側,容易有偏差;局部直線能修正部分邊界趨勢,但樣本稀疏或局部設計秩不足時仍不穩定。小跨距保留細節也增加變異,大跨距平均更多資料也可能抹去真實變化。跨距需在訓練資料內用驗證比較,不能只看曲線是否穿過每個點。

Lab 使用 statsmodels.nonparametric.lowess 的 frac 控制鄰居比例。it 是殘差穩健化的額外迭代,會依殘差降低離群觀測權重;不是多項式的次數。Wage 圖中的局部擬合若要與手寫一次加權直線比較,必須同時對照排序、跨距與穩健化迭代的設定。

講義延伸的變係數模型把「附近」改為時間附近:在每個目標時間內擬合薪資對其他變數的係數,得到 $\beta_j(t)$,例如 $E(Y\mid x,t)=\beta_0(t)+\beta_1(t)x$。二維局部平面則用兩個變數共同定義鄰域。兩者都需要局部觀測資料支持;高維距離變得稀疏,解釋了為何不能直接把一維 LOWESS 無限制推廣到所有特徵。

PART 08 · GAM

每個變數各配一條曲線,再加起來 教科書 · 第 7.7 節講義 07

前面七節都只處理一個預測變數。現在把它們裝到多變數上。 多元線性迴歸是 $y_i = \beta_0 + \sum_j \beta_j x_{ij} + \varepsilon_i$; 把每個線性項 $\beta_j x_{ij}$ 換成各自的非線性函數 $f_j(x_{ij})$,就得到 廣義加法模型(generalized additive model, GAM):

$$y_i = \beta_0 + \sum_{j=1}^{p} f_j(x_{ij}) + \varepsilon_i = \beta_0 + f_1(x_{i1}) + \cdots + f_p(x_{ip}) + \varepsilon_i \tag{7.15}$$

兩條主線在這裡會合。走基底展開那條路:每個 $f_j$ 展開成一組基底,橫向疊成一個大設計矩陣,一次最小平方(或加懲罰)就擬合完。走平滑器那條路:把一維平滑器輪流套在偏殘差上,一次更新一個 $f_j$,這叫 backfitting。GAM 指的是加法結構本身,這兩種只是估計方法;固定基底、二次懲罰時,兩者的答案也一樣。代價是加法本身:$f_j$ 之間不會自己長出交互作用,要就得自己指定。自動找交互作用是第 8 章的樹擅長的事。

「加法」的意思就是:各變數的貢獻是相加的,估計時每個 $f_j$ 都要考慮其他成分,不是各自對 $y$ 做單變數迴歸再加總。 GAM 的優點是前面每一種單變數方法都可以當積木用—— 自然樣條、平滑樣條、局部迴歸、甚至多項式,混搭也行。 ISLP 圖 7.11/7.12 擬合的就是

$$\mathrm{wage} = \beta_0 + f_1(\mathrm{year}) + f_2(\mathrm{age}) + f_3(\mathrm{education}) + \varepsilon \tag{7.16}$$

例如年齡與年份各用一條平滑曲線,學歷則用每個水準的一個效果;三者的貢獻相加得到薪資預測。

接回基底展開:把每個未知函數展開成基底,$f_j(x)\approx\sum_{k=1}^{K_j}\beta_{jk}b_{jk}(x)$,代回 (7.15) 得到

$$y_i\approx\beta_0+\sum_{j=1}^{p}\sum_{k=1}^{K_j}\beta_{jk}b_{jk}(x_{ij})+\varepsilon_i.$$

於是 GAM 就是一個大一點的迴歸。什麼時候可以寫等號?若先假設 $f_j$ 就屬於指定的樣條空間,等號成立;若 $f_j$ 是一般的光滑函數,有限個基底通常只是近似。

GAM 模型規格、方法示範與原 Lab

其中 education 是類別變數,$f_3$ 就是「每個層級一個常數」(虛擬變數)。 如果 $f_1, f_2$ 用自然樣條,整個模型只是一個較大的線性迴歸模型 (基底矩陣橫向疊起來就好),sm.OLS() 一行擬合完。這是圖 7.11。 如果用平滑樣條,需要加入曲率懲罰,可以用 逆向擬合(backfitting)。這是圖 7.12。

講義的設定是 year 用 4 df、age 用 5 df;換成同樣自由度的平滑樣條,在這個例子裡兩種 GAM 的結果差別很小。

擬合加法模型
gam_full = LinearGAM(s_gam(0) + s_gam(1, n_splines=7) + f_gam(2, lam=0)) Xgam = np.column_stack([age, Wage['year'], Wage['education'].cat.codes]) gam_full = gam_full.fit(Xgam, y)
來源:Ch07-nonlin-lab-zh.ipynb

Wage 模型中的三個成分各自代表什麼?

講義先使用 $wage=\beta_0+f_1(year)+f_2(age)+f_3(education)+\varepsilon$:年份和年齡是平滑項,教育是五個水準的組別效果。固定基底時,將各項的基底欄串接即可使用 OLS;需要懲罰時,則在相同目標中加入各平滑項的曲率成本,即 $\min\|y-\beta_01-B\beta\|^2+\sum_j\lambda_j\beta_j^{\mathsf T}\Omega_j\beta_j$($\Omega_j$ 是第 $j$ 項的曲率懲罰矩陣),這也是 mgcv 的估計框架。每個平滑項都需要可識別限制,例如訓練樣本上的平均效果為零,常數水準由截距承接。

Lab 的 LinearGAM(s(0)+s(1)+f(2)) 用欄位位置指出項:s 表示樣條平滑,f 表示類別項。欄位順序不是文字標籤,必須核對傳入矩陣中 year、age、education 的位置。各項曲線的縱軸是模型成分,不能直接當成未控制其他變數的平均薪資。

講義比較自然樣條與平滑樣條的 GAM,說明相同加法結構可以換一維擬合方法作為組件(building block)。曲線相似不代表估計法相同。自然樣條控制基底維度,平滑樣條控制平滑懲罰;pyGAM 的 gridsearch 在它提供的候選規則下選平滑參數,與自行安排的外層效能評估仍是兩個步驟。

若年齡效果隨教育改變,單一 $f_2(age)$ 不足以表示,要明確加入交互作用或二維平滑項,並重新驗證;不能把任何殘差結構都當成該增加平滑項。

完整演算法:偏殘差與可識別的 backfitting

讓加法成分可識別的 backfitting

常數可在截距與成分之間任意移動,因此使用 $\sum_i f_j(x_{ij})=0$ 的樣本中心化限制。平方損失下先令 $\hat\beta_0=\bar y$、各成分為 0,再循環更新每一個 $j$。好處是只要有一維的擬合工具,就能擬合任意多變數的加法模型;ISLP §7.9 第 11、12 題用線性迴歸版本讓你手動跑一遍。

  1. 算偏殘差 $r_i=y_i-\hat\beta_0-\sum_{k\ne j}\hat f_k(x_{ik})$。
  2. 用指定的一維平滑器擬合 $r$ 對 $x_j$,得到暫時成分 $\tilde f_j$。
  3. 令 $\hat f_j(x)=\tilde f_j(x)-n^{-1}\sum_i\tilde f_j(x_{ij})$,保持成分中心化。
  4. 重複完整輪次,直到目標與擬合值的變化小於事先設定的容許量。

對 Gaussian GAM,固定基底與二次懲罰也可聯合解線性系統;二元 GAM 須在 IRLS 的工作反應與權重下更新,不能直接對 $0/1$ 反應套普通 backfitting。

那什麼時候真的需要 backfitting?自然樣條這類固定基底,直接聯合最小平方最簡單;局部迴歸沒有一組全域基底,沒辦法橫向疊成設計矩陣,這時 backfitting 最方便。現代套件如 R 的 mgcv 用懲罰迴歸樣條做聯合估計,非高斯反應則用懲罰的 IRLS(PIRLS)。

證明:backfitting 為何是分塊最小化

固定其他成分後,總目標中依賴 $f_j$ 的部分恰是 $\sum_i(r_i-f_j(x_{ij}))^2+\lambda_jJ(f_j)$($J$ 是粗糙度懲罰,例如 $\int f_j''^2$),所以精確的一維更新會使同一目標不增加。對固定基底、凸二次懲罰及可識別的聯合系統,分塊更新可解同一最小化問題;任意套入非線性平滑器時,不可直接承諾這個收斂結果。中心化固定的是參數表示,避免把常數在各成分之間反覆搬動。

圖表需要連網載入 Chart.js。f̂(year):薪水隨年份微幅上升,幾乎是直線(可能是通膨)。
圖表需要連網載入 Chart.js。f̂(age):中年最高,年輕與年長都低。這一項明顯需要非線性。
圖表需要連網載入 Chart.js。f̂(education):學歷愈高薪水愈高,五個層級各一個常數。
›推兩個滑桿改 age 與 year 的自由度,右邊看模型整體的成績怎麼變。
age df5.0year df5.0
課程/lab 資料
怎麼看這三張圖 圖 7.11–7.12
每一張都是一個 $\hat f_k$ 的成分圖(加法模型裡,它和偏依賴圖只差一個常數):曲線呈現中心化後的單一加法成分;其餘項的貢獻由截距與其他面板表示。虛線是逐點 95% 信賴區間。三張圖的縱軸都是「對 wage 的效果」,所以可以直接比高低——age 與 education 的擺幅遠大於 year。
這一組 df 的成績
age 的 df5.0
year 的 df5.0
模型總有效自由度—
deviance(=RSS)—
為什麼 education 沒有滑桿
education 是類別變數,在 pygam 裡用 f_gam(2, lam=0) 指定——類別項就是每個層級一個常數,沒有「平滑程度」可以調,而且 lam=0 表示完全不收縮。它的自由度固定是「層級數 − 1」。
year 需要非線性嗎
lab 用 ANOVA 檢定 year 需不需要非線性項,結論是「year 需要線性項(p ≈ 0.002)但不需要非線性(p ≈ 0.435)」;同一套檢定用在 age,則顯示 age 明顯需要非線性(p ≈ 5.7e−07)。
效果圖怎麼讀:成分圖、偏殘差圖、部分迴歸圖與偏依賴圖

成分圖畫已擬合的 $\hat f_j(x)$,條件是其他加法成分保持不變。偏殘差圖把 $e_i+\hat f_j(x_{ij})$($e_i$ 是完整模型的殘差)對 $x_{ij}$ 作圖:相當於先扣掉其他項再看該項的剩餘結構。點的散佈仍含雜訊與其他遺漏項,並不要求所有點落在曲線上。

部分迴歸圖適用於線性模型的指定欄位:先把 $y$ 對其他欄位迴歸取殘差,再把該 $x_j$ 對其他欄位迴歸取殘差,兩組殘差間的斜率等於原模型的係數。若一個樣條項有多個基底欄,不能把單一基底欄的斜率當成整個年齡曲線;這與偏殘差圖的縱軸和目的不同。

名字對照。偏殘差圖(partial residual plot)也叫 component-plus-residual plot(CR 圖,statsmodels 叫 CCPR),兩者是同一種圖。部分迴歸圖(partial regression plot)又叫 added-variable plot(AV 圖),兩軸都是殘差,是不同的圖。ISLP 圖 7.11–7.13 只畫中心化的 $\hat f_j$ 和 ±2 個標準誤,沒有畫殘差點,所以是成分圖。

偏殘差圖會誤導的時候。$r_{ij}=y_i-\hat\beta_0-\sum_{k\ne j}\hat f_k(x_{ik})$ 扣掉的只是模型估出來的其他效果。預測變數彼此高度相關,或模型漏了交互作用時,扣錯的部分會留在圖上,看起來像是 $x_j$ 的效果。backfitting 每一步拿去平滑的,就是這張圖上的 $(x_j,r_j)$:圖是用眼睛看,backfitting 是真的拿去擬合。

偏依賴圖(partial dependence plot, PDP)的用途。模型擬合之後,PDP 回答「平均而言,這個特徵怎麼影響預測」,讀法類似迴歸係數,可以套在任何模型上。例如房價模型裡經緯度與房價的關係,或某種飲食對健康指標的平均影響。目標特徵和其他特徵高度相關時,PDP 會拿去評估資料裡很少出現的組合,解讀要小心,下面會再說明。

PDP 每次固定目標特徵值,把其餘特徵依訓練樣本逐列帶入模型,再平均預測:$\hat f_S(x_S)=n^{-1}\sum_i\hat f(x_S,x_C^{(i)})$,其中 $S$ 是要看的特徵,$C$ 是其餘特徵,$x_C^{(i)}$ 是第 $i$ 筆資料的其餘特徵值。把其他特徵固定在平均值只是一個切片,對非線性模型兩者不同。加法迴歸中的 PDP 與成分曲線只差常數,但分類 GAM 的 logistic 轉換是非線性,平均機率不等於平均 logit 再轉換。年齡與教育高度相關時,替換年齡可能產生訓練資料中少見或未出現的組合;「控制其他變數」的圖形文字不構成因果識別。

證明:部分迴歸斜率與 OLS 殘差正交性

把完整線性設計分成 $[Z,x]$,$Z$ 含截距及其他項,令 $M_Z=I-Z(Z^TZ)^{-1}Z^T$。固定 $x$ 的係數 $b$ 時,對 $Z$ 最小化後剩下 $\|M_Z(y-xb)\|^2$,微分得 $\hat b=(x^TM_Zx)^{-1}x^TM_Zy$,正是殘差 $M_Zy$ 對 $M_Zx$ 的斜率;需各分母可逆。完整 OLS 正常方程給 $X^Te=0$($e$ 是殘差向量);設計含一整欄 1 時亦有 $\sum_i e_i=0$。這是擬合後樣本內的代數限制,並沒有證明誤差與解釋變數獨立;沒有截距、帶懲罰或用新資料時也不能原樣套用。

GAM 的優點 ✔GAM 的限制 ✘
每個 $X_j$ 各擬合一個非線性 $f_j$,不必手動試變換模型被限制成加法的,變數多的時候會漏掉重要的交互作用
非線性擬合通常預測更準要交互作用得手動加 $X_j \times X_k$ 或二維的 $f_{jk}$ 項
因為是加法的,可以固定其他變數單獨看某一個變數的效果這個解讀只在加法假設成立時才可靠
每個 $f_j$ 的平滑程度可以用自由度總結完全一般的模型還是得靠第 8 章的隨機森林與提升法

整套邏輯搬到分類問題,只要把 logistic 迴歸的 logit 換成加法形式:

$$\log\left(\frac{p(X)}{1 - p(X)}\right) = \beta_0 + f_1(X_1) + f_2(X_2) + \cdots + f_p(X_p) \tag{7.18}$$

一般寫成 $g\left(E[Y\mid X]\right)=\beta_0+\sum_{j=1}^{p}f_j(X_j)$:加法結構放在連結函數 $g$ 上,而不是加性誤差(這個 $g$ 和平滑樣條的 $g$ 無關)。

分類 GAM 的稀有事件算例

講義的模型是 $\operatorname{logit}P(\text{wage}>250)=\beta_0+\beta_1\,\text{year}+f_2(\text{age})+f_3(\text{education})$:year 只用線性項,$f_2$ 是 5 df 的平滑樣條,$f_3$ 是每個學歷一個常數的階梯函數。

ISLP 圖 7.13 對 Wage 擬合 $I(\text{wage} > 250)$, 結果最後一張圖的第一個層級 <HS 信賴區間大到看不出東西, 因為那個層級裡一個高收入者都沒有(lab 範例 的交叉表:268 個人、0 個高收入者)。 拿掉那群人重新擬合就正常了(圖 7.14)。這個例子提醒我們: 模型擬合異常時,先檢查列聯表中的類別計數。重配之後,age 與 education 對高收入機率的影響遠大於 year。

觀念釐清
Q:GAM 保住了什麼、放棄了什麼?

保住的是加法可解釋性。因為模型是 $\beta_0 + \sum_j f_j(x_j)$,每個變數的貢獻可以單獨畫出來、單獨解讀:「固定 age 與 education,wage 隨 year 微幅上升」這種句子講得出來,而且圖 7.11 那三張圖就是證據。線性模型的 $\beta_j$ 也有這個好處,但 GAM 不必假設那個關係是直線。額外的好處是每個 $f_j$ 的複雜度可以用自由度總結,一個數字就講完。

放棄的是交互作用。加法性意味著「age 的效果」跟 education 是什麼無關。如果現實是「大學畢業的人薪水在 40 歲達到高峰,高中畢業的人在 30 歲」,GAM 抓不到。它只會給你一條平均起來的 $f_2(\text{age})$。

要補救有兩條路:手動加 $X_j \times X_k$ 這種乘積項,或者加二維的 $f_{jk}(X_j, X_k)$(用二維平滑器擬合,講義附錄的 thin-plate spline 就是這個)。但兩條路都要你事先知道哪一對變數有交互作用。如果你不知道、又有很多變數,那就該去第 8 章找隨機森林與提升法。它們自動抓交互作用,代價是失去這裡的可解釋性。書上的定位很準:GAM 是線性模型與完全無母數方法之間一個有用的折衷。

QUIZ · GAM 的加法性

如果真實情況是「大學畢業者的薪水在 40 歲達到高峰,高中畢業者在 30 歲」,(7.16) 這個 GAM 會發生什麼事?

(A) 會抓到,因為 f̂(age) 是非線性的,非線性本身就包含了交互作用
(B) 會抓到,因為 education 是類別變數,f̂₃ 會為每個層級各擬合一條 age 曲線
(C) 抓不到。它只會給一條平均起來的 f̂(age),因為加法性假設 age 的效果與 education 無關
延伸:薄板樣條與二維交互作用

薄板樣條的完整表示

薄板樣條把一維曲率懲罰推廣到平面,最小化 $\sum_i(y_i-g(x_{i1},x_{i2}))^2+\lambda J(g)$。把這類 $g(x_j,x_k)$ 加入 GAM 可以表示交互作用,複雜度也必須另外控制。

二維輸入 $x=(x_1,x_2)^T$ 的曲率懲罰為 $J(g)=\iint(g_{11}^2+2g_{12}^2+g_{22}^2)\,dx_1dx_2$,$g_{ab}$ 是對 $x_a$、$x_b$ 的二階偏導數。對互異且仿射設計滿秩的資料點,解可表示成

$$g(x)=\beta_0+\beta_1x_1+\beta_2x_2+\sum_{i=1}^n\alpha_i\eta(\|x-x_i\|),\quad\eta(r)=r^2\log r,\quad\eta(0)=0,$$ $$\sum_i\alpha_i=0,\qquad\sum_i\alpha_ix_{i1}=0,\qquad\sum_i\alpha_ix_{i2}=0.$$

徑向基底的整體常數可吸收入 $\lambda$;講義的 $r^2\log r^2$ 與這裡差一個常數 2,使用時要連同懲罰尺度對齊。令 $K_{ij}=\eta(\|x_i-x_j\|)$(這個 $K$ 是核矩陣,和局部迴歸的權重 $K$ 無關)、$P_i=(1,x_{i1},x_{i2})$,吸收常數後可解區塊系統 $\begin{pmatrix}K+\lambda I&P\\P^T&0\end{pmatrix}\binom\alpha\beta=\binom y0$。它同時限制徑向部分並保留不受曲率懲罰的平面。

EXERCISES · 練習

動手驗證:教科書第 7 章精選題 教科書 · 第 7.9 節 習題

下面幾題取自 ISLP §7.9 的課後習題,題號都對得回課本。先自己想過再點選項; 每個選項都有解說;需要完整解答時,可查閱下面3個站。

進一步練習:計算與推理題
EXERCISE 1 · ISLP 7.9 第 1 題(c)(d)(e)

第 1 題要你證明 $f(x) = \beta_0 + \beta_1 x + \beta_2 x^2 + \beta_3 x^3 + \beta_4 (x-\xi)^3_+$ 真的是立方樣條。為什麼加上 $\beta_4 (x-\xi)^3_+$ 這一項不會破壞 ξ 上的連續性與一、二階導數連續?

(A) 因為 $\beta_4$ 通常估出來很小,所以造成的跳躍可以忽略
(B) 因為 $(x-\xi)^3$ 本身與它的一階、二階導數在 $x = \xi$ 都等於 0,只有三階導數會跳
(C) 因為指示函數 $I(x > \xi)$ 在 ξ 上有定義,所以函數在該點連續
EXERCISE 2 · ISLP 7.9 第 2 題(d)

第 2 題把懲罰換成 $\lambda \int \left[g^{{(m)}}(x)\right]^2 dx$,要你畫出各種 (λ, m) 下的 $\hat g$。當 $\lambda = \infty$、$m = 3$ 時,$\hat g$ 長什麼樣?

(A) 一條二次曲線(最小平方拋物線)
(B) 一條直線(最小平方迴歸線)
(C) 一條穿過每一個資料點的內插曲線
EXERCISE 3 · ISLP 7.9 第 3 題

第 3 題給基底 $b_1(X) = X$、$b_2(X) = (X-1)^2 I(X \ge 1)$,擬合出 $\hat\beta_0 = 1, \hat\beta_1 = 1, \hat\beta_2 = -2$,要你畫出 $X \in [-2, 2]$ 的曲線。下面哪個描述是對的?

(A) $X < 1$ 是斜率 1 的直線(在 $X=1$ 到達 2);$X \ge 1$ 變成開口向下的拋物線,在 $X = 1.25$ 到最高的 2.125,$X = 2$ 掉回 1;整條曲線的值與斜率在 $X=1$ 都連續
(B) $X \ge 1$ 時從 2 單調下降到 1,因為 $\hat\beta_2 = -2$ 是負的
(C) 曲線在 $X = 1$ 有一個跳躍,因為指示函數 $I(X \ge 1)$ 在那裡開關
EXERCISE 4 · ISLP 7.9 第 5 題(a)

第 5 題比較兩個平滑器:$\hat g_1$ 懲罰 $\int \left[g^{{(3)}}\right]^2$,$\hat g_2$ 懲罰 $\int \left[g^{{(4)}}\right]^2$。$\lambda \to \infty$ 時,哪一個的訓練 RSS 較小?

(A) $\hat g_1$,因為懲罰的導數階數較低,代表約束較弱
(B) $\hat g_2$,因為它被逼成三次多項式,比被逼成二次多項式的 $\hat g_1$ 更有彈性
(C) 兩者相同,因為 $\lambda \to \infty$ 時兩個懲罰項都趨近於 0,模型退化成同一個
重點速查與來源

超越線性速查表 教科書 · 第 7 章

來源:完整書目與章節定位

本頁書目與章節定位

  • 教科書:An Introduction to Statistical Learning with Applications in Python。James、Witten、Hastie、Tibshirani、Taylor,2023。原書與下載資訊
    本頁對應:教科書 · 第 7 章開頭;教科書 · 第 7.1 節;教科書 · 第 7.2 節;教科書 · 第 7.3 節;教科書 · 第 7.4.1–7.4.3 節;教科書 · 第 7.4.4–7.4.5 節;教科書 · 第 7.5 節;教科書 · 第 7.6 節;教科書 · 第 7.7 節。
  • 進階參考:The Elements of Statistical Learning。Hastie、Tibshirani、Friedman,第二版。原書與下載資訊
方法與公式速查

考前把這一頁掃過去就好。

七種方法對照

方法基底/機制彈性由什麼控制自由度邊界選參數的辦法
多項式$x, x^2, \ldots, x^d$次數 dd + 1差ANOVA 或 CV
階梯函數$I(c_k \le x < c_{k+1})$切點數 KK + 1尚可CV
線性樣條$x, (x-\xi_k)_+$內部節點數 KK + 2尚可CV
立方樣條$x, x^2, x^3, (x-\xi_k)^3_+$內部節點數 KK + 4差(信賴區間可能很寬)CV(圖 7.6 右)
自然樣條立方樣條 + 兩個自然邊界條件內部節點數 KK + 2好CV(圖 7.6 左)
平滑樣條全部 x 當節點 + 二階導數懲罰λdf$_\lambda$(連續,2 到 m;m 是相異 x 數)好LOOCV 捷徑 / GCV
局部迴歸鄰域內加權最小平方跨距 s$\operatorname{tr}L$(連續)變異偏大(單邊資料)CV

公式速查

名稱式子備註
多項式迴歸$y = \beta_0 + \beta_1 x + \cdots + \beta_d x^d + \varepsilon$式 7.1
擬合值的變異$\widehat{\operatorname{Var}}[\hat f(x_0)] = \ell_0^{\mathsf T} \hat C \ell_0$式 7.2 腳註;信賴區間的來源
階梯函數$y = \beta_0 + \beta_1 C_1(x) + \cdots + \beta_K C_K(x) + \varepsilon$式 7.5;丟掉 $C_0$
基底函數框架$y = \beta_0 + \sum_{k=1}^{K} \beta_k b_k(x) + \varepsilon$式 7.7;基底函數表示
截斷冪基底$h(x, \xi) = (x-\xi)^3_+$式 7.10;每個節點加一個
立方樣條的自由度K + 4K 個內部節點,含截距
自然樣條的自由度K + 2K 個內部節點;兩端點各 1 個二階導數為 0 的條件;含截距
平滑樣條$\min_g \sum_i (y_i - g(x_i))^2 + \lambda \int g''(t)^2 dt$式 7.11;損失+懲罰
有效自由度$\mathrm{df}_\lambda = \sum_i \{S_\lambda\}_{ii}$,$\hat g_\lambda = S_\lambda y$式 7.12–7.13;λ: 0→∞ 時 df: m→2(相異設計點數 m)
平滑樣條的 LOOCV$\sum_i \left[\dfrac{y_i - \hat g_\lambda(x_i)}{1 - \{S_\lambda\}_{ii}}\right]^2$擬合一次就算完,對照式 5.2
局部迴歸$\min_{\beta_0,\beta_1} \sum_i K_{i0}(y_i - \beta_0 - \beta_1 x_i)^2$式 7.14;演算法 7.1
GAM(迴歸)$y = \beta_0 + \sum_j f_j(x_j) + \varepsilon$式 7.15–7.16
GAM(分類)$\log\dfrac{p(X)}{1-p(X)} = \beta_0 + \sum_j f_j(X_j)$式 7.18
重點回顧 1. 多項式、階梯函數、樣條都是同一個基底函數框架的特例。 換掉 $b_k(\cdot)$ 就換掉方法,擬合方法(最小平方)從頭到尾沒變, 第 3 章的推論工具全部照用。
2. 樣條把次數鎖在 3、靠加節點取得彈性;多項式只能拉高次數,代價全落在邊界。 自然樣條以兩個自然邊界條件限制尾端的形狀。
3. 「自由度」在這一章有兩種身分。 d 次多項式的 d + 1 與 K 個內部節點之立方樣條的 K + 4 是含截距的參數個數;平滑樣條的 df$_\lambda$ 是平滑矩陣的跡, 是連續值。它們都能描述彈性,使用時仍要區分各自的定義。
CARDS · 關鍵詞彙卡

關鍵詞彙卡:點卡片翻面 課程詞彙

詞彙卡整理本章講義與 ISLP 第 7 章中常用的統計或機器學習專有名詞,正面附英文名稱。 先看正面的術語,試著說出定義,再翻面核對。可以洗牌複習,也可以搭配本章例子練習解釋。

複習:展開關鍵詞彙卡