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, 這算是我真正學到了一點, 硬核技術了.