機器學習筆記之十二——SVM原理及推導
svm(support vector machine)是一種二分類演算法,它的目標在於尋找一個能將兩種點分離的直線或平面或超平面。
如圖(來自wiki):
圖中的紅線將兩邊資料點分開,這條線就是分割直線,同樣的,在三維座標軸中,將兩邊資料點分開的平面,稱為分割平面;更高維的空間座標軸,統稱為分割超平面。
對於svm來說,找到這個分割超平面的準則或者是思路:使離分割平面較近的點(這種點被稱為支援向量),儘可能的原理這個分割平面。
(再簡單一些理解,就是如圖中的虛線。虛線是穿過較近的一個點,以分割直線為平行線的一條直線。這個虛線距離分割直線的距離越大,效果越好。)
一、SVM的優化目標
既然 支援向量到分割平面的距離越大,模型效果越好,那麼我們就可以將這個距離作為優化目標。
假設分割直線為: , 支援向量到分割直線的x軸距離(對映在x軸上的距離)為1,那麼根據高中的點到線的距離(或線到線的距離公式)可得到:
支援向量到分割平面的距離為: , (w的二範數的平方,即w這個向量的平方和)
同時,我們還要滿足一個條件,那就是樣本如何判定正負(也就是如何分為兩類)。假設
, 可轉化為:
將條件加入優化目標,最終可以優化目標為一個帶不等式約束的求最優值問題:
當然,可以將max轉化為min,這樣就和以前的求最小值看起來很類似的:
,
二、KKT條件
如上 , ,該如何求解?
首先引入一個概念,上面這個公式首先是一個二次項的,其次,它帶有一個不等式形式的約束條件。
對於這種帶有不等式約束的優化問題,我們可以使用KKT條件轉化。
KKT條件轉化是拉格朗日乘子法在不等式約束上的擴充套件(這裡不再展開敘述),其作用是能夠將不等式約束以一種形式融合到優化目標的公式中,使其成為一個完整的公式。
那麼我們的優化目標就能轉化為:
, (w前的二分之一是為了方便求導加上的。後面的部分就是不等式約束右KKT條件轉化得到。)
三、優化目標求解
附上,從最初的優化目標到最終最簡函式。(這一步並不能得到最終解,因為目前有三類變數需要確定,這一步最終使得三類變數化為一類。)
四、軟間隔SVM
之前描述的svm對錯誤的訓練樣本完全沒有容忍程度,但是現實中的資料集很少有完全乾淨的,那麼為了讓svm對錯誤的樣本有一個容忍能力,提高svm泛化能力,我們引入一個引數ε,這樣的svm稱為軟間隔SVM,之前的稱為硬間隔SVM。
在影象座標中表現為:
(ε越大,容忍能力越強)
最初的優化目標改寫成: .
按照之前的推導過程,最後可以得到:
到此,也就得到了一個只關於β的損失函式,怎麼求解,在第六部分的SMO講解。
五、非線性SVM
之前討論的無論是軟間隔還是硬間隔的SVM,都只是在線性可分的角度去考慮,那麼如果是一個線性不可分的問題呢?如下圖(圖來自wiki):
直線無法分割,需要這樣的曲線才能分開。但是在svm中我們不去找這樣的曲線,而是將目標投向高維空間。
低維空間線性不可分的資料,在更高維的某一空間,可能會轉化為線性可分的資料。
那麼如何將資料對映到高維空間?
很簡單,比如原來是一個二維資料,擁有資料特徵x1,x2,藉助線性迴歸中學習的多項式擴充套件可以將其轉化為(x1,x2,x1x2,x1的平方,x2的平方)這樣的五維資料,svm就是採用這樣的方式,但是直接去多項式擴充套件有個致命的問題:
當原始資料的維數本就很大,而且多項式擴充套件的次數還很高的時候,其計算使用的資源是指數級上升的。必須想一種辦法能夠得到一樣的效果,還可以不用那麼大的計算量。
於是核函式就出現了。
核函式(kernel function)
將樣本x和z經過一個k(x,z)的對映,能夠計算出和(x,z,xz,x的平方,z的平方,x的三次方……)一樣的結果,我們就稱這個k(x,z)為核函式。
常見的核函式有:
線性核函式雖然叫做核函式,但是和原先沒有區別……
多項式核函式就是多項式展開了,可以看到裡面的引數d就代表了多項式的次數(是次數,不是展開的維數)。
而高斯核函式才是真正的最優的,可以模擬高維空間,而且計算量並不大的核函式。為什麼可以模擬多項式展開的計算結果呢?
證明結果如下:
六、SMO(Sequencial Minimal Optimization)
上述得到的優化結果為:
,
只剩下了一類需要求解的變數β,但是β並不是一個,而是每個樣本對應一個βi,這樣常規的計算又很麻煩了。
沒關係,大佬提出了SMO演算法,專門解決這個問題。
SMO演算法基本思想:先確定其中的兩個引數βi(確定方法為尋找違反KKT條件最大的βi),只更新這兩個,別的不管。更新完成後,再來找一對βi進行更新,如此迭代,直到所有的βi都符合條件。
小問題1:為什麼每次迭代更新兩個引數?一個可以嗎?
答:不可以,因為有如下約束條件,只改變一個βi會導致約束等式不成立:
小問題2:每一次更新,按照什麼準則選擇兩個引數βi?
答:更新兩個是因為不得已必須更新兩個。那麼第一個要選擇的βi自然是我們最想解決的那個,也就是違反我們目標條件最大的那個。目標條件由推導過程得到,是βi與yig*(x)i的關係,如下:
SMO筆記