SVM的原理
SVM是一種二分類模型, 基本模型是在特徵空間中尋找間隔最大化的分離超平面的線性分類器. 如果數據線性可分, 可以直接使用硬間隔SVM; 如果數據近似可分, 引入鬆弛變量, 使用軟間隔SVM; 如果數據不可分, 通過引入核函數, 使用非線性SVM.
SVM具體推導過程
硬間隔原問題
求最大間隔分離超平面可以轉換成以下約束最優化問題:
w,bmax∣∣w∣∣γ^s.t.yi(w⋅xi+b)≥γ^,i=1,2,...N注: γ爲超平面(w,b)關於訓練數據集中所有樣本點(xi,yi)的函數間隔的最小值. γ^=i=1,...,Nminγi^
另外, 由於函數間隔 γ^ 的取值不會影響最優化問題的解, 因此可以取 γ^=1, 又因爲最大化 ∣∣w∣∣1 和最小化 21∣∣w∣∣2 等價, 所以得到線性可分支持向量機的原問題:
w,bmin21∣∣w∣∣2s.t.yi(w⋅xi+b)−1≥0,i=1,2,...N
硬間隔對偶問題
應用拉格朗日對偶性, 可以將原問題轉換成與之等價的對偶問題:
αmin21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαis.t.i=1∑Nαiyi=0αi≥0,i=1,2,...N
軟間隔原問題
通過引入鬆弛變量, 得到近似線性可分數據集的軟間隔分離超平面, 轉換成最優化問題:
w,bmin21∣∣w∣∣2+Ci=1∑Nξis.t.yi(w⋅xi+b)≥1−ξi,i=1,2,...Nξi≥0,i=1,2,...N
關於軟間隔SVM的優化目標函數(上式), 除了可以由最大化幾何間隔得到, 還有另外一種解釋, 即: 合頁損失函數+正則化項:w,bmini=1∑N[1−yi(w⋅xi+b)]++λ∣∣w∣∣2
其中,
[z]+={z,z>00,z≤0
可以這樣理解, 當樣本點(xi,yi)被正確分類且函數間隔(確信度)yi(w⋅xi+b) 大於1時, 損失是0, 否則損失是 1−yi(w⋅xi+b)
兩種理解得到的目標函數等價
軟間隔對偶問題
αmin21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαis.t.i=1∑Nαiyi=00≤αi≤C,i=1,2,...N設 α 的最優解爲 α∗, 則原問題中 w,b 的解爲:
w∗=i=1∑Nαi∗yixib∗=yj−i=1∑Nyiαi∗(xi⋅xj)得到分離超平面爲w∗⋅x+b∗=0分類決策函數爲: f(x)=sign(w∗⋅x+b∗)
核函數
在線性支持向量機的對偶問題中, 無論是目標函數還是決策函數(分離超平面), 都只涉及輸入實例與實例之間的內積 xi⋅xj. 用核函數K(xi,xj)=ϕ(xi)⋅ϕ(xj)來代替的話, 目標函數變爲: W(α)=21i=1∑Nj=1∑NαiαjyiyjK(xi,xj)−i=1∑Nαis.t.i=1∑Nαiyi=00≤αi≤C,i=1,2,...N分類決策函數變爲: f(x)=sign(i=1∑Nα∗yiϕ(xi)⋅ϕ(x)+b∗)=sign(i=1∑Nα∗yiK(xi,xj)+b∗)這等價於經過映射函數 ϕ 將原來的輸入空間變換到一個新的特徵空間. 從而在特徵空間中利用線性分類器做分類. 在實際應用中, 往往以來領域知識直接選擇核函數.
常用核函數
- 線性核, 即不使用核函數(Linear kernel function)
- 多項式核函數(Polynomial kernel function)K(x,z)=(x⋅z+1)p對應的SVM決策函數爲:f(x)=sign(i=1∑Nαi∗yi(xi⋅x+1)p+b∗)
- 高斯核函數(Gaussian kernel function)K(x,z)=exp(−2σ2∣∣x−z∣∣2)對應的SVM決策函數爲:f(x)=sign(i=1∑Nαi∗yiexp(−2σ2∣∣x−z∣∣2)+b∗)
SMO算法(序列最小最優化算法)
SMO是一種啓發式算法,其基本思想是:如果所有變量的解都滿足了此最優化問題的KKT條件,那麼這個最優化問題的解就得到了。否則,選擇兩個變量,固定其它變量,針對這兩個變量構建一個二次規劃問題,然後關於這個二次規劃的問題的解就更接近原始的二次歸還問題的解,因爲這個解使得需要優化的問題的函數值更小。重要的是,這時子問題可以通過解析的方法求解,這樣就可以大大提高整個算法的計算速度。子問題有兩個變量,一個是違反KKT條件最嚴重的哪一個,另一個由約束條件自動確定,如此,SMO算法將原問題不斷分解爲子問題並對子問題進行求解,進而達到求解原問題的目的。
SVM常見面試題
-
SVM什麼時候選擇線性核, 什麼時候選擇高斯核?
答: 當m(數據量)比較小而n(特徵數量)比較大的時候, 應該用線性核. 因爲此時特徵空間已經很高維了, 而數據量不夠多, 線性核足夠分類了, 如果用高斯核投影到高維空間的話容易造成過擬合.
當m比較大而n比較小的時候, 應該用高斯核. 比如數據量很大的2維訓練集, 此時可能線性不可分, 需要高斯核投影到高維空間進行線性分類.
-
在使用高斯核之前需要對數據進行處理嗎?
答: 需要進行特徵縮放, 因爲高斯核需要兩個點之間的歐式距離, 如果不進行特徵縮放的話數量級較大的特徵對核函數的結果有決定性影響, 而數量級小的特徵會被忽略.
-
SVM中如何解決數據不平衡問題?
答: 數據不平衡在SVM中導致的主要問題是數量少的樣本分佈空間不如數量多的廣, 支持向量總體會向數量少的分類偏移. 解決辦法是給樣本少的分類更大的懲罰因子C, 表示我們更重視這部分樣本. C+和C-可以按樣本數量比例分, 或者按空間超球體的半徑比例分, 具體結合實際問題考慮.
-
SVM中原始問題爲什麼要轉化成對偶問題進行求解?
答: 1. 改變算法複雜度. 對偶問題往往更容易求解. 2. 轉化爲對偶問題才能得到內積的形式, 引入核函數, 進而推廣到非線性分類問題.
-
SVM爲什麼採用間隔最大化?
答: 當數據線性可分時, 有無窮多個超平面可以將數據分開, 利用間隔最大化可以求得最優分離超平面, 解是唯一的, 此時的分離超平面的分類結果是最魯棒的, 對未知數據的泛化能力最強.
-
爲什麼SVM要引入核函數?
答: SVM在求解對偶問題的時候, 會出現數據點的內積的形式, 而分類決策函數也只需要內積的結果, 因此可以通過引入核函數把樣本映射到高維空間, 隱式地在高維空間中進行分類. 當樣本在原始空間線性不可分時, 通過核函數將樣本映射到更高維的特徵空間, 樣本在這個特徵空間將線性可分或者接近線性可分.
-
核函數理論上可以應用在別的分類算法上比如LR, 爲什麼不建議這麼做?
答: 分類模型的結果就是計算決策面,模型訓練的過程就是決策面的計算過程。在計算決策面時,SVM轉化爲對偶問題後,只有少數幾個代表支持向量的樣本參與了計算,也就是隻有少數幾個樣本需要參與覈計算(即kernal machine解的係數是稀疏的),這個在進行復雜核函數計算時優勢很明顯,能夠大大簡化模型和計算量。然而,LR算法裏,每個樣本點都必須參與決策面的計算過程,也就是說,假設我們在LR裏也運用核函數的原理,那麼每個樣本點都必須參與覈計算,這帶來的計算複雜度是相當高的。所以,在具體應用時,LR很少運用核函數機制。
-
SVM相對於LR有什麼不同?
答: 1.樣本點對於模型的作用不同. SVM中只有支持向量對模型有影響, 而LR中所有點都有影響. 2.損失函數不同. SVM採用的是合頁損失函數, LR採用的是對率損失函數. 3.輸出不同. LR輸出的是對樣本點是否屬於給定分類的概率, SVM只能判斷是否屬於某一分類. 4.處理非線性問題的能力不同. SVM可以通過核函數靈活的將非線性問題轉化爲線性問題求解, 而LR需要手動進行特徵轉換.
-
SVM的優點?
答: 1.用內積核函數代替向高維空間的非線性映射. 2.間隔最大化的思想, 取得最優分類超平面. 3.最終結果只由支持向量決定, 剔除了大量的冗餘樣本, 因此具有一定的魯棒性. 4.決策函數也只由支持向量決定, 降低了計算複雜度. 5.有堅實的理論基礎.
-
SVM的缺點?
答: 1.涉及m階矩陣的計算, 當m很大時候計算的空間複雜度和時間複雜度都很高. 2.傳統的SVM只能給出二分類的結果, 對於多分類需要需要用到組合分類器. 3.對數據缺失敏感, 對參數與核函數選擇敏感.
-
爲什麼SVM對數據缺失敏感?
答: 因爲SVM中涉及了距離度量, 缺失的數據可能對距離的影響很大, 如果處理不好, 結果就會差很多.
-
SVM如何做多分類?
答: 1-V-rest:將某一類歸爲正類,其餘全部是負類。
該方法的最大缺陷是數據集的不平衡,因爲某一類的實例往往只佔一小部分。當然解決不平衡的問題可以進行降採樣或者上採樣,但是上採樣中數據集過多重合,易導致過擬合,而降採樣使得數據利用率不足,不能學習整個模型的特性。
1-V-1:k類的數據集中,單獨爲每兩類的樣本設計SVM,進行分類。最終必須設計k(k-1)/2個分類器,最終用投票的方式進行選擇。這也是libsvm採用的方法,但是當類別比較多的時候, 效率很低.
注: 拉格朗日乘子法和KKT條件原理參考: 如何理解拉格朗日乘子法?, 如何理解拉格朗日乘子法和KKT條件?