① 依序閱讀:每節先讀說明;遇到互動元件時,先預測結果,再操作驗證。 ② 對照來源:章節旁標示課本章節與講義主題,正文保留公式、條件與算例;計算細節、完整實作與證明預設收合,可按需要展開。來源標記可查原教材。 ③ 檢查理解:答錯時先看回饋,再回到相關說明;標為延伸的內容可留待第二輪。 ④ 最後翻關鍵詞彙卡自測術語,並用 重點速查與來源查閱。
教科書:An Introduction to Statistical Learning with Applications in Python(ISLP);
進階參考:The Elements of Statistical Learning(ESL)。章節旁的來源標記可點到本頁書目。
到目前為止的每一個模型都長成 $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 章的最小平方可以照用,只是預測變數換人了。
| 方法 | 彈性怎麼來的 | 由什麼控制 | 邊界行為 | 一句話 |
|---|---|---|---|---|
| 多項式 | 拉高次數 d | d(整數) | 很糟,可能大幅振盪 | 最省事,但 d > 4 就別碰 |
| 階梯函數 | 多切幾段 | 切點數 K | 還可以(常數) | 沒有自然切點就會漏掉趨勢 |
| 立方樣條 | 多加節點 | 內部節點數 K(df = K+4) | 偏糟,信賴區間可能很寬 | 次數固定 3,靠節點取得彈性 |
| 自然樣條 | 多加節點 | 內部節點數 K(df = K+2) | 好,兩端是直線 | 同樣的彈性、更穩的兩端 |
| 平滑樣條 | 調 λ | 有效自由度 dfλ(連續) | 好(兩端線性) | 不必選節點,只要選 λ |
| 局部迴歸 | 調鄰域大小 | 跨距 s | 變異偏大(單邊資料),局部直線可修正部分偏差 | 每次預測都要用到全部資料 |
本章依照這些路線介紹各種方法,搭配例子與互動觀察擬合結果。 先猜結果再按按鈕,再對照畫面,檢查自己對參數效果的理解。
把 age、age²、age³、age⁴ 一起丟進迴歸,為什麼書上還說這是「一般的線性迴歸模型」?
先問三件事:需要解讀單一變數的形狀嗎?兩端外推合理嗎?資料是否足以估計交互作用?多項式牽動整條曲線,樣條讓變化比較局部,局部迴歸在每個目標位置重新估計,GAM 則把多個一維效果加起來。選擇方法時,還要檢查曲線在新資料上的表現;次數、自由度、平滑參數與跨距應用保留資料或 CV 比較。
講義連結的表格資料模型比較研究提醒我們:演算法的表現依資料型態、樣本數、調參預算而變。這裡先建立可解讀的非線性工具;樹與深度學習的比較不能直接用來判定 Wage 的最佳方法。對相同資料和切分比較預測誤差,再把邊界、可解讀性及計算需求一起考量,才能選出適合資料與任務的方法。
本主題的講義來源與延伸閱讀:表格資料上的樹與深度學習比較、表格資料模型比較研究。
最直接的放寬:把直線換成 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_* 分別回答平均與個別觀測的問題。
Lab 的 poly('age', degree=4) 用正交多項式改善數值條件;把相同次數的原始冪次改用另一組滿秩基底表示,不會改變張成的模型空間。因此擬合值相同,係數卻不同,不能把正交基底的第二欄係數讀成年齡平方的係數。新資料必須由訓練時已擬合的轉換器 transform,不能各自重新正交化。
anova_lm 比較 1–5 次的巢狀模型。由低次升至高次時,新增項的 RSS 降幅相對於殘差變異形成 F 統計量;只加一個係數時,該 F 等於相應 t 統計量的平方。它是在指定模型、誤差條件下檢定新增項,不是直接估計泛化誤差。CV 則在每折重新擬合基底和模型,再比較留出觀測的損失;以全資料的轉換器先處理各折,會把應由訓練折決定的資訊帶入驗證折。
本主題的講義來源與延伸閱讀:Wage 資料說明。
Wage 的全部 3000 筆觀察,紅線與淡藍帶是用全部 3000 筆擬合出來的 d 次多項式與 95% 信賴區間。
Ch07-nonlin-lab-zh.ipynb
Ch07-nonlin-lab-zh.ipynb
Ch07-nonlin-lab-zh.ipynb
令 $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,因為新觀測自己也有誤差。
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。
係數的區間與機率的區間不同。單一係數用 $\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$ 分位數。
本主題的講義來源與延伸閱讀:多元迴歸的平均反應區間、logistic 逐點標準誤。
多項式有個結構上的毛病:它是全域的。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$ |
pd.get_dummies() 就是這樣),係數會直接變成各段的平均值。
兩種編碼擬合出來的曲線完全一樣。
pd.cut(age,4) 把年齡範圍分成四個等寬區間;pd.qcut(age,4) 依分位數分成樣本數大致相近的四組。年齡重複值集中時,分位數邊界可能重複,因此不能只由「四組」推論實際得到四個可用區間。講義指定 35、50、65 的切點是依年齡意義分組,也不同於自動等寬或等人數切分。
Lab 的四個年齡區段分別估計平均薪資。邊界左閉或右閉由切分函式設定決定,實作必須保留同一規則;預測新資料時也應沿用訓練資料的切點,而不是重新計算它的分位數。用年齡區段與年份交互作用時,模型可以讓各組有不同年份斜率;這是在加入可解讀的交互作用,並不會讓分段常數自動變得連續。
自己畫圖時,用 plt.step(x_grid, y_pred, where="post"),並讓格點包含切點,跳躍才會落在正確位置。同一區間內的基底向量都一樣,所以預測值和逐點標準誤也都是常數,信賴區間同樣呈階梯狀。
Ch07-nonlin-lab-zh.ipynb
只有 age 一個預測變數時,階梯函數在每一段的擬合值是什麼?
若不同年份的年齡斜率不同,可擬合 $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)$。切段可以改變截距,也能讓同一連續變數在不同群中有不同斜率。
比較前兩節的方法:多項式迴歸用的預測變數是 $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 則先從資料學出新特徵,再做迴歸。這一章的基底大多固定,學出來的版本放在下面的收合對照。
這些方法都先把原始變數換成新特徵 $\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)$ 結構。特徵是看同一份資料學來的話,把它當成固定基底算標準誤也會太樂觀。
一個模型可以拆成三層來看:
GAM 主要是在第二層指定加法結構,通常在第一層用樣條基底,在第三層用懲罰避免過度擬合。
下面的元件讓你組合不同基底。左邊每一個核取方塊都是一個基底函數; 你選哪幾個,下面就用那幾個去擬合。三個預設按鈕分別把選擇切成 「三次多項式」、「立方樣條」、「階梯函數」。你會看到它們只是勾選項不同而已。
Wage 的 25% 與 75% 分位數)。
基底函數框架要求 $b_1(\cdot), \ldots, b_K(\cdot)$ 在估係數之前就固定,本身不含要估的參數。這個要求為什麼這麼重要?
樣條在不同區段使用低次多項式,再於節點上接合。三次樣條要求函數值、一階與二階導數連續,因此能彎曲而不出現斷裂或折角;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 左上就是這樣擬合出來的—— 函數在節點上不連續。解法是加約束。每加一個約束就少一個自由度:
一般而言,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$ 階可以改變,故滿足這些條件;基底彼此獨立且數量相符,便張成整個空間。
先看少一階。只要求函數值與一階導數連續,二階導數可以跳——二階導數是「斜率變化的速度」,也就是曲率。曲率突然改變,人眼看得出來:曲線在節點附近會有一個「彈一下」的感覺。所以只到一階不夠。
再看多一階。$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$ 階」的來源:它是還能保留彈性的最高要求。這是標準樣條的定義,數學上並非只能如此:只要求到較低階也可行,重複節點就會降低連續性。
| 樣條次數 | 0 | 1 | 2 | 3 | $d$ |
|---|---|---|---|---|---|
| 連續性 | 不要求(階梯函數) | $C^0$ | $C^1$ | $C^2$ | $C^{d-1}$ |
書上還補了一句很實用的話:三階導數的不連續人眼幾乎偵測不到,所以立方樣條「看起來」就是平滑的。這就是為什麼實務上 degree 3 幾乎是唯一的選擇,更高次只是多花自由度,看起來沒有更平滑。
Ch07-nonlin-lab-zh.ipynb
在 age 上擬合一個有 5 個內部節點的立方樣條(含截距),要估幾個參數?
立方樣條在資料兩端仍有一個問題:兩端的變異很大。 在最小節點以左、最大節點以右,資料只從單邊來,三次多項式卻還有完整的四個自由度可以亂扭。 ISLP 圖 7.4 就在示範這件事。三個節點的立方樣條,兩端的信賴區間用書上的話說是「相當狂野」。
自然樣條(natural spline)在立方樣條上加入兩個自然邊界條件: 左、右端點的二階導數各等於 0,並以端點的值與斜率向邊界外作線性延伸。 這是總共兩個獨立約束。固定 K 代表內部節點數、並把截距算進去時, 立方樣條的 K + 4 個參數因此減為自然立方樣條的 K + 2 個,等於少了兩個基底。
ISLP 圖 7.7 把這件事推到極端:15 個自由度的自然樣條 vs 高次多項式。 課本寫 15 次(df 不含截距),講義寫 14 次(df 含截距),兩者彈性相當,但多項式在尾端大幅振盪,自然樣條則較穩定。 這就是「樣條通常優於多項式」的理由:樣條靠加節點取得彈性、把次數鎖在 3; 多項式只能靠拉高次數,而高次的代價全部集中在邊界。
放哪裡:理論上該把節點放在「函數變化快」的地方,變化慢的地方少放。實務上幾乎沒人這樣做,因為你事先不知道哪裡變化快。標準做法是指定自由度,讓軟體把對應數量的節點放在資料的均勻分位數上。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,先跑起來再說。書上說的是「我們通常採取比較務實的做法」。
Ch07-nonlin-lab-zh.ipynb
自然樣條相對於立方樣條,多了什麼約束、換到了什麼?
給定有序節點 $\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 用只在一段節點範圍非零的局部支撐基底,表示相同的樣條空間,通常更適合計算。更換基底不等於更換模型;需保持次數、節點、邊界條件與截距設定一致。
取非遞減節點序列 $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$ 直接相減而忽略節點定義。
每個內部節點允許曲率改變。把節點放在樣本分位數,可讓各區域都有觀測資料;等距節點在資料稀疏的尾端可能配置過多彈性。邊界外線性限制減少極端振盪,仍不能保證訓練範圍外的預測可靠;新年齡遠超過訓練範圍時仍沒有資料可以驗證延伸的斜率。
$K$ 個內部節點的立方樣條有 $K+4$ 個自由度,最少也是 4,但圖上兩個面板的橫軸都從 1 起算。主要原因是這張圖的 df 不含截距:
| 模型 | 總自由度 | 不含截距 |
|---|---|---|
| 線性迴歸 | 2 | 1 |
| 三次多項式 | 4 | 3 |
| 立方樣條($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 的 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$。
連續性限制和平滑懲罰是兩回事:前者由基底保證,讓各段在節點接得平滑;後者控制整條曲線彎多少,用來避免過度擬合。
本主題的講義來源與延伸閱讀:自然樣條的邊界條件、Patsy 樣條設計矩陣、自然樣條的自由度、B-spline 教材、B-spline 與三次樣條。
迴歸樣條的流程是:選節點 → 造基底 → 最小平方。平滑樣條(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}$$這個無限維最佳化問題的解可以明確寫出:使 (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$ 不懲罰常數與直線;脊迴歸的單位矩陣則對每個方向都懲罰。
令 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 的其實是直線。
兩者都能得到三次樣條,差別在怎麼控制彈性:迴歸樣條限制模型能用多少個方向;平滑樣條允許很多方向,但限制每個方向能發揮多少。
| 迴歸樣條 | 平滑樣條 | 懲罰迴歸樣條(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 只是基底維度的上限,最後的有效自由度仍由懲罰決定。
不完全是。前兩個是同一回事,第三個是另一種東西。
(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 個」。
$\lambda \to \infty$ 時,(7.11) 的解 $\hat 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$ |
| 節點間的次數 | 1 | 3 | 5 | $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$ 計算。
同樣的想法可以搬到 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$ 很小,須處理分離、可識別性與數值穩定性。
負對數概似 $\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 就宣稱兩者結果必然相同。
本主題的講義來源與延伸閱讀:Bone Mineral Density 平滑範例。
再換一個想法。前面所有方法都在擬合一個全域的函數形式 (就算是分段的,段的邊界也是事先定死的)。局部迴歸(local regression)說: 要預測 $x_0$ 上的值,就只用 $x_0$ 附近的點,擬合一條加權直線,取它在 $x_0$ 的值。 換一個 $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 一樣可以用交叉驗證選。
| span s | 鄰域 | 曲線 | ISLP 圖 7.10 標的有效自由度 |
|---|---|---|---|
| 0.2 | 20% 的資料 | 抖,跟著局部起伏 | 16.4 |
| 0.7 | 70% 的資料 | 平滑 | 5.3 |
| 1.0 | 全部資料,仍按距離加權 | 通常更平滑,但不一定是直線 | 不一定等於 2 |
為什麼局部迴歸被叫做「記憶式(memory-based)」方法?
用中心化的局部設計向量 $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 無限制推廣到所有特徵。
前面七節都只處理一個預測變數。現在把它們裝到多變數上。 多元線性迴歸是 $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$ 是一般的光滑函數,有限個基底通常只是近似。
其中 education 是類別變數,$f_3$ 就是「每個層級一個常數」(虛擬變數)。
如果 $f_1, f_2$ 用自然樣條,整個模型只是一個較大的線性迴歸模型
(基底矩陣橫向疊起來就好),sm.OLS() 一行擬合完。這是圖 7.11。
如果用平滑樣條,需要加入曲率懲罰,可以用
逆向擬合(backfitting)。這是圖 7.12。
講義的設定是 year 用 4 df、age 用 5 df;換成同樣自由度的平滑樣條,在這個例子裡兩種 GAM 的結果差別很小。
Ch07-nonlin-lab-zh.ipynb
講義先使用 $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)$ 不足以表示,要明確加入交互作用或二維平滑項,並重新驗證;不能把任何殘差結構都當成該增加平滑項。
本主題的講義來源與延伸閱讀:偏殘差的定義。
常數可在截距與成分之間任意移動,因此使用 $\sum_i f_j(x_{ij})=0$ 的樣本中心化限制。平方損失下先令 $\hat\beta_0=\bar y$、各成分為 0,再循環更新每一個 $j$。好處是只要有一維的擬合工具,就能擬合任意多變數的加法模型;ISLP §7.9 第 11、12 題用線性迴歸版本讓你手動跑一遍。
對 Gaussian GAM,固定基底與二次懲罰也可聯合解線性系統;二元 GAM 須在 IRLS 的工作反應與權重下更新,不能直接對 $0/1$ 反應套普通 backfitting。
那什麼時候真的需要 backfitting?自然樣條這類固定基底,直接聯合最小平方最簡單;局部迴歸沒有一組全域基底,沒辦法橫向疊成設計矩陣,這時 backfitting 最方便。現代套件如 R 的 mgcv 用懲罰迴歸樣條做聯合估計,非高斯反應則用懲罰的 IRLS(PIRLS)。
固定其他成分後,總目標中依賴 $f_j$ 的部分恰是 $\sum_i(r_i-f_j(x_{ij}))^2+\lambda_jJ(f_j)$($J$ 是粗糙度懲罰,例如 $\int f_j''^2$),所以精確的一維更新會使同一目標不增加。對固定基底、凸二次懲罰及可識別的聯合系統,分塊更新可解同一最小化問題;任意套入非線性平滑器時,不可直接承諾這個收斂結果。中心化固定的是參數表示,避免把常數在各成分之間反覆搬動。
pygam 裡用 f_gam(2, lam=0) 指定——類別項就是每個層級一個常數,沒有「平滑程度」可以調,而且 lam=0 表示完全不收縮。它的自由度固定是「層級數 − 1」。
成分圖畫已擬合的 $\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 再轉換。年齡與教育高度相關時,替換年齡可能產生訓練資料中少見或未出現的組合;「控制其他變數」的圖形文字不構成因果識別。
把完整線性設計分成 $[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$ 無關)。
講義的模型是 $\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。
保住的是加法可解釋性。因為模型是 $\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 是線性模型與完全無母數方法之間一個有用的折衷。
如果真實情況是「大學畢業者的薪水在 40 歲達到高峰,高中畢業者在 30 歲」,(7.16) 這個 GAM 會發生什麼事?
薄板樣條把一維曲率懲罰推廣到平面,最小化 $\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$。它同時限制徑向部分並保留不受曲率懲罰的平面。
本主題的講義來源與延伸閱讀:部分迴歸圖、偏殘差圖、GAM 圖中的殘差、含截距 OLS 的殘差和、OLS 殘差與設計欄的正交性、PDP 的計算與限制。
下面幾題取自 ISLP §7.9 的課後習題,題號都對得回課本。先自己想過再點選項; 每個選項都有解說;需要完整解答時,可查閱下面3個站。
第 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_+$ 這一項不會破壞 ξ 上的連續性與一、二階導數連續?
第 2 題把懲罰換成 $\lambda \int \left[g^{{(m)}}(x)\right]^2 dx$,要你畫出各種 (λ, m) 下的 $\hat g$。當 $\lambda = \infty$、$m = 3$ 時,$\hat g$ 長什麼樣?
第 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]$ 的曲線。下面哪個描述是對的?
第 5 題比較兩個平滑器:$\hat g_1$ 懲罰 $\int \left[g^{{(3)}}\right]^2$,$\hat g_2$ 懲罰 $\int \left[g^{{(4)}}\right]^2$。$\lambda \to \infty$ 時,哪一個的訓練 RSS 較小?
考前把這一頁掃過去就好。
| 方法 | 基底/機制 | 彈性由什麼控制 | 自由度 | 邊界 | 選參數的辦法 |
|---|---|---|---|---|---|
| 多項式 | $x, x^2, \ldots, x^d$ | 次數 d | d + 1 | 差 | ANOVA 或 CV |
| 階梯函數 | $I(c_k \le x < c_{k+1})$ | 切點數 K | K + 1 | 尚可 | CV |
| 線性樣條 | $x, (x-\xi_k)_+$ | 內部節點數 K | K + 2 | 尚可 | CV |
| 立方樣條 | $x, x^2, x^3, (x-\xi_k)^3_+$ | 內部節點數 K | K + 4 | 差(信賴區間可能很寬) | CV(圖 7.6 右) |
| 自然樣條 | 立方樣條 + 兩個自然邊界條件 | 內部節點數 K | K + 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 + 4 | K 個內部節點,含截距 |
| 自然樣條的自由度 | K + 2 | K 個內部節點;兩端點各 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 |
詞彙卡整理本章講義與 ISLP 第 7 章中常用的統計或機器學習專有名詞,正面附英文名稱。 先看正面的術語,試著說出定義,再翻面核對。可以洗牌複習,也可以搭配本章例子練習解釋。