概述
SVM,全稱support vector machine,是一個非常經典的二分類算法,在神經網絡流行之前,在機器學習領域佔據着舉足輕重的地位。
名詞解釋
- 決策邊界:決策邊界是SVM中用來劃分不同分類的邊界線,svm就是通過優化決策邊界找到最優模型的。
- 支持向量:是決策邊界的基礎,決策邊界求解過程,就是找到離不同分類的點距離最遠的邊界,依賴的點稱之爲支持向量。
- 普通向量:除支持向量之外的數據點,這些點與決策邊界的計算無關。
- 魯棒性:指健壯性。在機器學習中的含義有兩個:
- 容錯性:當樣本中出現錯誤或誤差時,算法能很好支持,不受其影響。
- 應對分佈不均:當訓練樣本和測試樣本分佈不均勻時,能很好的應對。
- 對數:如n=logab,則an=b。
推演過程
先回憶一下邏輯迴歸的代價函數:
cost(hθ(x),y)={−y∗log(hθ(x))−(1−y)log(1−hθ(x))}
其中hθ(x)=1+e−θTX1,爲了書寫方便,假設−θTX=−z,則hθ(x)=1+e−z1,把該公式代入代價函數,則當y=0、y=1的情況下:
- y=0:cost(0)={−log(1−1+e−z1)}
- y=1:cost(1)={−log(1+e−z1)}
分別畫出代價函數的示意圖形:
其中黑色的曲線代表的是邏輯迴歸的代價函數。
紫色的由兩條直線組成的圖形就是支持向量機的示意圖形。
由上圖可以看出,支持向量機圖形的趨勢與邏輯迴歸是一致的,區別在於邏輯迴歸的圖形是曲線,而支持向量機的圖形是兩條直線組成的。
所以支持向量機比邏輯迴歸擁有更高的性能。
(可選內容)下面推演一下,當y=1的情況下,爲什麼隨着z的增大,代價函數的值在變小:
- 隨着z的增大,則e−z趨近於0。
- 則1+e−z1趨近於1.
- 則log1+e−z1趨近於0,因爲100=1
y=0的情況是一樣的就不推了。
公式
邏輯迴歸帶正則的代價函數爲:
minθm1[i=1∑my(i)∗(−log(hθ(x(i))))+(1−y(i))(−log(1−hθ(x(i))))]+2mλj=1∑nθj2
假設:
cost1θTX(i)=−log(hθ(x(i)))
cost0θTX(i)=−log(1−hθ(x(i)))
並去掉分子m,則公式變成:
minθ[i=1∑my(i)∗(cost1θTX(i))+(1−y(i))(cost0θTX(i)))]+2λj=1∑nθj2
現在把公式看成兩部分,前部分爲A,後部分爲λB,則公式簡化爲A+λB,支持向量機中更習慣的寫法是把λ參數寫在A參數上並用C標識,所以該公式可以簡化爲CA+B,C相當於λ1,當然僅僅是相當於,實際上肯定是不等的。
最終得到支持向量機的公式爲:
minθC[i=1∑my(i)∗(cost1θTX(i))+(1−y(i))(cost0θTX(i)))]+j=1∑nθj2
基本原理
適合進行分類任務。如下圖所示,要區分藍綠顏色的點,可以在它們中間找到很多的邊界線,這個線稱爲決策邊界線。SVM的目的是從這麼多的決策邊界線中找到離各顏色的支持向量距離最大的決策邊界。
上圖有兩個決策邊界,都可以對兩個類別的數據進行劃分,但是顯然右邊的那條是最合適的,因爲它離兩邊元素的距離最遠,通俗的講就是“路寬的優先選擇”。
線性 VS 非線性
線性可分
線性可分指的就是通過線性函數,就能把數據進行正確分類,表現就是二維空間的一條直線,多維空間的一個平面(多維空間下可能就不是平面了,叫超平面)。
非線性可分
現實世界中,大多數情況下線性函數都不能進行有效的分類,比如下圖所示的數據,內容交雜在一起,通過一個線性函數是不能進行有效劃分的。
這種情況下,就要使用非線性的函數才能很好的分類,比如一條曲線:
實現思路是把低緯度數據通過轉換形成高緯度數據,然後計算出最優的決策邊界。當然,升維後數據計算的效率急劇下降,所以實現的時候只是模擬,並不會真正的去升維。能達到這個效果的函數有:
核函數
爲了支持非線性的分類,我們需要生成新的特徵來參與計算,比如多項式的方式x0∗x02,特徵的組合方式多種多樣,選擇哪個會更好呢?
核函數是支持向量機生成新特徵的方式。
高斯函數
獲取新特徵
假設新特徵用f標識,我們在座標上手工標識3個點l(1)l(2)l(3),則新特徵f1=similarity(x,l(1))=exp(−2σ2∣∣x−l(1)∣∣2),是根據x生成出來的新特徵。分子的含義代表的是x和l(1)的距離。
同理,f2=similarity(x,l(2))=exp(−2σ2∣∣x−l(2)∣∣2)
f3=similarity(x,l(3))=exp(−2σ2∣∣x−l(3)∣∣2)。
核函數簡寫爲k(x,l(i))。
有了新特徵,就可以代入到評估函數中進行計算了。
那座標上手工標識的3個點l(1)l(2)l(3)是怎麼來的,請看下節分析。
獲取標記點
標記點一般直接採用訓練樣本,比如x(i)生成的新特徵爲:
f1(i)=k(x(i),l(1))
f2(i)=k(x(i),l(2))
f3(i)=k(x(i),l(3))
fm(i)=k(x(i),l(m))
C參數
參數C相當於λ1:
- C越大,則正則影響越小,則方差越大。
- C越小,則正則影響越大,則偏差越大。
代表模型的準確度,C越大,準確度越高。但是這個值並不是越大越好,因爲過擬合的模型,在訓練集上的表現肯定是最好的,但是由於缺乏泛化能力,在測試集上的效果可能會很差。所以C取什麼值合適,還要看測試效果。
σ 參數
σ越大,則坡度越平滑,則偏差越大。
σ越小,則坡度越陡峭,則方差越大。
核函數的選擇
使用n代表特徵向量的大小,使用m代表樣本的大小。
則當n遠遠大於m時,採用邏輯迴歸即可。
當m適中時,選擇線性或高斯都可以。
當m非常大時,需要提升n的數量,然後使用線性核函數。
參考
SVM支持向量機入門及數學原理
支持向量機(SVM)從入門到放棄再到掌握
《統計學方法》李航著