跳至主要內容

    SVM 與 Kernel:資料分不開時怎麼辦?

    先看間隔與hinge loss,再理解C、特徵映射與RBF的gamma

    sunny 桑尼· · 16 MIN READ · 140 次瀏覽

    SVM 與 Kernel:資料分不開時怎麼辦?
    本文目錄

    兩群資料如果可以畫一直線分開,往往不只一條線辦得到。SVM會繼續問:能不能在兩群之間,留下較寬的空間?

    如果無法完全分開,也不必立刻追求一條繞過所有點的曲線。可以先允許一些樣本進入間隔甚至分錯,控制擬合與限制的取捨;真的需要彎曲邊界時,再考慮特徵映射與kernel。

    這篇先用四個自訂點手算間隔、hinge loss與C的代價,再看官方原圖拆解不同核與RBF參數。目的是讓你理解模型在選什麼,而不是把「換成RBF」當成自動解決分類的方法。

    分類邊界之外,還要看間隔

    二元線性SVM可先寫成:

    f(x) = w·x + b
    f(x) > 0:預測正類
    f(x) < 0:預測負類
    f(x) = 0:位於決策邊界
    

    w控制方向,b決定位置。二維邊界是一條直線,多維則是超平面。和羅吉斯迴歸不同,這個f本身不是0到1之間的機率。

    圖1|來源生成40個可分的二維點,使用linear SVC、C=1000。實線為f=0,虛線為f=−1與f=1,外圈標出該次模型的支持向量。這是來源教學資料,並非本篇四點例;C很大也仍是有限值,不能說所有SVM都沒有正則化。來源:scikit-learn developers,Maximum margin separating hyperplane,BSD 3-Clause,原圖未改。

    為了定義間隔,我們把類別標籤寫成y∈{−1,+1},並用y×f(x)看方向與信心尺度。正確側的點有正值,但只是略大於0,與到達參考間隔1仍然不同。

    在線性模型、w不為0且參數使用這個標準尺度時,f=−1與f=1兩個超平面的距離為2/||w||。因此,控制較小的權重範數,對應較寬的參考間隔。軟間隔模型可以允許樣本落入這段空間,這時兩條虛線並不保證中間完全沒有點。

    先用四個點,看懂為什麼不是只要分對

    以下全部是自訂一維教學點,座標沒有業務單位:

    x類別yf=x時的y×fhinge loss
    −2−120
    −1−110
    1110
    2120

    選w=1、b=0,邊界在x=0;參考線位於x=−1與1,寬度為2,所有點的y×f至少1。這個簡單可分例裡,靠邊界的−1與1約束了可用的最大間隔。

    如果改成w=0.5、b=0,四個點仍在正確側,分類一個也沒錯。但y×f變成1、0.5、0.5、1;中間兩點沒有達到參考間隔1,因此會付出hinge loss。

    hinge loss(y, f) = max(0, 1 − y×f)
    
    y×f ≥ 1:損失0
    0 < y×f < 1:分對,但未達參考間隔,損失介於0與1
     y×f < 0:分錯,損失大於1
    

    在邊界y×f=0時損失為1。hinge loss不只處罰分錯,也處罰「分對但間隔不足」,所以不能拿訓練準確率完全代替訓練目標。

    C控制的是違反間隔的代價

    常見線性軟間隔SVM的目標可以寫成:

    J(w,b) = ½||w||² + C × Σᵢmax(0, 1 − yᵢf(xᵢ))
    C > 0
    

    前半希望權重範數小,後半希望少違反間隔。本篇使用損失總和;若某工具用平均損失,參數數值的對應會不同。

    沿用四點,先只比較兩個候選,不宣稱這樣就完成一般SVM求解:

    候選½w²hinge損失總和C=0.1的目標C=1的目標
    w=1,b=00.500.50.5
    w=0.5,b=00.12510.2251.125

    C較小時,第二個候選願意用間隔不足換較小的權重範數;C較大時,在這兩個候選中,第一個比較划算。

    這裡兩者都分對,已足以看出:C不只是「允許幾個錯誤」。增加C提高違反間隔的相對代價,但不保證資料能分開、不保證零錯誤,也不保證新資料更準。和正則化的λ用法相比,常見SVC裡C較小通常代表相對限制較強。

    圖2|此來源另生成40點,linear SVC、C=1;背景是decision function,黑實線為邊界,虛線為兩側間隔,外圈為支持向量。它和圖1不是同一組點,不能把兩張直接當成只改C的對照。來源:scikit-learn developers,SVM Margins Example,BSD 3-Clause,原圖未改。

    圖3|與圖2使用相同40點,改成C=0.05。比較虛線位置與落在間隔內的點,比只數分類錯誤更能看見C的作用。來源同圖2,原圖未改。

    支持向量通常與邊界或違反間隔的訓練樣本有關,不應概括成「全部剛好在虛線上」。軟間隔下,它們也可能在間隔內或被分錯。實際哪些點具有非零對偶係數,要由求解結果決定。

    分不開時,可以先改變特徵表示

    一條直線不夠用,不表示資料沒有規律。假設原本只看x,類別卻由|x|是否很大決定;加入x²後,就可能用新空間裡的線性邊界描述。

    更一般地,把輸入x轉成φ(x),再在新表示上建立線性分類器。這裡的關鍵是改變能表達的關係,而不是無條件提高維度;特徵太多也可能讓模型記住雜訊。

    例如二維輸入的平方內積有:

    (x·z)² = x₁²z₁² + 2x₁x₂z₁z₂ + x₂²z₂²
    
    可用 φ(x) = [x₁², √2 x₁x₂, x₂²]
    使 φ(x)·φ(z) = (x·z)²
    

    這個例子讓我們不必真的先列出所有新欄位,就能計算轉換後的內積。kernel trick用的正是這種對應:透過核函數K(x,z)計算某種特徵表示下的內積。

    不是任意「看起來像相似度」的函數,都滿足標準核SVM所需的條件;使用工具提供的核,也要理解它的參數與假設。

    同一批點,換核函數後邊界怎麼變

    以下四種核的對照都使用同一組16個來源樣本,C=1;gamma在適用的核中設為2。這些是邊界示意,不是四種方法的獨立測試排行榜。

    圖4|紫色與黃色分別是類別0與1;先看原資料的位置,再看模型如何分區。來源:scikit-learn developers,Plot classification boundaries with different SVM Kernels,BSD 3-Clause,原圖未改。

    Linear:保留原空間的直線邊界

    K(x,z) = x·z
    

    圖5|線性核在原空間得到直線邊界,部分點可能落在間隔內或被分錯。此處內積不是自動等於cosine similarity;只有額外考慮向量長度正規化等條件,才有相應關係。來源同圖4,原圖未改。

    線性模型是值得比較的起點,尤其特徵已經能表達任務關係時。高維稀疏文字資料也常先比較線性分類器,不必先假定非線性核會比較好。

    Polynomial:透過乘積項改變關係

    K(x,z) = (gamma × x·z + coef0)^degree
    

    圖6|來源使用degree=3、gamma=2、coef0=0;這和前面為教內積而手寫的二次映射例子不同。原空間裡邊界可彎曲;圖中適應這組點的形狀,不證明一定泛化較好。來源同圖4,原圖未改。

    RBF:距離越遠,核值越小

    K(x,z) = exp(−gamma × ||x−z||²)
    

    圖7|RBF可以在原輸入空間產生局部彎曲的分區。這不是KNN的多數決,邊界也不代表輸出已是可靠機率。來源同圖4,原圖未改。

    核SVM的決策可寫成支持向量的加權核值總和再加截距:

    f(x) = Σᵢ αᵢ yᵢ K(xᵢ,x) + b
    

    α來自求解,和先前KNN按距離直接投票不同。對非線性核而言,特徵空間的參考間隔投影回原空間後,不能直接把圖中兩條彎線的視覺距離當成固定的2/||w||。

    Sigmoid核:名稱不等於分類機率

    K(x,z) = tanh(gamma × x·z + coef0)
    

    圖8|這裡用的是tanh核,並非羅吉斯迴歸把分數轉成0到1機率的sigmoid輸出。這個參數設定下的邊界不合適,不能推成只要資料外形像S曲線就應選此核。sigmoid核也需注意參數與適用條件。來源同圖4,原圖未改。

    這組原圖的價值是讓你看模型可以怎樣彎曲,而不是指定永遠的贏家。

    RBF的gamma與C,要一起看

    對固定距離,gamma越大,RBF核值越快衰減,影響範圍越局部;gamma較小則衰減較慢。但最後邊界還受C、資料尺度與支持向量係數影響,不是只移動一個旋鈕。

    圖9|來源只取Iris前兩個特徵、其中兩個類別,列由上到下C=0.01、1、100,欄由左到右gamma=0.1、1、10。背景表示decision function,不是分類機率。這是二維訓練邊界對照,不是原頁另一張用四特徵三類算出的CV熱圖。來源:scikit-learn developers,RBF SVM parameters,BSD 3-Clause,原圖未改。

    很局部的設定可能讓邊界追著單點走,太平滑的設定則可能漏掉關係;哪個比較好,必須靠合適的驗證資料。增加C也不一定能補救不合適的gamma。

    這張來源教學圖為簡化展示,對完整資料擬合了StandardScaler。它可以用來理解邊界,卻不能把該段程式原封不動當成無洩漏的模型評估範本。自己的流程應把縮放放在Pipeline內,每個訓練折獨立擬合,再在對應驗證折評估。

    縮放尤其影響RBF:同一段實際距離換成大1000倍的數值,平方距離就變成大100萬倍,固定gamma的核值也會跟著改變。先決定特徵與尺度,再搜尋C與gamma,比反覆猜某個神奇數字可靠。

    用Python核對間隔代價與RBF值

    以下僅用標準函式庫,比較本篇兩個自訂候選的目標值,並算兩個距離下的RBF核值。它沒有求解一般SVM,也沒有重跑來源的訓練圖。

    from math import exp
    
    xs = [-2, -1, 1, 2]
    ys = [-1, -1, 1, 1]
    for w in (1.0, 0.5):
        margins = [y * w * x for x, y in zip(xs, ys)]
        hinge_sum = sum(max(0, 1 - m) for m in margins)
        objectives = {C: round(0.5 * w * w + C * hinge_sum, 6)
                      for C in (0.1, 1.0)}
        print("w:", w, "margins:", margins,
              "hinge_sum:", hinge_sum, "objectives:", objectives)
    for gamma in (0.1, 1.0, 10.0):
        print("gamma:", gamma, "K(d=1):", round(exp(-gamma), 6),
              "K(d=2):", round(exp(-gamma * 4), 6))
    

    w=1時損失總和0,兩個C的目標都是0.5;w=0.5時損失總和1,目標為0.225與1.125。gamma=1時,距離1的RBF值約0.367879,距離2則約0.018316。這是核值,不是「兩點同類別的機率」。最後一列的距離2若顯示0.0,是保留六位小數的四捨五入;exp(−40)仍大於0。

    實務選擇:先保留可比較的基準

    先用適合時間、群組或獨立樣本的切分建立交叉驗證。把特徵處理與縮放放進訓練折,再比較線性基準、不同C,以及確實有需要的非線性核與參數。

    類別不平衡時,也要檢查class weight與Precision、Recall及閾值;提高整體C不是自動處理少數類別的方式。如果要提供機率,另做適當校準並驗證,不能把decision function直接標成百分比。

    核函數省去顯式列出巨大特徵映射,卻不保證訓練快或記憶體小。核方法可能涉及大量成對計算與快取;完整n×n核矩陣有平方級大小,實際求解器是否存滿、花多少時間則依方法與資料而變。大資料可比較線性方法或核近似,仍需驗證品質與成本。

    學會SVM之後,真正值得帶走的是這三個判斷:目前特徵能不能分、你願意為間隔違反付出多少代價、加入彎曲能力後是否真的改善新資料。這比只記得「RBF很強」更能幫你選模型。

    來源與圖片授權

    本篇四點、兩候選目標值與RBF數值為本站自訂教學並以正文程式重算;官方原圖的完整訓練實驗未由本站重跑。

    全部九張原圖來自scikit-learn developers,依BSD 3-Clause使用,逐組來源如下:

    完整BSD聲明如下:

    BSD 3-Clause License
    
    Copyright (c) 2007-2026 The scikit-learn developers.
    All rights reserved.
    
    Redistribution and use in source and binary forms, with or without
    modification, are permitted provided that the following conditions are met:
    
    * Redistributions of source code must retain the above copyright notice, this
      list of conditions and the following disclaimer.
    
    * Redistributions in binary form must reproduce the above copyright notice,
      this list of conditions and the following disclaimer in the documentation
      and/or other materials provided with the distribution.
    
    * Neither the name of the copyright holder nor the names of its
      contributors may be used to endorse or promote products derived from
      this software without specific prior written permission.
    
    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
    AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
    FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
    DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
    SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
    CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    

    封面沿用圖1等比縮放加白邊。手機圖9將九格依原圖由上至下、每列由左至右的順序排成單欄,保留每格標題與資料,僅裁外圍白邊;改作依相同BSD 3-Clause條件使用。

    留言0

    登入後就能留言。

    登入
    sunny 桑尼
    sunny 桑尼

    AI 資料科學 · 產品經理 · 蒙奇 D 桑尼

    專注於 AI 工具應用與資料科學教育,致力於讓每個人都能用 AI 提升工作效率。曾任職於科技業,現為全職教育創作者。

    讀更多文章 →想自己動手試?領免費 Starter Kit →