最大邊界與核技巧

ISLP 第 9 章 — 對應講義 09
超平面|最大邊界|支持向量|軟邊界 C|Hinge loss|核技巧|多項式核|RBF 核
向下捲動開始互動↓
📌 本頁使用方式(ISLP Ch.9|講義 09)

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

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

CONTENTS · 內容目錄
PROLOGUE · 開場

超平面:把分類問題變成幾何問題 教科書 · 第 9.1 節講義 09

前面幾章介紹了不同的分類方式:邏輯斯迴歸去估 $\Pr(Y \mid X)$,LDA 去估 $\Pr(X \mid Y)$ 再用貝氏定理翻回來,樹去切區塊。這一章換一條路—— 直接在特徵空間裡找一片把兩類分開的平面。不估機率、不假設分佈, 就是幾何。

講義整理了本章的思路:先試著找一片分得開的平面; 如果找不到,往兩個方向想辦法。把「分開」的定義放鬆(軟邊界), 以及把特徵空間變大(核)。這兩招合起來就是支持向量機。

三層結構,一層一層加東西 1. 最大邊界分類器(maximal margin classifier): 資料完全分得開時,選離兩邊都最遠的那一刀。
2. 支持向量分類器(support vector classifier):允許少數點犯規, 用一個調整參數決定容忍度。也叫軟邊界分類器。
3. 支持向量機(support vector machine, SVM):把內積換成核, 邊界就彎起來了。
三者是逐步擴充的三個層次。最外面那層用線性核時 就得到線性的支持向量分類器,仍然是第二層的軟邊界;線性核本身不會移除容錯懲罰。

起點是超平面(hyperplane)。p 維空間裡的超平面是一個 p − 1 維的 平坦仿射子空間;p = 2 就是一條線,p = 3 就是一個平面。它的方程式是:

$$\beta_0 + \beta_1 X_1 + \beta_2 X_2 + \cdots + \beta_p X_p = 0$$

寫成 $f(X) = \beta_0 + \beta^{\top} X$。滿足 $f(X) = 0$ 的點在超平面上, $f(X) > 0$ 的點在一側、$f(X) < 0$ 的點在另一側。所以只要看 $f(X)$ 的正負號, 就知道一個點站在哪一邊——分類問題被壓成一次算術。

而且 $f(X)$ 的大小也有意思。向量 $\beta = (\beta_1,\dots,\beta_p)$ 是超平面的法向量(normal vector),指向與超平面垂直的方向; 點 $x$ 到超平面的垂直距離正好是

$$\text{距離} = \frac{|f(x)|}{\lVert \beta \rVert}, \qquad \lVert \beta \rVert = \sqrt{\beta_1^2 + \cdots + \beta_p^2}$$

所以 $|f(x)|$ 大就是離邊界遠、這個判斷有把握;$|f(x)|$ 接近 0 就是貼在邊界上、 隨時可能翻盤。這個「離邊界多遠 = 多有把握」的直覺,是整章的地基。

›拖三個滑桿看超平面怎麼動,以及三個測試點的 f(x) 怎麼變。
β₀1.0
β₁2.0
β₂3.0
講義/課本重繪
怎麼玩 圖 9.1
三個滑桿分別調 β₀、β₁、β₂。藍色區域是 f(x) > 0、紅色區域是 f(x) < 0,中間那條紅線就是超平面。綠色短箭頭是法向量 β 的方向。注意它永遠垂直於線。預設值 1、2、3 就是 ISLP 圖 9.1 畫的那條 1 + 2X₁ + 3X₂ = 0。
目前的超平面
方程式—
‖β‖—
A 點:f(x) | 距離—
B 點:f(x) | 距離—
C 點:f(x) | 距離—
兩個容易忽略的細節
① 係數整組縮放不改變超平面。三個滑桿同時乘 3,線不動、f(x) 卻變三倍。
② β₁ 與 β₂ 同時是 0 就沒有超平面。把那兩個滑桿都推到 0 看看。

有了超平面,分類規則就寫完了:把 $y_i$ 編碼成 $\pm 1$, 分離超平面(separating hyperplane)就是滿足

$$y_i\left(\beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip}\right) > 0 \qquad \text{對每一筆 } i = 1, \dots, n$$

的那些超平面(ISLP 式 9.8)。這一個式子把「藍色的要 $f > 0$、紫色的要 $f < 0$」 兩條規則合成一條,因為 $y_i$ 自己會把符號翻過來。這個 $y_i f(x_i)$ 之後會一直出現, 它就是「這一筆分對了嗎、有多篤定」的度量。

方法示範與原 Lab
線性支持向量分類器
svm_linear = SVC(C=10, kernel='linear') svm_linear.fit(X, y)
來源:Ch09-svm-lab-zh.ipynb
計算:點到超平面的距離

點到超平面的距離

對 $w\ne0$,點 $x$ 到 $w^Tz+b=0$ 的距離為 $|w^Tx+b|/\|w\|$。 若 $w=0$,就不是這裡所說的超平面,不能除以 $\|w\|$。

證明:垂直投影得到距離公式

沿法向量移動到 $z=x-tw$,要求 $w^Tz+b=0$,解得 $t=(w^Tx+b)/\|w\|^2$。因此垂足與原來的點 $x$ 的距離是 $\|x-z\|=|t|\|w\|=|w^Tx+b|/\|w\|$。 對平面內任何另一點,其與垂足的差垂直於 $w$,畢氏定理保證距離不會更短。 來源:講義 09的點線距離與 scalar projection 連結。

QUIZ · 超平面

把某個超平面的係數 (β₀, β₁, β₂) 全部乘上 −2,會發生什麼事?

(A) 超平面會平移,但方向不變
(B) 超平面本身完全不動,但每個點的 f(x) 變成 −2 倍,正負兩側因此互換
(C) ‖β‖ 不變,所以距離不變,一切照舊
生成式與判別式:SVM 到底學了什麼?

回想第四章:LDA 先估計每類的特徵分布,再用 Bayes 定理把它轉成類別機率;邏輯斯迴歸直接為給定特徵的類別機率建模。SVM 也屬於判別式方法,但它直接學的是分界與決策分數,沒有先建立完整的機率模型。學分界、估機率與描述每類資料,是三種不同的建模選擇。

$$P(Y=k\mid x)=\frac{\pi_k p(x\mid Y=k)}{\sum_\ell\pi_\ell p(x\mid Y=\ell)},\qquad \hat y_{\rm SVM}=\operatorname{sign}(f(x)).$$

生成式方法的問題是「每類通常會產生怎樣的資料?」判別式方法的問題是「給定這筆資料,類別應該怎麼分?」SVM 進一步把學習問題寫成「保留間隔,同時付出多少違反間隔的成本?」因此不需要假設每一類都是 Gaussian,也不能從沒有 Gaussian 假設推論 SVM 一定更準。

講義附錄以回應/特徵的資料型態整理統計方法,那是選方法的起點。LDA 需要檢查類別條件分布及共變異數假設;邏輯斯迴歸不要求特徵為非 Gaussian,也可以處理 Gaussian 特徵。ANOVA 與迴歸也不是互斥的工具:類別特徵可以透過指示碼進入迴歸。

高維資料即使容易分開,測試資料仍可能分錯。SVM 的正則化與核選擇尤其重要。預測只用支持向量不代表訓練成本低:核矩陣仍可能涉及大量成對計算。

閱讀:LDA/QDA 的機率模型、SVM 的用途與限制。

PART 01 · 最大邊界分類器

能分開的話,選離兩邊都最遠的那一刀 教科書 · 第 9.1.3–9.1.4 節講義 09

如果資料真的分得開,麻煩來了:分離超平面有無限多個。 隨便一條分得開的線,都可以稍微平移一點、旋轉一點,還是分得開(ISLP 圖 9.2 左畫了三條)。 無限多個候選,總得有個挑法。

挑法很自然:選離兩邊都最遠的那一條。先算每個訓練點到超平面的垂直距離, 其中最小的那個距離叫做邊界(margin,ISLP 記為 M); 邊界最大的那個分離超平面就是最大邊界超平面(maximal margin hyperplane, 也叫最佳分離超平面)。用它做分類就是最大邊界分類器。

一句話的幾何直覺 最大邊界超平面就是能塞進兩類之間那塊最寬「板子」的中線。 板子有多寬由最擠的地方決定,所以答案只跟「最擠的那幾個點」有關。這件事等一下會變成 後續會用到的性質。
完整硬邊界問題:primal、dual 與 KKT

寫成最佳化問題(ISLP 式 9.9–9.11):

$$\begin{aligned} &\underset{\beta_0,\beta_1,\dots,\beta_p,\,M}{\text{maximize}} \quad M \\ &\text{subject to} \quad \sum_{j=1}^{p} \beta_j^2 = 1, \\ &\qquad\qquad\quad\; y_i\left(\beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip}\right) \ge M \quad \forall\, i \end{aligned}$$

兩個限制式各有分工。$\sum \beta_j^2 = 1$ 用來固定係數的尺度;縮放係數不改變超平面, 這項設定可把 $y_i f(x_i)$ 校準成距離; 有了這個校準,第二條 $y_i f(x_i) \ge M$ 才真的在說「每一筆都在正確一側,而且至少離 M 遠」。 於是 M 就是邊界,而目標函數就是把它推到最大。

順便說一句:ISLP §9.7 第 3 題就是這個元件的手算版。它給你 7 個點, 答案是 $X_2 = X_1 - 0.5$,支持向量是第 2、3、5、6 筆,$M = 1/(2\sqrt{2}) \approx 0.354$; 第 (f) 小題問「第 7 筆稍微移動會不會影響超平面」。你在上面拖過就知道答案了。 本頁 EX 區的第 3 題會再問一次。

把最大邊界寫成可求解的問題

以下令標籤 $y_i\in\{-1,+1\}$,$f(x)=b+w^Tx$,兩類都至少有一筆。 先假設訓練資料線性可分。前面的 $\|\beta\|=1$ 固定方向長度、最大化幾何邊界 $M$; 現在同時縮放係數與截距,使最近點的函數間隔 $y_i f(x_i)$ 等於 1。 此時幾何半寬是 $1/\|w\|$,整條間隔帶寬是 $2/\|w\|$。

原始問題(primal)直接求超平面的係數:

$$\min_{w,b}\ \frac12\|w\|^2\qquad \text{使得 }y_i(w^Tx_i+b)\ge1\quad(i=1,\ldots,n).$$

對偶問題(dual)改求每個限制式的非負乘子。令 $K_{ij}=x_i^Tx_j$:

$$\max_{\alpha\in\mathbb R^n}\ D(\alpha) =\sum_i\alpha_i-\frac12\sum_{i,j}\alpha_i\alpha_jy_iy_jK_{ij}, \qquad \alpha_i\ge0,\quad \sum_i\alpha_i y_i=0.$$

等式限制不能省略:它來自未受懲罰的截距 $b$。求得 $\hat\alpha$ 後, $\hat w=\sum_i\hat\alpha_i y_i x_i$;對任何 $\hat\alpha_s>0$ 的點, $\hat b=y_s-\hat w^Tx_s$。這些點才是這個對偶解的支持向量。 位於間隔邊界是必要條件,但退化時,邊界上的點也可能有 $\alpha_i=0$。

證明:硬邊界的 Lagrangian、對偶與 KKT

從單位長度的表示令 $w=\beta/M$、$b=\beta_0/M$,就有 $\|w\|=1/M$ 與 $y_i(w^Tx_i+b)\ge1$。最大化 $M>0$ 等價於最小化 $\|w\|$,也等價於最小化其平方的一半。

把限制寫成 $1-y_i(w^Tx_i+b)\le0$,Lagrangian 為

$$L(w,b,\alpha)=\frac12\|w\|^2+ \sum_i\alpha_i[1-y_i(w^Tx_i+b)],\qquad \alpha_i\ge0.$$

對固定的非負 $\alpha$,$g(\alpha)=\inf_{w,b}L$ 是原始最小值的下界, 所以對偶是最大化這個下界。先對原始變數求最小:

$$\nabla_w L=w-\sum_i\alpha_i y_i x_i=0,\qquad \frac{\partial L}{\partial b}=-\sum_i\alpha_i y_i=0.$$

若第二式不成立,線性項可隨 $b$ 趨向負無限,$g(\alpha)=-\infty$;因此必須保留等式限制。 代入第一式,$\sum_i\alpha_i y_iw^Tx_i=\|w\|^2$,便得到

$$g(\alpha)=\sum_i\alpha_i-\frac12\left\|\sum_i\alpha_i y_ix_i\right\|^2 =D(\alpha).$$

可分時可把分離超平面放大到所有限制均嚴格成立,因此滿足 Slater 條件。 這是凸問題,故原始與對偶最佳值相同。其 KKT 條件完整列為

$$\begin{aligned} y_i(w^Tx_i+b)&\ge1 &&\text{原始可行},\\ \alpha_i&\ge0 &&\text{對偶可行},\\ w=\sum_i\alpha_i y_ix_i,\quad\sum_i\alpha_i y_i&=0 &&\text{stationarity},\\ \alpha_i[1-y_i(w^Tx_i+b)]&=0 &&\text{互補鬆弛}. \end{aligned}$$

最後一式使 $\alpha_s>0$ 的點滿足 $y_sf(x_s)=1$,且 $y_s^2=1$, 所以 $b=y_s-w^Tx_s$。嚴格位於間隔外的點必有零乘子;反向推論需注意等號與退化情況。

來源:講義 09; 林軒田:Dual SVM,PDF 第 6–21 頁。

為什麼要由 primal 轉到 dual?

Primal 直接找法向量與截距,因此有 $p+1$ 個主要未知數;dual 改為找每筆資料的權重 $\alpha_i$,有 $n$ 個未知數。當特徵很多而樣本相對少時,dual 提供另一種表達;更關鍵的是,dual 只透過內積接觸特徵,可以在後面直接換成核函數。Dual 的計算速度還受資料稀疏度與求解器影響,不能只由未知數數量判斷。

弱對偶表示任何可行 dual 值都是 primal 最小值的下界。線性可分時,縮放一個分隔面可使所有間隔限制嚴格成立;在這個凸問題下可使用強對偶,最適值相等。KKT 條件用來檢查 primal 與 dual 是否共同達到最適。

實際讀解時依序檢查:$y_if(x_i)\ge1$、$\alpha_i\ge0$、$\sum_i\alpha_i y_i=0$、$w=\sum_i\alpha_i y_ix_i$,最後檢查 $\alpha_i[y_if(x_i)-1]=0$。只有正乘子的點會在最後的 $f(x)$ 留下貢獻。剛好位在間隔上的點未必都有正乘子,退化資料尤其如此。

最大間隔固定法向量的最佳方向;如果最小值或資料幾何有退化,不能把「加入 margin」說成任何情況下所有參數都唯一。不可分時也不能直接強迫硬邊界問題有解。

完整推導:林軒田:Dual SVM、Stanford CS229:SVM。

›拖動任何一個點。粗框標示接觸間隔的點;對偶乘子是否為正還需由最佳化判斷。
概念示意
怎麼玩
直接拖動任何一個點。元件會即時解出最大邊界超平面:紅實線是邊界、兩條虛線是 margin 的兩側、加粗描邊的點是支持向量。
重點在這裡:拖動任何一個沒被描邊的點,只要不越過虛線,紅線一動也不動。拖到越過虛線,它就變成支持向量、線立刻跟著動。
即時解
margin 半寬 M—
板子總寬 2M—
間隔接觸點個數—
邊界(f = 0)—
解是怎麼算出來的
這個元件使用等價的幾何性質:最大邊界超平面就是兩類凸包最近點對連線的垂直平分線,M 是那段距離的一半(紫色線段)。點很少,把所有候選組合都算一遍就好,每次拖曳都重算。
凸包一旦重疊就不存在分離超平面。把兩堆點拖到交錯,元件會直接說解不出來。

虛線上的點是間隔接觸點;其中在對偶解中有正乘子的點是支持向量(support vector)。退化時接觸點也可能有零乘子。 這些點決定超平面的位置;移動它們,超平面可能跟著改變。 移動其他點則不影響超平面(只要那個點沒有越過 margin)。ISLP 對這個性質的說明是:

最大邊界超平面只依賴支持向量,不依賴其他觀測值 這是本章反覆出現的主題。 好處是對離邊界很遠的點極度穩健——LDA 的規則要用到每一類的平均與整體共變異, 換掉一個遠處的點就會動;最大邊界超平面不會。
壞處是對支持向量極度敏感。ISLP 圖 9.5 就是這個代價:右圖只多加一個藍點, 最大邊界超平面就大幅轉向,而且 margin 縮到極窄。只靠三個點決定的分類器, 下一節會用軟邊界改善這種敏感性。
觀念釐清
Q:為什麼叫「支持向量」?為什麼只有它們影響解?

先說「向量」:在 p 維空間裡,一筆觀測值 $x_i$ 就是一個 p 維向量,所以這些點本來就是向量。「支持」則是力學的比喻。它們位於 margin 的兩側,移除其中一點可能改變最佳邊界。

從最佳化的角度看:最大邊界問題的限制式是 $y_i f(x_i) \ge M$。在最佳解上,只有取等號的那些限制式是「緊的」(active);取嚴格大於的限制式仍有餘裕,把它整條刪掉,解一模一樣。在下面改成函數間隔為 1 的表示後,KKT 條件給出完整的乘子限制與解的表示。邊界上的點可能有零乘子,因此不能把『取等號』與『乘子嚴格為正』當成雙向等價。

從損失函數的角度看:本頁 PART 03 會證明支持向量分類器等價於最小化hinge loss 加上 ridge 懲罰。$y_i f(x_i) > 1$ 的點落在損失曲線的平坦區,不影響目前的最佳解;$y_i f(x_i) = 1$ 的點雖然損失也是 0,卻位於折角,仍可能是支撐解的支持向量。

Q:margin 大在測試資料上真的比較好嗎?

直覺上合理:margin 大表示兩類之間有一塊很寬的無人區,新資料落進來也大概不會踩線。ISLP 就是這樣說服讀者的——「我們希望訓練資料上 margin 大的分類器在測試資料上 margin 也大」。

但它明確加了一句警告:p 很大的時候最大邊界分類器會過度擬合。維度愈高,愈容易找到一片「剛好」把訓練資料切開的超平面。那片超平面的位置可能完全由雜訊決定。lab 的 Khan 資料就是極端例子:n = 63 而 p = 2308,訓練誤差輕鬆變成 0,「這並不令人驚訝」。

所以實務上幾乎沒有人用純粹的最大邊界分類器。常用的是加了正則化的軟邊界版本,而且那個調整參數要靠交叉驗證選。

QUIZ · 最大邊界

在最大邊界分類器裡,把一個非支持向量的點往遠離邊界的方向移動一小段,解會怎麼變?

(A) 會稍微改變,因為目標函數是所有點的距離總和
(B) 完全不變。它對應的限制式本來就是鬆的,移動之後更鬆,一樣不影響最佳解
(C) 邊界方向不變,但 β₀ 會微調,因為資料的重心動了
延伸:從感知器到最大邊界

從感知器到最大邊界

感知器(perceptron)逐筆檢查標籤 $y_i\in\{-1,1\}$。若 $y_i(w^Tx_i+b)\le0$,更新 $w\leftarrow w+\eta y_i x_i$ 與 $b\leftarrow b+\eta y_i$;這會增加該筆資料的帶符號分數。正確可分時停止更新。線性可分且樣本有界時可保證有限次修正後找到分隔面,但分隔面依初值與順序而變,也不以最大化邊界為目標。SVM 加入範數/邊界準則,軟邊界再容許違反限制,核方法則擴展特徵空間。

判別式方法直接學分類分數或 $P(Y\mid X)$;生成式 LDA 先建模 $P(X\mid Y)$ 與先驗。邏輯斯迴歸不要求 $X$ 為非高斯,也可用於高斯特徵;選擇方法應看模型假設與獨立評估,不能只用特徵是否高斯來劃分。

更新方向怎麼判斷?

標籤採 $\{-1,1\}$ 且分類錯誤時,感知器的更新 $w\leftarrow w+\eta y_ix_i$、$b\leftarrow b+\eta y_i$ 會提高這筆資料的 signed score。若用 0/1 輸出 $o_i$ 與目標 $y_i$ 表示,修正方向是「目標減輸出」。使用「輸出減目標」卻仍加到權重上會往錯誤方向走;不同記號必須連同更新的正負號一起核對。

感知器找到任一分隔面便可能停止;SVM 在可行分隔面間再比較間隔。非線性可分資料上,基本感知器不保證有限步收斂,軟邊界 SVM 則明確用損失接受部分違反。閱讀:Perceptron 的學習規則。

PART 02 · 軟邊界與 C

不能完全分開時:允許犯錯,用 C 決定容忍度 教科書 · 第 9.2 節講義 09

上一節結尾的兩個問題要一起解決。第一個是資料常常無法完全線性分開 (講義:除非 n < p,通常都分不開),這時 M > 0 的解不存在, 整個最佳化問題沒有答案。第二個是就算分得開,硬要分開也可能是壞主意 ——ISLP 圖 9.5 只加一個點就讓超平面大幅轉向,margin 縮到極窄。

解法是把「分開」的定義放鬆:允許少數點跑到 margin 錯的一側, 甚至跑到超平面錯的一側。換來的是兩件 ISLP 明列的好處—— 對單一觀測值更穩健,以及大多數點分得更好。 這個分類器叫支持向量分類器,也叫軟邊界分類器 (margin 之所以「軟」,就是因為它可以被違反)。

下方互動採用 SVC 的懲罰權重 C:較大 C 更重視減少違反間隔的損失;較小 C 容許更多違反,以換取較寬的間隔。講義的違反量預算也記作 C;下方延伸推導將這個預算改記為 B,以區分它與 SVC 的懲罰權重。兩者沒有普遍的倒數換算。

完整軟邊界對偶:slack、限制、KKT 與截距
$$\begin{aligned} &\underset{\beta_0,\dots,\beta_p,\,\epsilon_1,\dots,\epsilon_n,\,M}{\text{maximize}} \quad M \\ &\text{subject to} \quad \sum_{j=1}^{p} \beta_j^2 = 1, \\ &\qquad\qquad\quad\; y_i\left(\beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip}\right) \ge M\left(1 - \epsilon_i\right), \\ &\qquad\qquad\quad\; \epsilon_i \ge 0, \quad \sum_{i=1}^{n} \epsilon_i \le C \end{aligned}$$

新東西是鬆弛變數(slack variable)$\epsilon_i$:它記錄第 i 筆 相對於 margin 與超平面的位置。以下假設 $M>0$,以最小必要 slack $\epsilon_i=\max(0,1-y_if(x_i)/M)$ 解讀;分類門檻上的點須另外處理:

對照違反量、分類結果與支持向量
εᵢ 的值這一筆在哪裡是支持向量嗎分類正確嗎
εᵢ = 0在 margin 正確的一側(或剛好在 margin 上)間隔上的點可能是;需檢查乘子是
0 < εᵢ < 1違反 margin,但分數仍在正確一側是(C>0 的最佳解)是
εᵢ = 1恰在超平面上,分數為 0是(C>0 的最佳解)由平手規則決定
εᵢ > 1跑到超平面錯的一側是否

然後是 $\sum_i \epsilon_i \le C$ 這一條。ISLP 把 C 說成 「margin 可以被違反多少的預算」:C = 0 時沒有預算, 所有 $\epsilon_i$ 必須是 0,整個問題退回最大邊界超平面; C 愈大,愈容忍違反,margin 就愈寬。接下來需區分兩種 C 的定義:

軟邊界:為什麼乘子多了一個上界?

從此處起以 $C>0$ 表示懲罰權重,另以 $B$ 表示違反量預算,避免兩者混淆。 軟邊界容許 $\xi_i\ge0$,原始問題為

$$\min_{w,b,\xi}\frac12\|w\|^2+C\sum_i\xi_i, \quad y_i(w^Tx_i+b)\ge1-\xi_i,\quad\xi_i\ge0.$$

對偶的目標與硬邊界相同,但每個乘子現在都受 $C$ 限制:

$$\max_{\alpha}\ \sum_i\alpha_i-\frac12\sum_{i,j}\alpha_i\alpha_jy_iy_jK_{ij}, \qquad 0\le\alpha_i\le C,\quad\sum_i\alpha_i y_i=0.$$

對 $C>0$ 的最佳解,$\xi_i=\max(0,1-y_if(x_i))$。 KKT 條件把點分成三類,表中邊界等號都要保留:

乘子最佳解上的位置如何解讀
$\alpha_i=0$$\xi_i=0,\ y_if(x_i)\ge1$該對偶解不使用此點;退化時仍可能恰好在間隔上
$0<\alpha_i<C$$\xi_i=0,\ y_if(x_i)=1$自由支持向量,可用來回復截距
$\alpha_i=C$$y_if(x_i)=1-\xi_i\le1$有上界的支持向量;可能在間隔上、帶內或分錯,不等同於一定分錯
證明:軟邊界對偶的盒狀限制與完整 KKT

對 margin 限制引入 $\alpha_i\ge0$,對 $-\xi_i\le0$ 引入 $\mu_i\ge0$:

$$L=\frac12\|w\|^2+C\sum_i\xi_i+ \sum_i\alpha_i[1-\xi_i-y_i(w^Tx_i+b)]-\sum_i\mu_i\xi_i.$$

對 $w,b$ 的導數與硬邊界相同,對每個 $\xi_i$ 則有

$$C-\alpha_i-\mu_i=0\quad\Longrightarrow\quad0\le\alpha_i\le C.$$

代入後含 $\xi_i$ 的項消失,留下正文的對偶目標。所有最佳化條件為

$$\begin{gathered} \xi_i\ge0,\quad y_if(x_i)\ge1-\xi_i,\quad\alpha_i\ge0,\quad\mu_i\ge0,\\ w=\sum_i\alpha_i y_ix_i,\quad\sum_i\alpha_iy_i=0,\quad C-\alpha_i-\mu_i=0,\\ \alpha_i[1-\xi_i-y_if(x_i)]=0,\qquad \mu_i\xi_i=0. \end{gathered}$$

$\alpha_i<C$ 時 $\mu_i>0$,因此 $\xi_i=0$;若又有 $\alpha_i>0$, 第一個互補式迫使 $y_if(x_i)=1$。$\alpha_i=C$ 時只能由第一個互補式得到 $y_if(x_i)=1-\xi_i\le1$。這導出正文三類,而不是「支持向量都剛好在邊界上」。

即使不可分,取 $w=b=0$、所有 $\xi_i>1$ 也嚴格可行,所以此凸問題仍有強對偶。 數值求解時另以可行殘差與 primal–dual gap 判斷精度,不能要求浮點數恰好等於零。

來源:講義 09; 林軒田:Soft-Margin SVM; CMU:SVM as a Convex Optimization Problem。

回復截距與核對答案

有 $0<\alpha_s<C$ 時,取 $b=y_s-\sum_i\alpha_i y_iK(x_i,x_s)$; 數值計算通常平均多個這類點的估計。若沒有自由支持向量,不能除以它們的數量, 也不能任取一個 $\alpha_s=C$ 的點套用等式。令 $g_i=\sum_j\alpha_jy_jK(x_j,x_i)$, 從零乘子的 $y_i(g_i+b)\ge1$ 及上界乘子的 $y_i(g_i+b)\le1$, 分別得到 $b$ 的上下界,選其可行區間內的值。

自我檢測 · 對偶與支持向量

在軟邊界最佳解中,$\alpha_i=C$ 能推出哪件事?

(A) 此點一定被錯誤分類
(B) 可以無條件用 $b=y_i-w^Tx_i$ 求截距
(C) $y_if(x_i)\le1$,但不一定分錯

預算、懲罰與錯分數不是同一個量

講義的 const 限制總違反量;sklearn 的 C 則把違反量放進目標函數。預算較大表示容許更多違反;懲罰較大表示更不願付出違反量。兩者在正則化路徑上對應,但沒有適用所有資料的固定 $C=1/\mathrm{const}$ 公式。

若 $\epsilon_i>1$,這筆資料在分界的錯誤側,所以每個嚴格錯分點都花掉超過一單位預算。這只給錯分數的上界,不能把總 slack 直接當成錯分筆數;分類正確但進入間隔的點也會消耗預算。$\epsilon_i=1$ 則在分界上,類別取決於 tie 的約定。

在懲罰形式中,$0\lt\alpha_i\lt C$ 的點位在間隔上,可由 $b=y_i-w^Tx_i$ 恢復截距;$\alpha_i=C$ 只表示可能違反間隔,不表示一定錯分。如果所有支持向量都在上界,應以可行截距區間求解,不能除以不存在的自由支持向量數。

連到 Lab:較小 $C$ 的線性模型容許更寬的間隔,可能使用更多支持向量。支持向量多寡描述模型使用了哪些資料點;模型品質仍要以保留資料上的指標比較,不能由支持向量數直接判斷。

閱讀:Soft-Margin SVM、CMU 的 primal/dual 複習。

先辨認 C 是預算還是懲罰 ISLP 的 C 是違反量總和的上限; scikit-learn 的 SVC(C=…) 是目標函數中違反量的懲罰權重。 兩者調整方向不同,但沒有普遍的倒數公式。 本頁後面的完整推導以 B 表示預算,以 C 表示懲罰,並區分它與 λ 的精確對應。 下面元件與 Lab 使用 scikit-learn 的 C。
圖表需要連網載入 Chart.js。此圖的重點:sklearn 的 C 從 0.001 加到 100,支持向量個數從 50(全部)一路掉到 27 左右——C 愈大容忍愈少,參與決定邊界的點就愈少。
›選資料集、推 C 的滑桿,看邊界、margin 帶與支持向量怎麼變。
sklearn 的 C1
課程/lab 資料
怎麼看 圖 9.7
上圖:藍與紅是兩類,紅實線是邊界、虛線是 margin 的兩側、淡藍色帶子是 margin 區域。加粗描邊的是支持向量,方框標記的是被錯誤分類(εᵢ > 1)的點。
下圖:同一組資料掃過六個 C,支持向量個數與違反 margin 的點數。
這一格的擬合
sklearn 的 C—
ISLP 的預算 C 相當於—
margin 半寬 1/‖β‖—
支持向量個數—
違反 margin 的點—
被錯誤分類的點—
兩組資料在對什麼
「不可分開」就是 lab 範例 那 50 筆。C = 10 時支持向量 29 個,C = 0.1 時 36 個(lab 範例 的 [18 18])——元件上的數字就是那些數字。
「剛好可分開」是lab 範例 把兩類推開 1.9 之後的版本。C = 10⁵ 只用 3 個支持向量、C = 0.1 用 12 個,正是 ISLP §9.6.1 講的 three 與 twelve。

這張圖顯示固定資料下,C 改變時邊界、支持向量數與誤差的變化。 它不是跨訓練樣本的偏差/變異分解,不能從支持向量數直接推出偏差或變異。 C 控制懲罰強度,實際泛化表現仍需交叉驗證評估。

軟邊界仍保留支持向量的性質:非零對偶乘子的點才直接出現在解的表示中。嚴格待在正確一側的點, 你把它拖到再遠的地方,分類器完全不變。移動一個支持向量也不保證解一定改變,仍需看其餘限制與是否退化。

方法示範與原 Lab
辨認支持向量
# get indices of support vectors svm_linear.support_ # get number of support vectors for each class svm_linear.n_support_
來源:Ch09-svm-lab-zh.ipynb
交叉驗證選 C
kfold = skm.KFold(5, random_state=0, shuffle=True) grid = skm.GridSearchCV(svm_linear, {'C':[0.001,0.01,0.1,1,5,10,100]}, refit=True, cv=kfold, scoring='accuracy') grid.fit(X, y)
來源:Ch09-svm-lab-zh.ipynb
觀念釐清
Q:C 到底是「容忍度」還是「懲罰」?我每次都搞反。

兩個都對,因為那是兩個不同的 C。記一個口訣:ISLP 的 C 在限制式裡,sklearn 的 C 在目標函數裡。

ISLP(式 9.15):$\sum_i \epsilon_i \le C$。C 站在不等式的右邊,是「你最多可以犯多少規」的預算。預算多 → 犯規多 → margin 寬。C = 0 就是一毛錢都不准犯規,退回最大邊界分類器。

sklearn(等價的 primal 式,講義):$\min \frac12\lVert\beta\rVert^2 + C\sum_i \epsilon_i$。C 站在目標函數裡乘著犯規總量,是罰款單價。單價高 → 沒人敢犯規 → margin 窄。資料可分時,足夠大的 C 可以回到硬邊界解;不可分時不能藉此變成可分。

講義以反向關係說明兩者,精確對應仍需由最佳解決定。實務上你摸到的幾乎都是 sklearn 那個,記住「C 大 = 擬合得緊 = 容易過度擬合」就好,跟 ridge 的 λ 剛好反向(λ 大 = 擬合得鬆)。順便一提,$\lambda$ 在式 9.25 裡的方向與 ISLP 的預算 C 同向。

Q:SVM 需要標準化嗎?

需要,而且比大多數方法更需要。講義講得很直接:「SVM 的演算法不具尺度不變性,所以強烈建議先縮放你的資料」。

理由就在這一章的第一句話:SVM 從頭到尾都在算距離與內積。一個以「元」為單位的收入變數(範圍幾十萬)和一個以「年」為單位的年齡變數(範圍幾十),在 ‖β‖ 與 margin 裡的權重會差好幾個數量級——收入那一維會完全主導邊界的方向,年齡等於被忽略。RBF 核更嚴重,因為 $\exp(-\gamma \sum_j (x_{ij}-x_{i'j})^2)$ 裡的平方距離會被大尺度的那一維吃光。

做法跟第 5 章一樣:把 StandardScaler 包進 Pipeline,再交給 GridSearchCV,這樣每一折都會用該折的訓練部分重新算平均與標準差,不會洩漏。順帶一提,這也是為什麼 lab 的 Khan 例子用線性核就好——基因表現量本來就在同一個尺度上。

QUIZ · 軟邊界與 C

固定訓練資料、核與目標形式,增大 SVC 的 C 代表什麼?

(A) 增加違反量的預算上限
(B) 提高總 hinge loss 的懲罰;最佳總 hinge loss 不增加,但測試誤差不保證下降
(C) 所有資料的分類錯誤與支持向量數都一定下降
跟著 Lab 選 C:訓練、交叉驗證與測試各做什麼?

Lab 先用模擬的兩類資料比較不同 $C$,再用五折 CV 搜尋候選值。固定一個候選 $C$ 時,五個模型分別只用四折擬合,拿剩下一折評分,將五個分數平均;接著才在候選參數間比較。搜尋物件的 best_estimator_ 是選定參數後在傳入搜尋的完整訓練集重新擬合的模型。

mean_test_score 裡的「test」是 CV 的驗證折,不是另留的外部測試集。搜尋後再用 X_test 評估,才能看出已選模型對未參與選擇資料的表現。若反覆看測試集來選 $C$,測試集也變成調參資料。

原 Lab 明確使用打散的 KFold;不能把原程式解說成 StratifiedKFold。實務上類別比例不均衡時,可考慮分層;同一病人多筆資料則還需群組隔離,這與第五章的切分原則一致。

原 Lab:五折交叉驗證選擇 C
kfold = skm.KFold(5, random_state=0, shuffle=True) grid = skm.GridSearchCV(svm_linear, {'C':[0.001,0.01,0.1,1,5,10,100]}, refit=True, cv=kfold, scoring='accuracy') grid.fit(X, y)
來源:Ch09-svm-lab-zh.ipynb

線性模型若需標準化,應把縮放和分類器放在同一個 Pipeline 裡,使每折只用自己的訓練部分估計平均與標準差。完整訓練後的測試資料使用相同轉換,不再自行估計一組尺度。原模擬範例的兩個座標使用同一尺度;處理真實資料時仍要先檢查尺度。

閱讀:超參數搜尋、一般 CV 與 Nested CV。

PART 03 · Hinge loss

為什麼只有支持向量會影響答案 教科書 · 第 9.5 節進階參考 · 第 12.3.2 節 · 進階

📑 這一節是延伸:它解釋「為什麼只有支持向量影響答案」背後的損失函數, 是 ISLP §9.5 與 ESL §12.3.2 的內容。第一輪讀可以先跳過,直接去 PART 04 的核技巧; 這一節也提供比較 SVM 與邏輯斯迴歸所需的損失函數觀點。

Hinge loss 以帶標籤分數 $y f(x)$ 衡量違反間隔的程度:

$$\ell(y,f(x))=\max(0,1-yf(x)).$$

間隔上的折角仍可能對解有影響。擬合時把這個損失與係數的平方懲罰相加。

完整目標與尺度:hinge、slack、預算及標籤

前面把支持向量分類器寫成一個帶限制式的最佳化問題。ISLP §9.5 給了一個 完全等價、但看起來完全不同的寫法(式 9.25):

$$\underset{\beta_0,\beta_1,\dots,\beta_p}{\text{minimize}} \left\{ \sum_{i=1}^{n} \max\left[0,\; 1 - y_i f(x_i)\right] \; + \; \lambda \sum_{j=1}^{p} \beta_j^2 \right\}$$

這就是全書一直在用的「損失 + 懲罰」格式(式 9.26)。 後面那一項你認得。它就是第 6 章的 ridge 懲罰。前面那一項叫 hinge loss(鉸鏈損失,因為它的圖長得像門的鉸鏈):

$$L\left(X, y, \beta\right) = \sum_{i=1}^{n} \max\left[0,\; 1 - y_i\left(\beta_0 + \beta_1 x_{i1} + \cdots + \beta_p x_{ip}\right)\right]$$
λ 與 C 的對應關係 式 9.25 的 λ 大 → β 被壓得小 → margin 寬 → 容忍更多違反, 所以 λ 大對應 ISLP 的預算 C 大(也就是 sklearn 的 C 小)。 ISLP 說的是:「式 9.25 裡的 λ 小,對應到式 9.15 裡的 C 小」。
注意腳註裡的一句話:在這個 hinge + 懲罰的寫法下,margin 固定對應到數值 1, 而 margin 的實際寬度由 √Σβⱼ² 決定。所以「調 λ」跟「調 margin 寬度」是同一件事。

把違反量消去:損失、懲罰與預算

固定 $w,b$ 時,把每個 slack 選成最小可行值就得到

$$\min_{w,b}\frac12\|w\|^2+C\sum_i[1-y_if(x_i)]_+, \qquad [u]_+=\max(0,u).$$

若損失寫成總和 $\sum_i[1-y_if(x_i)]_++\lambda\|w\|^2$, 精確對應是 $\lambda=1/(2C)$;若寫成平均 $n^{-1}\sum_i[1-y_if(x_i)]_++\lambda\|w\|^2$,則為 $\lambda=1/(2nC)$。 截距在這些式子裡都不受懲罰。

違反量預算 $B$ 與懲罰 $C$ 的對應則取決於資料與最佳解。 對應預算可由 $B(C)=\sum_i\hat\xi_i(C)$ 取得,可能有平坦區,不能套用 $C=1/B$。 固定資料、核與相同目標正規化時,增大 $C$ 會使最佳總 hinge loss 不增加、 $\|w\|$ 不減少;支持向量數、0–1 訓練錯誤與測試誤差則沒有同樣的普遍單調保證。

證明:slack 消去及調整參數的精確對應

限制給 $\xi_i\ge\max(0,1-y_if(x_i))$。因 $C>0$,目標隨 slack 嚴格增加, 固定 $w,b$ 的最小值必在等號處,代入即為 hinge 形式。 將整個目標除以 $C$ 或 $nC$,就得到正文的兩種 $\lambda$。

考慮限制問題 $\min R(w)$ 使得 $H(w,b)\le B$,其中 $R=\|w\|^2/2$、 $H=\sum_i[1-y_if(x_i)]_+$。它對預算的 Lagrange 乘子是 $C\ge0$, 最小化 $R+C(H-B)$ 對固定 $C,B$ 等價於最小化 $R+CH$。 互補式 $C(H-B)=0$ 不會給出 $C=1/B$;要由實際最佳解連同可行與正則條件判定對應。

令 $C_2>C_1>0$,其最佳解有 $(R_1,H_1)$、$(R_2,H_2)$。 最佳性分別給 $R_1+C_1H_1\le R_2+C_1H_2$ 與 $R_2+C_2H_2\le R_1+C_2H_1$。相加得 $(C_2-C_1)(H_2-H_1)\le0$, 再代回第一式得 $R_1\le R_2$。這只能控制這兩項,不能推出支持向量數或測試誤差的單調性。

來源:講義 09;ESL 習題 12.1; scikit-learn 1.6 的數學定義。

兩種標籤寫法的 logistic loss

若 $z\in\{0,1\}$ 且 $p=\sigma(f)$,單筆負對數概似為 $-z\log p-(1-z)\log(1-p)$。改記 $y=2z-1\in\{-1,+1\}$ 後, 同一個損失就是 $\log(1+e^{-yf})$。比較 hinge 與 logistic 時,先確認標籤編碼與是否另外乘了常數。

證明:0/1 與正負一標籤的損失相同

$z=1$ 時 $y=1$,$-\log\sigma(f)=\log(1+e^{-f})$。 $z=0$ 時 $y=-1$,$-\log[1-\sigma(f)]=\log(1+e^f)$。 兩種情形合成 $\log(1+e^{-yf})$。來源:Stanford CS229 的 logistic regression 概似定義。

為什麼 hinge 的轉折在 1?

分類只看 $\operatorname{sign}(f)$,同時放大 $w,b$ 不改變分界。但如果沒有固定尺度,$y_if$ 不能直接拿來比較間隔。將間隔邊界定為 $y_if=1$ 是可識別的標準化約定,不是資料中有一個天然機率 1。幾何間隔仍是 $1/\|w\|$。

兩種標籤編碼也要先統一:$y\in\{-1,1\}$ 時用 $\log(1+e^{-yf})$;$z\in\{0,1\}$ 時用 $-z\log\sigma(f)-(1-z)\log[1-\sigma(f)]$,兩式在 $y=2z-1$ 後完全一致。損失相同不代表 hinge 與 logistic 會擬合同樣係數;hinge 在正確側間隔外為零,logistic 只會逐漸接近零。

將 $\tfrac12\|w\|^2+C\sum_i\ell_i$ 除以 $C$,得到 $\sum_i\ell_i+\tfrac1{2C}\|w\|^2$;若再改成平均損失,懲罰係數還要除以 $n$。因此比較 SGD 的 alpha 與 SVC 的 C 時,必須看清楚套件的目標函數,不能只比數字大小。

閱讀:SGD 的損失與正則化。

現在看那條曲線。橫軸是 $y_i f(x_i)$——分對了是正的,愈大愈篤定;分錯了是負的。

圖表需要連網載入 Chart.js。此圖的重點:hinge 在 y·f(x) > 1 的平坦區不影響解;等於 1 的折角仍可能是支持向量。邏輯斯損失則永遠大於 0。
›綠線是 hinge、紅線是邏輯斯。注意綠線在右邊完全貼著 0。
講義/課本重繪
怎麼看這張圖 圖 9.12
綠線是 hinge max(0, 1 − y·f),紅線是邏輯斯損失 log(1 + e^(−y·f))。灰色區帶是 y·f ≥ 1——綠線在那裡貼在 0 上,紅線逐漸減小並維持大於 0。其他地方兩條幾乎平行,這就是 ISLP 說「行為相當相似」的意思。
幾個位置的損失
y·f = 2(篤定分對)—
y·f = 1(剛好在 margin 上)—
y·f = 0(剛好在邊界上)—
y·f = −2(篤定分錯)—

關鍵在平坦區與折角的差別。當 $y_i f(x_i) > 1$,損失在附近恆為 0, 梯度也是 0,刪去該點不影響目前的最佳解。但 $y_i f(x_i) = 1$ 正好是折角, 雖然損失為 0,仍可能支撐解。可依下面三區來讀:

對照分數的位置與支持向量
yᵢf(xᵢ)位置對解的作用
> 1在 margin 正確的一側之外在損失平坦區,不是支持向量
= 1剛好在 margin 上損失為 0,但位於折角,可能是支持向量
< 1違反 margin損失大於 0,是支持向量

支持向量因此來自margin 上或違反 margin的觀測值。 對照之下,邏輯斯迴歸的損失永遠大於 0,每一筆資料都在(微弱地)拉扯答案, 所以它沒有稀疏性、也沒有支持向量的概念。

按「顯示 0–1 損失」會加上分類錯誤的判定標準:分錯是 1、分對是 0 的 階梯函數。它不連續也不凸,直接最佳化較困難,所以常改用容易最佳化的 凸代理損失(convex surrogate loss)。hinge 與邏輯斯損失都是代理; 其中 hinge 是 0–1 損失的逐點上界,本圖未縮放的邏輯斯損失則不一定在階梯之上。

方法示範與原 Lab
以 hinge loss 擬合線性分類器
clf = SGDClassifier(loss="hinge", alpha=0.01, max_iter=200) clf.fit(X, Y)
來源:Ch09-svm-lab-zh.ipynb
QUIZ · Hinge loss

某一筆觀測值的 y·f(x) = 3。它對式 9.25 那個目標函數的貢獻是多少?把它從訓練資料裡刪掉會發生什麼事?

(A) 貢獻是 0;在相同的懲罰設定下,刪掉它仍保留目前的最佳解
(B) 貢獻是 −2,因為 1 − y·f(x) = −2
(C) 貢獻略大於 0,所以刪掉它解會微微改變
PART 04 · 核技巧

不用真的升維也能畫出彎的邊界 教科書 · 第 9.3 節講義 09

軟邊界允許分類錯誤,邊界仍是超平面。遇到非線性的邊界時,還需要擴充特徵。 講義那張圖就是這種情形:一團在中間、一圈在外面, 無論 C 調成多少,一條直線都沒救。

第 7 章遇過一模一樣的問題,答案是特徵擴張(feature expansion): 把 $X_1^2, X_2^2, X_1X_2, X_1^3, \dots$ 加進特徵裡,在放大的空間擬合線性分類器, 映射回原空間就變成彎的邊界。用二次項的話(ISLP 式 9.16):

$$\beta_0 + \beta_1 X_1 + \beta_2 X_2 + \beta_3 X_1^2 + \beta_4 X_2^2 + \beta_5 X_1 X_2 = 0$$

這在放大的空間裡是線性的,在原空間裡是二次曲線(圓、橢圓、雙曲線)。 問題是維度增加得很快:講義做到三次多項式,兩個變數就變成九維; p 個變數做到 d 次是 $\binom{p+d}{d} - 1$ 維。p = 100、d = 3 就已經 17 萬多維, 算不動。

關鍵事實:解與預測只用得到內積 ISLP §9.3.2 給出以下表示方式: 支持向量分類器的解與預測只需要觀測值之間的內積,用不到觀測值本身。
$$f(x) = \beta_0 + \sum_{i \in S} \alpha_i y_i \langle x, x_i \rangle, \qquad \langle x_i, x_{i'} \rangle = \sum_{j=1}^{p} x_{ij} x_{i'j}$$ 要估乘子與截距,需要所有訓練點的 Gram 矩陣,包含對角項。 這裡 α 是非負乘子,標籤 y 另行相乘;ISLP 的帶符號係數可另記為 a=αy。
而且 $\alpha_i$ 只有支持向量是非零的,所以那個和式的項數通常遠少於 n。

既然演算法只透過內積接觸資料,那就把每一處內積換成別的東西:

$$\langle x_i, x_{i'} \rangle \;\longrightarrow\; K(x_i, x_{i'})$$

$K$ 叫做核(kernel),是一個衡量兩筆觀測值有多像的函數。 這就是核技巧(kernel trick):講義一句話說完—— 「我們不需要真的知道 Φ(x),只要在原空間用核函數計算就好」。

核 SVM 的預測可以寫成 $f(x)=b+\sum_{i\in S}\alpha_i y_iK(x_i,x)$,其中 S 是此解使用的支持向量、$\alpha_i$ 是其非負權重。核值代表特徵空間的內積;使用者不必把所有擴張特徵實際列出。

深入核函數:特徵映射、Gram 矩陣與合法條件

講義的例子把這件事說得最清楚。取二次映射 $\Phi(x) = (\sqrt{2}\,x_1 x_2,\; x_1^2,\; x_2^2)$,那麼

這組映射滿足 $K(a,b)=(a^Tb)^2$。用原空間內積就能求出新空間內積。

證明:二次映射的內積等於二次核

直接展開各座標的乘積:

$$\Phi(a)^T\Phi(b)=2a_1a_2b_1b_2+a_1^2b_1^2+a_2^2b_2^2 =(a_1b_1+a_2b_2)^2=(a^Tb)^2.$$

來源:講義 09。

可用的核與完整 Gram 矩陣

核不能只是任意相似度。作為內積核,$K(x,z)=\langle\phi(x),\phi(z)\rangle$, 任意有限資料的 Gram 矩陣 $K$ 必須對稱且半正定: $c^TKc\ge0$ 對所有向量 $c$ 成立。訓練也需要對角項 $K(x_i,x_i)$, 不是只算 $\binom n2$ 個不同點配對就夠。

以 $\alpha_i\ge0$ 表示 Lagrange 乘子時,完整預測式為

$$f(x)=b+\sum_{i\in S}\alpha_i y_iK(x_i,x).$$

ISLP 也把 $a_i=\alpha_i y_i$ 合併成帶正負號的係數,寫成 $b+\sum_i a_iK(x_i,x)$。兩種記號都可用,但不可把 $a_i$ 再當成非負乘子。 二元 SVC.dual_coef_ 儲存的是帶標籤的係數;多類別的排列另外遵循成對分類器規則。

證明:核的半正定性與 RBF 的特徵展開

若 $K_{ij}=\langle\phi(x_i),\phi(x_j)\rangle$,則 $c^TKc=\|\sum_i c_i\phi(x_i)\|^2\ge0$。以此核取代內積後,對偶的二次矩陣為 $Q=\operatorname{diag}(y)K\operatorname{diag}(y)$,仍半正定,故最大化的對偶目標仍為凹函數。

以一維 RBF 為例,對 $\gamma>0$,

$$e^{-\gamma(x-z)^2}=e^{-\gamma x^2}e^{-\gamma z^2}e^{2\gamma xz} =\sum_{m=0}^{\infty} \left[e^{-\gamma x^2}\sqrt{\frac{(2\gamma)^m}{m!}}x^m\right] \left[e^{-\gamma z^2}\sqrt{\frac{(2\gamma)^m}{m!}}z^m\right].$$

中括號就是一組可明確寫出的無限特徵座標;多維可用多重指標展開。 因此困難在於不能逐一計算無限多個座標,並非特徵映射根本無法寫出。 實際上只計算左邊的一個核值即可。

來源:講義 09; Stanford CS229:Kernels and SVM。

次數、維度與核矩陣如何對回講義?

兩個變數的三次多項式展開有九個非截距項:一階兩個、二階三個、三階四個。$d$ 次核中的 $d$ 是多項式次數,不是特徵空間只有 $d$ 維。含常數的 $(1+x^Tu)^d$ 與齊次的 $(x^Tu)^d$ 也不是同一個核:前者包含低階項。

講義的二次映射與 Lab 的 my_kernel_1 都是齊次二次核。sklearn 內建多項式核為 $(\gamma x^Tu+\mathrm{coef0})^d$;若沒有核對 gamma 與 coef0,不能直接聲稱它與自訂核完全相同。

核函數傳入兩個資料矩陣 $X$ 與 $Y$,回傳的矩陣形狀必須是「X 的樣本數 × Y 的樣本數」。訓練時計算 train–train,預測時計算 test–train;不能對測試資料改算成 test–test。核技巧省掉顯式的高維特徵,但沒有消除樣本數平方級矩陣可能帶來的負擔。

RBF 的指數可展開成各階內積,因此有無限多個可能的特徵座標;「無限維」並不等於必須在電腦儲存無限座標,也不等於能任意插值且保證泛化。$\gamma$ 改變相似度的衰減速度,$C$ 改變違反間隔的代價,兩者都要選。

閱讀:作者的核映射推導、sklearn 核函數介面。

›選模式後按「開始」。一維的點會被抬到二維,然後一條直線就分開了。
課程/lab 資料
怎麼玩
「一維 → 二維」:按 ▶ 看點被抬到 (x, x²)。一維上紅色被藍色夾住、一個門檻切不開;抬到二維後一條水平線就分開了;映射回一維就變成兩個門檻。
「同心圓 → 二次核」:lab 範例 的真實資料,填色是二次核 SVM 的決策區域。
核技巧的三步
原空間分不開 映射 φ:x → (x, x²) 在新空間擬合線性超平面 映射回去 → 彎的邊界 核技巧:跳過第 2、3 步, 直接算 K(x, x′) 就好
狀態
目前的空間—
需要幾維—
線性分得開嗎—
支持向量個數—
內圈的 x₁²+x₂² 最大—
外圈的 x₁²+x₂² 最小—
方法示範與原 Lab
特徵映射與自訂核
def feature_map_1(X): return np.asarray((np.sqrt(2)*X[:,0]*X[:,1], X[:,0]**2, X[:,1]**2)).T def my_kernel_1(X,Y): return np.dot(feature_map_1(X),feature_map_1(Y).T )
來源:Ch09-svm-lab-zh.ipynb
用自訂核擬合
clf2 = SVC(kernel=my_kernel_1) clf2.fit(X, y)
來源:Ch09-svm-lab-zh.ipynb
RBF 核分類器
svm_rbf = SVC(kernel="rbf", gamma=1, C=1) svm_rbf.fit(X_train, y_train)
來源:Ch09-svm-lab-zh.ipynb
同時選 C 與核參數
kfold = skm.KFold(5, random_state=0, shuffle=True) grid = skm.GridSearchCV(svm_rbf, {'C':[0.1,1,10,100,1000], 'gamma':[0.5,1,2,3,4]}, refit=True, cv=kfold, scoring='accuracy'); grid.fit(X_train, y_train)
來源:Ch09-svm-lab-zh.ipynb

常用的核有三個(講義列了各自的優缺點)。線性核就是普通內積, 等於什麼都不做:

$$K(x_i, x_{i'}) = \sum_{j=1}^{p} x_{ij} x_{i'j}$$

d 次多項式核(式 9.22)等於在 d 次多項式的空間裡擬合線性分類器:

$$K(x_i, x_{i'}) = \left(1 + \sum_{j=1}^{p} x_{ij} x_{i'j}\right)^{d}$$

徑向基核(radial basis kernel,RBF;式 9.24)依兩點間的平方距離定義:

$$K(x_i, x_{i'}) = \exp\left(-\gamma \sum_{j=1}^{p} \left(x_{ij} - x_{i'j}\right)^2\right), \qquad \gamma > 0$$

RBF 的行為非常局部:如果測試點 $x^*$ 離訓練點 $x_i$ 很遠, 那個平方距離很大、指數很小、$K(x^*, x_i)$ 幾乎是 0,於是 $x_i$ 在 $f(x^*) = \beta_0 + \sum_{i \in S} \alpha_i y_i K(x^*, x_i)$ 裡幾乎沒有發言權。 只有附近的訓練點會影響一個測試點的預測。γ 就是「附近」有多近。

›一次只改一個參數,分清 γ 的局部性與 C 的違規懲罰。
設定γ = 0.5
課程/lab 資料
怎麼看 圖 9.9
填色是 RBF 核 SVM 的決策區域,點是訓練資料。先選只改 γ 或只改 C,再推滑桿;另一個參數全程固定。
這一格的擬合
γ—
sklearn 的 C—
支持向量個數—
參數的意義—
γ 也是一個正則化參數
講義:「γ 也是一個正則化參數,過度擬合時應該把它調小」。γ 小 → 每個支持向量的影響範圍大 → 邊界平滑 → 偏差大變異小;γ 大 → 影響範圍小 → 邊界破碎 → 偏差小變異大。它跟 C 要一起用網格搜尋調,因為兩者都在控制彈性。
觀念釐清
Q:核技巧「不用真的升維」到底是什麼意思?它省掉了什麼?

省掉的是把 Φ(x) 算出來、存起來、在高維空間裡做運算這三件事。

具體看講義那個例子。要做二次擴張,直接的做法是:對每一筆資料算出三維向量 $\Phi(x) = (\sqrt2 x_1x_2, x_1^2, x_2^2)$,存成一個 n × 3 的矩陣,再在三維空間裡擬合 SVC。核方法是:完全不動原始的 n × 2 資料,需要內積的時候就算 $(x_i^\top x_{i'})^2$。兩者的答案數學上完全相同,但後者永遠留在二維。

二維變三維省不了多少。但 p = 100 做到 d = 3 是 17 萬多維,而 RBF 核對應的特徵空間是無限維的,可寫成無限級數,但不必逐座標計算。ISLP 指出:那個空間大到「我們本來也不可能在那裡做計算」。核方法讓你使用那個空間,卻永遠不必進去。

要付的代價是:你沒有原輸入空間中的有限維線性係數 β。線性核可以印 coef_ 看哪個變數重要,RBF 核只有 $\alpha_i$ 與支持向量。講義把這列成高斯核的缺點:「神祕(沒有 w)」。可解讀性換來了彈性。

用 SVM 決策分數畫 ROC

用決策分數畫 ROC

講義分別用 Heart 訓練集與測試集比較 ROC。 對每個門檻 $t$,以 $f(x)\ge t$ 判為正類,計算 $\mathrm{TPR}=\mathrm{TP}/(\mathrm{TP}+\mathrm{FN})$ 與 $\mathrm{FPR}=\mathrm{FP}/(\mathrm{FP}+\mathrm{TN})$。 畫 ROC 只需要排序分數,不需要先把分數變成機率;若某個評估集只有單一類別,其中一個分母為零,ROC 不適用。

ROC、機率與分類標籤要分開讀

Lab 用 RocCurveDisplay.from_estimator,從模型的決策分數掃過門檻,不需要先把分數變成機率。二元分類時,先核對 classes_ 的順序,因為正分數指向後一個類別。AUC 描述正負例的排序,與固定零門檻下的準確率不同。

原 Lab 比較 $\gamma=50$ 的彈性模型與 CV 選出的模型,先畫訓練 ROC 再畫測試 ROC。訓練曲線較漂亮只說明更貼近已見資料;如果測試曲線變差,就不能用訓練 AUC 宣稱改善。最後一張圖是在訓練資料調參後,分別對訓練/測試資料評分,沒有在測試資料上再次執行 GridSearchCV。

SVC(probability=True) 另外以訓練資料的交叉驗證分數作 Platt scaling,二元形式可寫成 $P(Y=1\mid f)=1/(1+\exp(Af+B))$,其中 $A,B$ 另外估計。這個額外步驟提供校準機率,原本的 hinge loss 訓練目標維持不變。predict() 與 predict_proba() 的最大機率類別也可能不同;需要決策成本時,應在訓練/驗證資料上評估校準與門檻。

閱讀:分數與機率、機率校準。

PART 05 · 多類別

OVO 與 OVA:兩類的方法怎麼推廣 教科書 · 第 9.4 節講義 09

到這裡整章都在講兩類。K > 2 怎麼辦?ISLP §9.4 的說明是: 分離超平面這個概念本身沒辦法自然地推廣到多類別。 很多人提過各種做法,但實務上常見的有兩個,而且都是「把多類別問題拆成一堆兩類問題」。

一對一(one-versus-one,OVO,也叫 all-pairs):擬合 $\binom{K}{2} = K(K-1)/2$ 個分類器,每個只比較兩個類別 (第 k 類編成 +1、第 k′ 類編成 −1,其餘資料完全不用)。 測試點交給每一個分類器投一票,得票最多的類別勝出。

一對其餘(one-versus-all,OVA,也叫 one-versus-rest):擬合 K 個分類器, 第 k 個把第 k 類編成 +1、其餘 K − 1 類全部編成 −1。 測試點指派給 $f_k(x^*) = \beta_{0k} + \beta_{1k}x_1^* + \cdots + \beta_{pk}x_p^*$ 最大的那一類,因為那代表最有信心。

兩個關鍵差別 ① 分類器的個數:OVO 是 K(K−1)/2,OVA 是 K。 K = 3 時兩者都是 3(所以下面的元件看不到個數差別);K = 10 時是 45 對 10。
② 每個分類器看到什麼:OVO 的每個分類器只吃兩類的資料, 問題較小;兩類是否平衡與能否分開,仍取決於資料。OVA 的每個分類器要面對一個把好幾類混在一起的 「其餘」——樣本不平衡,而且那一團的形狀可能無法用一個超平面分開。
ISLP 的建議:K 不太大就用 OVO(講義同樣的結論)。
OVO/OVA 完整比較與 SVC 介面
類別數 KOVO 分類器數OVA 分類器數決策規則
333OVO 投票;OVA 取最大分數
464同上
104510同上
1004,950100同上
一對一(OVO)一對其餘(OVA)
分類器個數K(K−1)/2K
每個分類器的訓練資料只用相關的兩類全部 n 筆
類別平衡依兩類各自樣本數決定差(1 對 K−1)
決策規則投票,最多票者勝取 f_k(x*) 最大者
模糊情形可能平手(票數相同)可能兩個 f 都很小
真正的訓練方式SVC(OVO 訓練)OneVsRestClassifier(SVC(...))
ISLP 的建議K 不太大就用這個K 很大時考慮
關於 decision_function_shape 的一個常見誤解 SVC 的 decision_function_shape 只改變 decision_function() 輸出的形狀,不改變底層的訓練方式。libsvm 一律用 OVO 訓練 K(K−1)/2 個分類器;設成 'ovr' 時 sklearn 是把 OVO 的結果換算成 K 個分數。 真的想要「訓練 K 個一對其餘分類器」,要用 OneVsRestClassifier(SVC(...)) 包起來。 上面元件的 OVA 那三條線就是這樣擬合出來的。

OVO 與 OVA 可以給出不同答案,但差異比例取決於資料分布、分類器與調整參數; OVO 投票也可能平手, 實作時需明訂平手時的處理規則。

元件裡的三條線都是真的 SVC(kernel='linear', C=1) 擬合結果 (OVO 的三個只吃兩類的資料、OVA 的三個吃全部資料),係數烘焙進頁面; 投票與取最大則由前端在格點上即時算,所以切換是瞬間的。 資料是另外造的三團 blob,沒有沿用 lab 範例 那一組。那組是環狀的非線性結構, 線性的成對擬合在上面沒有意義(lab 自己用的也是 RBF 核)。

QUIZ · 多類別

K = 10 個類別。OVO 與 OVA 各要訓練幾個二元分類器?

(A) 兩者都要 10 個,只是決策規則不同(投票 vs 取最大)
(B) OVO 要 10 個,OVA 要 45 個
(C) OVO 要 45 個(10×9/2),OVA 要 10 個
Khan 基因表現資料:高維可以完全分隔,測試仍會出錯

Khan 資料用基因表現預測四種腫瘤類型。每個樣本有 2,308 個基因測量值,訓練集有 63 筆、測試集有 20 筆;特徵數遠大於樣本數,所以即使用線性邊界,也可能把訓練資料完全分開。零訓練誤差在這個情況下並不難達成。

Lab 先以線性核及 C=10 擬合,再分別製作訓練與測試混淆表。它在訓練資料沒有錯分,測試資料卻有兩筆錯分;這正好說明「能找到分隔面」與「能預測未見樣本」是兩個問題。測試混淆表還能看出哪些類型容易互相混淆,資訊比單一正確率更完整。

原 Lab:Khan 的線性分類器
khan_linear = SVC(kernel='linear', C=10) khan_linear.fit(Khan['xtrain'], Khan['ytrain']) confusion_table(khan_linear.predict(Khan['xtrain']), Khan['ytrain'])
來源:Ch09-svm-lab-zh.ipynb
原 Lab:保留測試樣本的混淆表
confusion_table(khan_linear.predict(Khan['xtest']), Khan['ytest'])
來源:Ch09-svm-lab-zh.ipynb

線性核可作為高維資料的起點,避免先加入不必要的非線性;是否需要更靈活的核仍要由訓練資料中的驗證決定。真實基因資料還需檢查尺度、批次效應與可能的病人重複量測,不能只因 $p\gg n$ 就跳過正則化或資料切分的檢查。

多類別 SVC 的底層仍以 OVO 訓練;decision_function_shape="ovr" 只調整輸出形狀。原 Lab 的文字把兩種輸出形狀說成兩種訓練策略,讀程式時應依估計器的實際行為區分。

資料:Khan 資料的訓練/測試欄位、SVC 的多類別訓練與輸出。

PART 06 · 與邏輯斯迴歸的關係

兩個損失函數其實很像,差別在哪 教科書 · 第 9.5 節講義 09

SVM 在 1990 年代中期出場時很轟動:找一片盡量分開資料的超平面、允許少數違反、 用核擴張特徵空間。這套說法看起來跟邏輯斯迴歸、LDA 完全是兩個世界的東西。 ISLP §9.5 的任務就是把這個神祕感拆掉。

SVM 與加了平方懲罰的邏輯斯迴歸,都平衡分類損失和模型複雜度。Hinge loss 在足夠大的正確分數後變成 0;logistic loss 則平滑下降。因此兩者常能給出相近分類結果,但機率輸出與校準需求不同。

完整對照:SVM、邏輯斯損失與 LDA

拆解的關鍵就是 PART 03 那個式子。支持向量分類器等價於

$$\underset{\beta}{\text{minimize}} \left\{ \underbrace{\sum_{i=1}^{n} \max\left[0, 1 - y_i f(x_i)\right]}_{\text{hinge loss}} + \lambda \underbrace{\sum_{j=1}^{p} \beta_j^2}_{\text{ridge 懲罰}} \right\}$$

而加了 ridge 懲罰的邏輯斯迴歸是

$$\underset{\beta}{\text{minimize}} \left\{ \sum_{i=1}^{n} \log\left(1 + e^{-y_i f(x_i)}\right) + \lambda \sum_{j=1}^{p} \beta_j^2 \right\}$$

只有損失函數換了一項,其他一模一樣。而 PART 03 的圖顯示這兩個損失 除了「hinge 在右邊剛好是 0」之外幾乎平行。所以 ISLP 的結論不意外: 「邏輯斯迴歸與支持向量分類器常常給出非常相似的結果」。

支持向量分類器 / SVM邏輯斯迴歸LDA
損失函數hinge:max(0, 1 − y·f)log(1 + e^(−y·f))(此欄列出概似)
在 y·f ≥ 1 時的損失恰好 0很小但 > 0—
解由誰決定只有支持向量全部資料(遠處權重極小)各類的平均與共變異
機率輸出沒有(要另外校準)天生就有有
類別分得很開時表現較好係數會發散、不穩定表現較好
類別重疊很多時還可以通常較好還可以
非線性邊界核,很成熟可以用核,但少見且較貴同左
p ≫ n線性核 + 正則化,很強要正則化會退化
怎麼選?講義的四句話 ① 類別(幾乎)可分開時,SVC 比邏輯斯迴歸好,LDA 也好。 邏輯斯迴歸在完全可分的資料上會讓係數跑到無限大(最大概似不存在),必須靠懲罰救。
② 類別重疊很多時,加了 ridge 懲罰的邏輯斯迴歸與 SVC 非常相似。 這時選哪個多半只是習慣問題。
③ 想要機率就用邏輯斯迴歸。SVM 只以 f(x) 的符號決定類別; 想要機率得再套 Platt scaling(SVC(probability=True)), 那是額外做一次交叉驗證去擬合一個 sigmoid,慢而且不見得校準得好。
④ 非線性邊界時,核 SVM 是最普及的選擇。 邏輯斯迴歸與 LDA 也能使用核,只是計算比較貴、歷史上比較少人做。

ISLP 這一節結尾還提了一個延伸:支持向量迴歸 (support vector regression)。最小平方法讓每一筆殘差都計入損失; 支持向量迴歸只讓絕對值超過某個正常數的殘差計入—— 等於把 margin 的概念搬到迴歸,落在「管子」裡的點對解沒有貢獻, 稀疏性因此保留下來。sklearn.svm.SVR 就是它。

方法示範與原 Lab
用隨機 Fourier 特徵近似 RBF
rbf_feature = RBFSampler(gamma=1, random_state=1) X_features = rbf_feature.fit_transform(X) clf = SGDClassifier(loss="hinge", alpha=0.01, max_iter=200) clf.fit(X_features, y)
來源:Ch09-svm-lab-zh.ipynb
觀念釐清
Q:SVM 與邏輯斯迴歸該選哪一個?

需要類別機率時,可選邏輯斯迴歸。它可直接估計類別機率。風險分數、期望成本決策、某些需要可解釋機率的集成流程,需要校準過的機率;ROC 或排序門檻本身只需要分數,SVM 的 decision_function 可提供這類分數。若需要校準機率,probability=True 會另做機率校準並增加計算成本。

不要機率的話,看類別分得多開。分得很開 → SVM:邏輯斯迴歸在完全可分的資料上係數會發散,而 SVM 的 margin 概念天生就處理這種情形。重疊很多 → 邏輯斯迴歸:這時 hinge 的稀疏性沒什麼好處,而邏輯斯迴歸的本身就提供機率輸出,係數也可解讀。重疊的中間地帶兩者結果會很像,因為損失函數很像。

另外兩個實務考量。n 很大:SVC 是 O(n²)~O(n³) 的,幾萬筆以上時計算負擔就會增加,這時用 LinearSVC、SGDClassifier 或邏輯斯迴歸。要看變數重要度:線性核的 coef_ 可以看,RBF 核沒有 β 可看(講義列為高斯核的缺點:「神祕」)。

Q:為什麼核方法特別常用於 SVM?

ISLP 明確回答了:「歷史原因」。任何只透過內積接觸資料的方法都能核化(核邏輯斯迴歸、核 PCA、核嶺迴歸都存在),但核在 SVM 的脈絡裡遠比在其他地方普及。

不過也有技術上的理由。SVM 的解是稀疏的——只有支持向量的 $\alpha_i$ 非零,所以預測時只要算 |S| 個核值。核邏輯斯迴歸沒有這個性質:每一筆訓練資料的權重都非零,預測一個點要算 n 個核值,訓練還要處理一個 n × n 的核矩陣。n 稍微大一點就吃不消。hinge loss 那段「剛好等於 0」,換來的正是核方法在計算上的可行性。

延伸:SVR 的管狀損失與完整對偶

延伸:支持向量迴歸的管狀損失

迴歸的 $y_i$ 是實數,$\varepsilon\ge0$ 是可接受的絕對誤差。 損失為 $[|y_i-f(x_i)|-\varepsilon]_+$。$\varepsilon$ 控制管寬,$C$ 控制超出管子的懲罰。

$$\begin{aligned} \min_{w,b,\xi,\xi^*}\quad&\frac12\|w\|^2+C\sum_i(\xi_i+\xi_i^*)\\ \text{使得}\quad&y;_i-w^T\phi(x_i)-b\le\varepsilon+\xi_i,\\ &w;^T\phi(x_i)+b-y_i\le\varepsilon+\xi_i^*,\quad\xi_i,\xi_i^*\ge0. \end{aligned}$$

令 $d_i=\alpha_i-\alpha_i^*$,其對偶與預測式為

$$\max_{\alpha,\alpha^*}\ -\frac12\sum_{i,j}d_id_jK_{ij} -\varepsilon\sum_i(\alpha_i+\alpha_i^*)+\sum_i y_i d_i, \quad0\le\alpha_i,\alpha_i^*\le C,\quad\sum_i d_i=0,$$ $$f(x)=b+\sum_i d_iK(x_i,x).$$

這裡係數不乘分類標籤 $y_i$。嚴格在管內的點兩個乘子均為零。 有 $0<\alpha_i<C$ 時用 $b=y_i-\varepsilon-\sum_jd_jK(x_j,x_i)$; 有 $0<\alpha_i^*<C$ 時用 $b=y_i+\varepsilon-\sum_jd_jK(x_j,x_i)$。 沒有這類點時也要從 KKT 不等式決定截距區間。

證明:SVR 的兩組乘子如何產生對偶

分別以 $\alpha_i,\alpha_i^*$ 乘上兩個管狀限制左側減右側,再以 $\mu_i,\mu_i^*$ 乘上 $-\xi_i,-\xi_i^*$。對 $w,b,\xi,\xi^*$ 求 stationarity 得

$$w=\sum_i(\alpha_i-\alpha_i^*)\phi(x_i),\quad \sum_i(\alpha_i-\alpha_i^*)=0,\quad C-\alpha_i-\mu_i=C-\alpha_i^*-\mu_i^*=0.$$

故兩組乘子都介於 0 與 $C$。代回 Lagrangian,$w$ 項合為 $-\|w\|^2/2$,常數項為 $\sum_i y_i(\alpha_i-\alpha_i^*)- \varepsilon\sum_i(\alpha_i+\alpha_i^*)$,slack 項消失,得到正文對偶。 自由乘子所對應的 slack 為零,且管狀限制取等號,便得到兩種截距回復式。

來源:講義 09直接連結的 林軒田:Support Vector Regression。

大規模求解、隨機 Fourier 特徵與核近似

從公式選擇實作

SVC(kernel='linear') 與 LinearSVC 都可給線性邊界, 但後者預設使用 squared hinge,且截距的正則化處理也不同,不能期待相同 C 一定得同一解。 NuSVC 改以 $\nu$ 控制另一種限制,不是把參數 C 改名。

對二元訓練資料,在其可行設定下 $\nu$ 給訓練 margin error 比例的上界與支持向量比例的下界。 類別不平衡會限制可行 $\nu$;分類正負號、容差與 margin error 的定義須依求解器核對。 OneClassSVM 則主要用一類正常資料學習邊界,預測新點是否在正常區域; 訓練資料受污染及特徵尺度都會改變結果,不能把它直接當成有標籤二元 SVC。

核近似把輸入變成有限特徵,再交給線性模型。RBFSampler 用隨機 Fourier 特徵 近似 RBF 內積。 特徵近似、標準化與後續模型都放在訓練折內;近似維度越大通常成本越高,精度需由驗證資料評估。

需要機率時,Platt scaling 擬合 $P(Y=1\mid f)=1/[1+\exp(Af+B)]$, 使用訓練資料的交叉驗證分數校準;測試標籤不能參與。 因此 predict 與 predict_proba 的最大機率類別可能不一致, 而 decision_function 分數本身也不是校準機率。

來源:講義 09; scikit-learn 1.6 SVM、 Kernel Approximation。

核近似實際計算什麼?

RBF 隨機 Fourier 特徵抽取 $\omega_j\sim N(0,2\gamma I)$、 $b_j\sim U(0,2\pi)$,令 $z_j(x)=\sqrt{2/m}\cos(\omega_j^Tx+b_j)$。 於是用長度 $m$ 的 $z(x)$ 擬合線性模型,$z(x)^Tz(x')$ 近似 RBF 核。

證明:隨機 Fourier 特徵的期望等於 RBF

對均勻隨機相位,$E_b[2\cos(u+b)\cos(v+b)]=\cos(u-v)$。 再對高斯 $\omega$ 取期望,利用其特徵函數得到 $E_\omega\cos(\omega^T(x-x'))=\exp[-\gamma\|x-x'\|^2]$。 對 m 個獨立特徵平均仍有同一個期望;有限 m 的一次抽樣則有近似誤差。 來源:講義 09連結的 scikit-learn Kernel Approximation。

核近似為什麼可以接上 SGD?

原 Lab 以 RBFSampler 產生有限個隨機 Fourier 特徵,再以線性的 SGDClassifier(loss="hinge") 擬合。此時真正儲存的是有限長度的特徵與線性係數,並不需要保留完整的訓練核矩陣。近似特徵數增加可改善核近似,但同時增加時間與記憶體;近似好壞仍不是測試誤差的保證。

SGD 每次用一筆或小批資料估計更新方向。hinge 在 $yf\lt1$ 時,對 $w$ 的次梯度包含 $-yx$;在 $yf>1$ 時,這筆資料的 hinge 梯度為零,但正則化仍可縮小係數。特徵尺度、步長與迭代次數都影響是否充分收斂。這是在近似後的特徵空間解線性問題,得到的是近似核模型,與精確的 RBF SVC 有別。

線性 SVC、LinearSVC 與 SGDClassifier 的預設損失、截距處理及求解策略不同。比較時先對齊目標再比較泛化;不能以「三個都畫直線」推成三者必定得到一樣答案。

閱讀:核近似、SGDClassifier。

延伸:單類別 SVM

單類別邊界

單類別 SVM 使用未標記的正常訓練樣本,$0<\nu\le1$。其問題為

$$\min_{w,\rho,\xi}\frac12\|w\|^2+\frac1{\nu n}\sum_i\xi_i-\rho, \quad w^T\phi(x_i)\ge\rho-\xi_i,\quad\xi_i\ge0.$$

對偶最小化 $\alpha^TK\alpha/2$,限制是 $0\le\alpha_i\le1/(\nu n)$、$\sum_i\alpha_i=1$。 用 $f(x)=\sum_i\alpha_iK(x_i,x)-\rho$ 的正負判斷正常區域; 它給的是邊界分數,並不是積分為 1 的機率密度。 有自由乘子時,以 $\rho=\sum_j\alpha_jK(x_j,x_i)$ 回復門檻。 在常用的非退化解讀下,ν控制訓練異常比例的上界及支持向量比例的下界;尺度與污染程度仍須驗證。

證明:單類別 SVM 的對偶

單類別問題的 Lagrangian 對 $w,\rho,\xi_i$ 求 stationarity 分別得到 $w=\sum_i\alpha_i\phi(x_i)$、$\sum_i\alpha_i=1$、 $\alpha_i+\mu_i=1/(\nu n)$。代入留下最大化 $-\alpha^TK\alpha/2$, 等價於正文的最小化形式。自由乘子的 slack 為零,互補鬆弛給出門檻回復式。

來源: scikit-learn 單類別 SVM。

QUIZ · SVM vs 邏輯斯迴歸

一份資料的兩個類別重疊得相當厲害,而且你需要輸出每一筆的違約機率。該選哪個?

(A) SVM 使用 RBF 核:它比較有彈性,機率可以用 SVC(probability=True) 拿到
(B) SVM 擬合線性核:類別重疊正是 hinge loss 的強項,因為它會忽略遠處的點
(C) 邏輯斯迴歸(加 ridge 懲罰):重疊時兩者表現相近,而機率輸出是它天生就有的
EXERCISES · 練習

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

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

進一步練習:計算與推理題
EXERCISE 1 · ISLP 9.7 第 1 題(a)

課本第 1 題要你畫出超平面 $1 + 3X_1 - X_2 = 0$,並標出兩側。點 $(0, 0)$ 落在哪一側?

(A) 落在線上,因為原點滿足任何過原點的超平面方程式
(B) 落在 1 + 3X₁ − X₂ > 0 的那一側,因為代進去得到 1
(C) 落在 < 0 的那一側,因為 −X₂ 這一項是負的
EXERCISE 2 · ISLP 9.7 第 2 題(c)(d)

課本第 2 題的分類器規則是:$(1+X_1)^2 + (2-X_2)^2 > 4$ 判成藍色,否則紅色。四個點 $(0,0)$、$(-1,1)$、$(2,2)$、$(3,8)$ 分別是什麼顏色?而 (d) 小題問這個邊界算不算線性——答案是什麼?

(A) 藍、紅、藍、藍;(d) 對 X₁、X₂ 為非線性;對 X₁、X₁²、X₂、X₂² 則為線性
(B) 藍、紅、藍、藍;(d) 不是線性,因為出現了平方項,所以怎麼看都是非線性的
(C) 紅、紅、藍、藍;(d) 對 X₁、X₁²、X₂、X₂² 是線性的
EXERCISE 3 · ISLP 9.7 第 3 題(e)(f)

課本第 3 題的 7 個點:紅色是 (3,4)、(2,2)、(4,4)、(1,4),藍色是 (2,1)、(4,3)、(4,1)。最佳分離超平面是 $X_2 = X_1 - 0.5$。哪幾筆是支持向量?(f) 小題問「第 7 筆 (4,1) 稍微移動會不會影響超平面」——為什麼?

(A) 支持向量是第 2、3、5、6 筆;第 7 筆不是支持向量,離 margin 很遠,稍微移動不影響
(B) 支持向量是全部 7 筆,因為最大邊界問題的每一條限制式都要滿足
(C) 支持向量是第 1、4、7 筆(離邊界最遠的那些),第 7 筆移動會影響超平面
EXERCISE 4 · ISLP 9.7 第 6 題

課本第 6 題要你造一組「剛好可以線性分開」的資料,然後比較大 C 與小 C。課本的主張是什麼,理由是什麼?(這裡的 C 是 sklearn 的 C)

(A) 小 C(會錯分幾筆訓練資料)在測試資料上可能贏過大 C,因為大 C 的邊界只由極少數點決定、變異大
(B) 大 C 一定更好,因為它的訓練誤差是 0,而訓練誤差 0 表示模型完全學會了資料
(C) 兩者測試誤差會一樣,因為資料可以線性分開,最佳超平面唯一
重點速查與來源

支持向量機速查表 教科書 · 第 9 章

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

本頁書目與章節定位

  • 教科書:An Introduction to Statistical Learning with Applications in Python。James、Witten、Hastie、Tibshirani、Taylor,2023。原書與下載資訊
    本頁對應:教科書 · 第 9.1 節;教科書 · 第 9.1.3–9.1.4 節;教科書 · 第 9.2 節;教科書 · 第 9.5 節;教科書 · 第 9.3 節;教科書 · 第 9.4 節。
  • 進階參考:The Elements of Statistical Learning。Hastie、Tibshirani、Friedman,第二版。原書與下載資訊
    本頁對應:進階參考 · 第 12.3.2 節 · 進階。
方法與公式速查

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

三個層次:一次看清楚它們的差別

最大邊界分類器支持向量分類器支持向量機(SVM)
ISLP 節次§9.1.3–9.1.4§9.2§9.3
資料要可分開嗎要,不可分就沒有解不用不用
邊界形狀直的直的可以彎
允許違反 margin不允許允許(用 C 控制)允許
調整參數沒有CC + 核的參數(d 或 γ)
解由誰決定支持向量支持向量支持向量
sklearnSVC(kernel='linear', C=1e5)SVC(kernel='linear', C=…)SVC(kernel='rbf'/'poly', …)

三種核

核式子調的參數優點缺點
線性Σⱼ xᵢⱼxᵢ′ⱼ只有 C快、可以看 coef_、不易過度擬合;p ≫ n 的首選邊界只能是直的
d 次多項式(1 + Σⱼ xᵢⱼxᵢ′ⱼ)^dC、d比線性有彈性,d 的意義很具體d 大時數值不穩;實務只用小 d
徑向基(RBF)exp(−γ Σⱼ (xᵢⱼ−xᵢ′ⱼ)²)C、γ最有彈性、有界(數值穩)、只有一個核參數沒有 β 可解讀、比線性慢、容易過度擬合

公式速查

名稱式子備註
超平面$\beta_0 + \beta^{\top}X = 0$式 9.1–9.2
點到超平面的距離$|f(x)| / \lVert\beta\rVert$講義
分離超平面的條件$y_i f(x_i) > 0 \;\forall i$式 9.8
最大邊界max M s.t. $\sum\beta_j^2=1$, $y_i f(x_i) \ge M$式 9.9–9.11
軟邊界多了 $y_i f(x_i) \ge M(1-\epsilon_i)$, $\sum\epsilon_i \le C$式 9.12–9.15
對偶問題max $\sum_i\alpha_i - \frac12\sum_i\sum_{i'}\alpha_i\alpha_{i'}y_iy_{i'}\langle x_i,x_{i'}\rangle$講義;只出現內積
線性核的解$f(x) = \beta_0 + \sum_{i \in S}\alpha_i y_i\langle x,x_i\rangle$式 9.19;S 是支持向量的索引集
核化的解$f(x) = \beta_0 + \sum_{i \in S}\alpha_i y_i K(x,x_i)$式 9.23
多項式核$\left(1+\sum_j x_{ij}x_{i'j}\right)^{d}$式 9.22
徑向基核$\exp\left(-\gamma\sum_j (x_{ij}-x_{i'j})^2\right)$式 9.24
損失 + 懲罰min $\sum_i \max[0, 1-y_if(x_i)] + \lambda\sum_j\beta_j^2$式 9.25–9.26;λ 大 ↔ 預算 C 大
重點回顧 1. 解只依賴支持向量。 嚴格待在 margin 正確一側的點對答案毫無貢獻,因為 hinge loss 在那裡恰好是 0。 這給了 SVM 對遠處離群值的穩健性,也給了核方法計算上的可行性。
2. ISLP 的 C 與 scikit-learn 的 C 方向相反。 ISLP 的 C 是違反量的預算(C 大 → margin 寬); sklearn 的 C 是違反的懲罰(C 大 → margin 窄)。 兩者的對應取決於資料與最佳解,不能直接取倒數。
3. 核技巧直接計算特徵空間中的內積。 演算法只透過內積接觸資料,所以把內積換成 K(x, x′) 就換掉了整個特徵空間, 而 Φ(x) 從頭到尾不必算出來。RBF 核的特徵空間是無限維的,本來也算不出來。
順手提醒 SVM 一定要先標準化(講義:演算法不具尺度不變性), 而且要包進 Pipeline 才不會洩漏。C 與核參數要一起用網格搜尋調, 兩者都在控制彈性。SVM 不直接輸出機率,需要機率就用邏輯斯迴歸, 或接受 probability=True 的額外成本。

對偶限制與記號速查

硬邊界:$\alpha_i\ge0,\ \sum_i\alpha_i y_i=0$。 軟邊界:$0\le\alpha_i\le C,\ \sum_i\alpha_i y_i=0$。 兩者預測皆用 $b+\sum_i\alpha_i y_iK(x_i,x)$;若合併 $a_i=\alpha_i y_i$, 則 $a_i$ 可以是負的。SVR 改用 $d_i=\alpha_i-\alpha_i^*$,不再乘 $y_i$。 總和 hinge 損失搭配 $\lambda\|w\|^2$ 時 $\lambda=1/(2C)$;預算 B 則需由最佳解求對應。

CARDS · 關鍵詞彙卡

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

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

複習:展開關鍵詞彙卡