1. 程式人生 > >支援向量機(SVM)簡單小結

支援向量機(SVM)簡單小結

支援向量機,就是常說的SVM,為學習複雜的非線性方程提供一種更為清晰,更加強大的方式。

模型優化

我們從邏輯迴歸對SVM的cost function進行推導演繹。

回顧邏輯迴歸我們可以知道,當z>>0的時候可以認為y=1;當z<<0時候,y=0。

由上圖可以知道,我們由邏輯迴歸的costfunction使用紅色的折線進行近似替代,因此由邏輯迴歸的costFunction:

我們可以得到SVM的cost Function如下:

在這裡我們可以將C看作是1/λ。

大邊界直觀理解

我們有時候將SVM看作是大間距分類器,接下來將介紹其中的含義,並有助於我們直觀理解SVM模型的假設。

這是我的支援向量機模型的代價函式,在左邊這裡我畫出了關於 z 的代價函式 cost1(z),
此函式用於正樣本,而在右邊這裡我畫出了關於 z 的代價函式 cost0(z),橫軸表示 z,現在讓
我們考慮一下,最小化這些代價函式的必要條件是什麼。如果你有一個正樣本,y 等於 1,
則只有在 z 大於等於 1 時,代價函式 cost1(z)才等於 0。換句話說,如果你有一個正樣本,我
們會希望z>=1,反之,如果 y 是等於 0 的,我們觀察一下,函式 cost0(z),它只有在 z<=1
的區間裡函式值為 0。這是支援向量機的一個有趣性質。事實上,如果你有一個正樣本 y 等
於 1,則其實我們僅僅要求z大於等於 0,就能將該樣本恰當分出,這是因為如果z>0大的話,我們的模型代價函式值為 0,類似地,如果你有一個負樣本,則僅需要z<=0 就會將負例正確分離,但是,支援向量機的要求更高,不僅僅要能正確分開輸入的樣本,即不僅僅要求z>0,我們需要的是比 0 值大很多,比如大於等於 1,我也想這個比 0 小很多,比如我希望它小於等於-1,這就相當於在支援向量機中嵌入了一個額外的安全因子。或者說安全的間距因子

因此如果我們在使用SVM的時候,只要C的值合適,我們就可以得到如圖中黑色的Decision Boundary。
這樣的決策邊界會給兩種資料樣本留以足夠的間距,因此有時候說SVM是大間距分類器。當C設定的不要太大,則你最終會得到這條黑線,當然資料如果不是線性可分的,如果你在這裡有一些正樣本或者你在這裡有一些負樣本,則支援向量機也會將它們恰當分開。因此,大間距分類器的描述,僅僅是從直觀上給出了正則化引數 C 非常大的情形,同時,要提醒你 C 的作用類似於 1/λ,λ是我們之前使用過的正則化引數。這只是C 非常大的情形,或者等價地λ非常小的情形。你最終會得到類似粉線這樣的決策界,但是實際上應用支援向量機的時候,當 C 不是非常非常大的時候,它可以忽略掉一些異常點的影響,得到更好的決策界。甚至當你資料不是線性可分的時候,支援向量機也可以給出好的結果。

因此,

C 較大時,相當於 λ 較小,可能會導致過擬合,高方差。

C 較小時,相當於 λ 較大,可能會導致低擬合,高偏差。

核函式

我們之前討論過可以使用高階數的多項式模型來解決無法用直線進行分隔的分類問題:例如下圖:

給定一個訓練例項x,我們利用x的各個特徵與我們預先選定的標誌l1,l2,l3的相似程度來選取新的特徵f1,f2,f3.

例如:我們使用高斯核函式來衡量x中的所有特徵和標誌位l1的之間的距離的和。

其中:

如何選擇標誌?
我們通常是根據訓練集的數量選擇地標的數量,即如果訓練集中有 m 個例項,則我們
選取 m 個地標,並且令:l(1)=x(1),l(2)=x(2),…,l(m)=x(m)。這樣做的好處在於:現在我們得到的新特徵是建立在原有特徵與訓練集中所有其他特徵之間距離的基礎之上的,

下面是支援向量機的兩個引數 C 和 σ 的影響:

C 較大時,相當於 λ 較小,可能會導致過擬合,高方差;

C 較小時,相當於 λ 較大,可能會導致低擬合,高偏差;

σ 較大時,導致高方差;

σ 較小時,導致高偏差。

下面是一些普遍使用的準則:
n 為特徵數,m 為訓練樣本數。

(1)如果相較於 m 而言,n 要大許多,即訓練集資料量不夠支援我們訓練一個複雜的非
線性模型,我們選用邏輯迴歸模型或者不帶核函式的支援向量機。

(2)如果 n 較小,而且 m 大小中等,例如 n 在 1-1000 之間,而 m 在 10-10000 之間,
使用高斯核函式的支援向量機。

(3)如果 n 較小,而 m 較大,例如 n 在 1-1000 之間,而 m 大於 50000,則使用支援向量機會非常慢,解決方案是創造、增加更多的特徵,然後使用邏輯迴歸或不帶核函式的支援向量機。