天天看點

SVM 實作多分類思路

SVM 實作多分類思路

svm 是針對二分類問題, 如果要進行多分類, 無非就是多訓練幾個svm呗

OVR (one versus rest)

對于k個類别(k>2) 的情況, 訓練k個svm, 其中, 第j個svm用于判斷任意條資料是是屬于類别j還是非類别j.

預測的時候, 具有最大值的 \(w_i^Tx + bi\)

假設樣本有 3個類别, A, B, C, 則需要訓練3個svm, 記為s1, s2, s3

然後輸出一個樣本x, 都要經過 s1, s2, s3, 則為 max(s1(x), s2(x), s3(x)) 該類别

OVO (one versus one)

針對k個類别, 進行兩兩組合, 訓練 k* (k-1) / 2 個svm, 每個svm 隻用于判斷樣本是屬于k中特定的兩個類别.

預測的時候, 用 k * (k-1) / 2 個svm 做 K * (k-1) / 2 次預測, 用投票 的方式決定該樣本是屬于那個類别.

同樣假設樣本有3個類别 A, B, C, 則需訓練 3 * (3-1) / 2 = 3 個支援向量機, 分别是SAB, SAC, SBC

然後輸入一個樣本x, 做3測預測,(AB, AC, BC) , 假設結果分别是: B, A, B 則最終為B類别

SVM 小結

特點

  • 專注于找最優的分界線 (margin), 用于減少過拟合 (異常值不敏感, 隻考慮支援向量)
  • Kernel trick 的應用使得 SVM 能高效處理線性不可分的場景

優勢

  • 理論非常完美
  • 凸優化及對偶(KKT)
  • Max Margin
  • SVM 目标函數
  • SVM 對偶形式(lagrange)
  • Slack SVM
  • Kernel SVM
  • 求解SVM 的SMO 算法
  • 支援不同的Kernel 函數

劣勢

  • 當數量特别大的時候, 訓練較慢

總體而言, 正如jerry大佬常談的, 這種凸優化(對偶) , 核函數 這樣的技術, 不僅僅隻是用于SVM , 很多地方也都可以的呀. 我感覺SVM, 這算是我真正學到了一點, 硬核技術了.

繼續閱讀