優化目標
之前的課程有學習過回歸的假設函數:
其圖像如下:
從圖像可以看出,如果
的話,那么我們希望
,那么
> 0" ="1">;如果
的話,那么我們希望
,那么
;對于回歸的一個樣本的代價則可以表示為:
當y=1時,該函數就只剩減號左邊的部分,畫出的圖像就是
的圖像,然后我們開始建立支持向量機。首先從這個函數y一點點的進行修改,取這里的z=1點,先畫出將要用的代價函數,新的代價函數將會水平的從這里到右邊,然后再畫一條同邏輯回歸非常相似的直線,但是在這里是一條直線,也就是 用紫紅色畫的曲線。那么到了這里已經非常接近邏輯回歸中使用的代價函數了,只是這里是由兩條線段組成 即位于右邊的水平部分和位于左邊的直線部分。先別過多的考慮左邊直線部分的斜率,這并不是很重要,但是 這里我們將使用的新的代價函數是在y=1的前提下的。你也許能想到這應該能做同邏輯回歸中類似的事情但事實上在之后的的優化問題中這會變得更堅定,并且為支持向量機帶來計算上的優勢。
同理y時,該函數只剩下減號右邊部分,即
。這個樣本的代價或是代價函數的貢獻將會由這一項表示,并且,如果你將這一項作為z的函數支持向量機 邏輯回歸,那么,這里就會得到橫軸z,現在 已經完成了支持向量機中的部分內容。同樣地,再來一次,我們要替代這一條藍色的線,用相似的方法。如果用 一個新的代價函數來代替,即這條從0點開始的水平直線,然后是一條斜線。那么,現在給這兩個方程命名左邊的函數稱之為
。同時,在右邊函數稱它為
這里的下標是指,在代價函數中對應的y=1和 y=0的情況。擁有了這些定義后。現在,我們就開始構建支持向量機。
首先寫出之前回歸的代價函數,但這里把負號移動到表達式的里面。對于支持向量機而言,將中括號里
表示為
,后面的
表示為
。對于邏輯回歸,在目標函數中,我們有兩項,第一項是來自于訓練樣本的代價,第二項是正則化項,我們不得不去,用這一項來平衡。這就相當于我們想要最小化A加上正則化參數λ然后乘以其他項B:
。這里的A表示這里的第一項,用B表示第二項但不包括λ。
我們不是優化這里的
,我們所做的,是通過設置不同正則參數
達到優化目的。這樣 就能夠權衡對應的項,使得訓練樣本擬合的更好。即最小化A還是對于B項而言保證正則參數足夠小。但對于支持向量機,按照慣例將使用一個不同的參數,為了替換這里使用的
來權衡這兩項,使用一個不同的參數稱為C,同時改為優化目標
,因此,在邏輯回歸中,如果給定
一個非常大的值,意味著給予B更大的權重,而這里就對應于將C設定為非常小的值,那么相應的將會給B比給A更大的權重。這只是一種不同的方式來控制這種權衡或者一種不同的方法,即用參數來決定是更關心第一項的優化還是更關心第二項的優化。當然你也可以把這里的參數C考慮成
,同
所扮演的角色相同,并且這兩個方程或這兩個表達式并不相同,因為C等于
,但是也并不全是這,如果當C等于
時,這兩個優化目標應當得到相同的值相同的最優值
,因此就用它們來代替。那么,現在刪掉這里的
并且用常數C來代替這里。這就得到了在支持向量機中,我們的整個優化目標函數,然后最小化這個目標函數得到SVM學習到的參數C。
最后,有別于邏輯回歸,輸出的概率在這里,當最小化代價函數 獲得參數
時,支持向量機所做的是,它來直接預測y的值等于1還是等于0,因此,這個假設函數會預測當
大于等于0或者小于0時。所以學習參數θ就是支持向量機假設函數的形式。
直觀上對大間隔的理解
下圖中的公式表示了支持向量機模型的代價函數,左邊的圖中,畫出了z的代價函數,此函數適用于正樣本,右邊畫的z的代價函數,適用于負樣本。
當y=1時,我們需要
=1" ="1">(并不是僅僅大于0),當y=0時,我們需要
(并不是僅僅小于0)。我們假設常量C的值為一個很大的數,比如,然后觀察支持向量機會給出什么結果。如果C非常大則最小化代價函數的時候,我們將會很希望找到一個使第一項為0的最優解。則其實我們是要得到
:
當
,我們需要
=1" ="1">,同樣對于一個樣本
,我們需要
.
具體而言,如果考察下面這樣一個數據集:
其中有正樣本也有負樣本,可以看到這個數據是線性可分的,即存在一條直線把正負樣本分開支持向量機 邏輯回歸,且這里存在有多條不同的直線可以把正負樣本分開。支持向量機會選擇圖中黑色的這條線來作為決策邊界,相對于其他的線來看要更合理些。從數學上來講,這條黑線和訓練樣本之間有著更大的最短距離,這個距離被稱作支持向量機的間距,這是支持向量機具有魯棒性的原因,因為它努力用一個最大間距來分離樣本。因此SVM經常被稱作是一種大間距分類器(Large )。
在實際的使用中,我們可能會出現一些異常點數據,比如下圖:
由于異常點的存在,決策邊界可能就變成了圖中傾斜的那條線,這顯然是不明智的。因此,如果C設置的非常大,這也是支持向量機將會做的,它從圖中較為豎直的線變為了傾斜的那條,但如果C的值設置的小一點,最終將會得到圖中較為豎直的線。當然,如果數據不是線性可分的,支持向量機也可以將它們分開。因此大間距分類器僅僅是從直觀上給出了正則化參數C非常大的情形。同時要提醒你C的作用類似于
,
是我們之前使用過的正則化參數,這只是C非常大的情形或者等價
非常小的情形。實際上當C不是非常大時,支持向量機可以忽略掉一些異常點的影響,得到更好的決策邊界,甚至當數據不是線性可分的時候也能給出很好的結果。
假設有個數據集如下圖所示,我們希望擬合一個非線性的決策邊界來區分正負樣本,一種方法是構造多項式特征變量如圖中所示:
這里介紹一種新的寫法:
,這里的一系列將要計算的新的特征變量。那么現在有一個問題,有沒有比這些高階項更好的特征變量呢?
如圖,我們選擇三個點
,給定x,計算新的特征,這個特征衡量標記點和原先樣本點的相似性。
,其中exp中的函數為高斯核函數。
很顯然可以得出若
,則
;若
遠離 l^(1),則
。然后再看
對核函數的影響:
通過上圖可以看出,
越大收斂越慢,反之收斂越快。
那么現在有個問題,上述的標記點是隨機取得,這很顯然沒那么簡單,有一種較好的方法,是將訓練集中的正樣本作為標記點,對于每一個訓練集中的數據,我們都有一個m+1維向量與之對應。 這里的
默認為1。如下圖所示:
將核函數運用到支持向量機中來看,給定x,計算特征
,我們預測當
=0" ="1">時y=1。假設函數則為:
。相應的,代價函數也修改如下圖中所示:
在實際使用中,我們還需要對正則化項進行調整,計算
時,會用
來代替
,其中M是根據我們選擇的核函數而不同的一個矩陣。這樣做的原因是為了簡化計算。理論上講,我們也可以在邏輯回歸中使用核函數,但是上面使用M來簡化計算的方法不適用與邏輯回歸,因此計算將非常耗費時間。
下面是支持向量機的兩個參數 C 和
的影響(C可以看做
):
C較大時,相當于
較小,可能會導致過擬合,高方差;
C較小時,相當于
較大,可能會導致低擬合,高偏差;
較大時,可能會導致低方差,高偏差;
較小時,可能會導致低偏差,高方差。
實踐SVM
在實際工作中,我們往往使用已有的工具包中所包含的SVM。在使用時,我們需要注意其中的參數選定和選擇想要使用的核函數。其中一個選擇是不需要使用任何內核參數,這也叫作線性核函數。因此如果有人說使用了線性核函數的SVM,這就意味著使用了不帶有核函數的SVM。
從邏輯回歸模型,我們得到了支持向量機模型,在兩者之間,我們應該如何選擇呢?如下圖所示:
如果n很大,接近m,那么使用回歸或者線性SVM;
如果n很小,m大小適中,使用高斯核函數;
如果n很小,m很大,則可以創建新的特征然后使用回歸或者線性SVM
神經網絡在上面幾種情況下都可能有較好的表現,但訓練神經網絡非常慢。
以上,為吳恩達機器學習第七周支持向量機的課程筆記。