吳恩達機器學習筆記-支持向量機

優化目標

以前的課程有學習過Logistic迴歸的假設函數:網絡

$$ h_\theta(x) = \frac{1}{1+e^{-\theta^Tx}} $$app

其圖像以下:機器學習

從圖像能夠看出,若是$y=1$的話,那麼咱們但願$h_\theta(x) \approx 1$,那麼$\theta^Tx >> 0$;若是$y=0$的話,那麼咱們但願$h_\theta(x) \approx 0$,那麼$\theta^Tx << 0$;對於Logistic迴歸的一個樣本的代價則能夠表示爲:函數

$$ -(ylogh_\theta(x) + (1-y)log(1-h_\theta(x))) = -ylog\frac{1}{1+e^{-\theta^Tx}} - (1-y)log(1-log\frac{1}{1+e^{-\theta^Tx}}) $$工具

當y=1時,該函數就只剩減號左邊的部分,畫出的圖像就是$-log\frac{1}{1+e^{-\theta^Tx}}$的圖像,而後咱們開始創建支持向量機。首先從這個函數y一點點的進行修改,取這裏的z=1點,先畫出將要用的代價函數,新的代價函數將會水平的從這裏到右邊,而後再畫一條同邏輯迴歸很是類似的直線,可是在這裏是一條直線,也就是 用紫紅色畫的曲線。那麼到了這裏已經很是接近邏輯迴歸中使用的代價函數了,只是這裏是由兩條線段組成 即位於右邊的水平部分和位於左邊的直線部分。先別過多的考慮左邊直線部分的斜率,這並非很重要,可是 這裏咱們將使用的新的代價函數是在y=1的前提下的。你也許能想到這應該能作同邏輯迴歸中相似的事情但事實上在以後的的優化問題中這會變得更堅決,而且爲支持向量機帶來計算上的優點。學習

同理y時,該函數只剩下減號右邊部分,即$-log(1-log\frac{1}{1+e^{-\theta^Tx}})$。這個樣本的代價或是代價函數的貢獻將會由這一項表示,而且,若是你將這一項做爲z的函數,那麼,這裏就會獲得橫軸z,如今 已經完成了支持向量機中的部份內容。一樣地,再來一次,咱們要替代這一條藍色的線,用類似的方法。若是用 一個新的代價函數來代替,即這條從0點開始的水平直線,而後是一條斜線。那麼,如今給這兩個方程命名左邊的函數稱之爲$cost_1(z)$。同時,在右邊函數稱它爲$cost_0(z)$這裏的下標是指,在代價函數中對應的y=1和 y=0的狀況。擁有了這些定義後。如今,咱們就開始構建支持向量機。優化

首先寫出以前logistic迴歸的代價函數,但這裏把負號移動到表達式的裏面。對於支持向量機而言,將中括號裏$-logh_\theta(x^(i))$表示爲$cost_1(\theta^Tx^(i))$,後面的$-log(1-h_\theta(x^(i)))$表示爲$cost_0(\theta^Tx^(i))$。對於邏輯迴歸,在目標函數中,咱們有兩項,第一項是來自於訓練樣本的代價,第二項是正則化項,咱們不得不去,用這一項來平衡。這就至關於咱們想要最小化A加上正則化參數λ而後乘以其餘項B:$A+\lambda B$。這裏的A表示這裏的第一項,用B表示第二項但不包括λ。ui

咱們不是優化這裏的$A+\lambda B$,咱們所作的,是經過設置不一樣正則參數$\lambda$達到優化目的。這樣 就可以權衡對應的項,使得訓練樣本擬合的更好。即最小化A仍是對於B項而言保證正則參數足夠小。但對於支持向量機,按照慣例將使用一個不一樣的參數,爲了替換這裏使用的$\lambda$來權衡這兩項,使用一個不一樣的參數稱爲C,同時改成優化目標$C*A+B$,所以,在邏輯迴歸中,若是給定$\lambda$一個很是大的值,意味着給予B更大的權重,而這裏就對應於將C設定爲很是小的值,那麼相應的將會給B比給A更大的權重。這只是一種不一樣的方式來控制這種權衡或者一種不一樣的方法,即用參數來決定是更關心第一項的優化仍是更關心第二項的優化。固然你也能夠把這裏的參數C考慮成$\frac{1}{\lambda}$,同$\frac{1}{\lambda}$所扮演的角色相同,而且這兩個方程或這兩個表達式並不相同,由於C等於$\frac{1}{\lambda}$,可是也並不全是這,若是當C等於$\frac{1}{\lambda}$時,這兩個優化目標應當獲得相同的值相同的最優值$\theta$,所以就用它們來代替。那麼,如今刪掉這裏的$\lambda$而且用常數C來代替這裏。這就獲得了在支持向量機中,咱們的整個優化目標函數,而後最小化這個目標函數獲得SVM學習到的參數C。spa

最後,有別於邏輯迴歸,輸出的機率在這裏,當最小化代價函數 得到參數$\theta$時,支持向量機所作的是,它來直接預測y的值等於1仍是等於0,所以,這個假設函數會預測當$\theta^Tx$大於等於0或者小於0時。因此學習參數θ就是支持向量機假設函數的形式。code

直觀上對大間隔的理解

下圖中的公式表示了支持向量機模型的代價函數,左邊的圖中,畫出了z的代價函數,此函數適用於正樣本,右邊畫的z的代價函數,適用於負樣本。

當y=1時,咱們須要$\theta^Tx>=1$(並非僅僅大於0),當y=0時,咱們須要$\theta^Tx<=-1$(並非僅僅小於0)。咱們假設常量C的值爲一個很大的數,好比100000,而後觀察支持向量機會給出什麼結果。若是C很是大則最小化代價函數的時候,咱們將會很但願找到一個使第一項爲0的最優解。則其實咱們是要獲得$min\frac{1}{2}\sum_{i=1}^{n}\theta_j^2$:

當$y^(i) = 1$,咱們須要$\theta^Tx^(i)>=1$,一樣對於一個樣本$y^(i) = 0$,咱們須要$\theta^Tx^(i)<=-1$.

具體而言,若是考察下面這樣一個數據集:

其中有正樣本也有負樣本,能夠看到這個數據是線性可分的,即存在一條直線把正負樣本分開,且這裏存在有多條不一樣的直線能夠把正負樣本分開。支持向量機會選擇圖中黑色的這條線來做爲決策邊界,相對於其餘的線來看要更合理些。從數學上來說,這條黑線和訓練樣本之間有着更大的最短距離,這個距離被稱做支持向量機的間距,這是支持向量機具備魯棒性的緣由,由於它努力用一個最大間距來分離樣本。所以SVM常常被稱做是一種大間距分類器(Large Margin Intuition)。

在實際的使用中,咱們可能會出現一些異常點數據,好比下圖:

因爲異常點的存在,決策邊界可能就變成了圖中傾斜的那條線,這顯然是不明智的。所以,若是C設置的很是大,這也是支持向量機將會作的,它從圖中較爲豎直的線變爲了傾斜的那條,但若是C的值設置的小一點,最終將會獲得圖中較爲豎直的線。固然,若是數據不是線性可分的,支持向量機也能夠將它們分開。所以大間距分類器僅僅是從直觀上給出了正則化參數C很是大的情形。同時要提醒你C的做用相似於$\frac{1}{\lambda}$,$\lambda$是咱們以前使用過的正則化參數,這只是C很是大的情形或者等價$\lambda$很是小的情形。實際上當C不是很是大時,支持向量機能夠忽略掉一些異常點的影響,獲得更好的決策邊界,甚至當數據不是線性可分的時候也能給出很好的結果。

核函數

假設有個數據集以下圖所示,咱們但願擬合一個非線性的決策邊界來區分正負樣本,一種方法是構造多項式特徵變量如圖中所示:

這裏介紹一種新的寫法:$\theta_0+\theta_1 f_1+\theta_2 f_2+\theta_3 f_3+...$,這裏的一系列將要計算的新的特徵變量。那麼如今有一個問題,有沒有比這些高階項更好的特徵變量呢?

如圖,咱們選擇三個點$l^(1),l^(2),l^(3)$,給定x,計算新的特徵,這個特徵衡量標記點和原先樣本點的類似性。$f_i=similarity(x^(i),l^(i))=exp(-\frac{||x^(i)-l^(i)||^2}{2\sigma^2})$,其中exp中的函數爲高斯核函數。

很顯然能夠得出若$x\approx l^(1)$,則$f_1 \approx 1$;若$x\approx$遠離 l^(1),則$f_1 \approx 0$。而後再看$\sigma$對核函數的影響:

經過上圖能夠看出,$\sigma$越大收斂越慢,反之收斂越快。

那麼如今有個問題,上述的標記點是隨機取得,這很顯然沒那麼簡單,有一種較好的方法,是將訓練集中的正樣本做爲標記點,對於每個訓練集中的數據,咱們都有一個m+1維向量與之對應。 這裏的$f_0$默認爲1。以下圖所示:

將核函數運用到支持向量機中來看,給定x,計算特徵$f\in R^{m+1}$,咱們預測當$\theta^Tf>=0$時y=1。假設函數則爲:$h_\theta(x) = \theta_0 + \theta_1 f_1+\theta_2 f_2+\theta_3 f_3+...$。相應的,代價函數也修改以下圖中所示:

在實際使用中,咱們還須要對正則化項進行調整,計算$\sum_{j=1}^{n=m}\theta_j^2=\theta^T\theta$時,會用$\theta^TM\theta$來代替$\theta^T\theta$,其中M是根據咱們選擇的核函數而不一樣的一個矩陣。這樣作的緣由是爲了簡化計算。理論上講,咱們也能夠在邏輯迴歸中使用核函數,可是上面使用M來簡化計算的方法不適用與邏輯迴歸,所以計算將很是耗費時間。

下面是支持向量機的兩個參數 C 和 $\sigma $的影響(C能夠看作$\frac{1}{\lambda}$):

C較大時,至關於 $\lambda$ 較小,可能會致使過擬合,高方差;
C較小時,至關於$\lambda$較大,可能會致使低擬合,高誤差;
$\sigma$較大時,可能會致使低方差,高誤差;
$\sigma$較小時,可能會致使低誤差,高方差。

實踐SVM

在實際工做中,咱們每每使用已有的工具包中所包含的SVM。在使用時,咱們須要注意其中的參數選定和選擇想要使用的核函數。其中一個選擇是不須要使用任何內核參數,這也叫做線性核函數。所以若是有人說使用了線性核函數的SVM,這就意味着使用了不帶有核函數的SVM。
從邏輯迴歸模型,咱們獲得了支持向量機模型,在二者之間,咱們應該如何選擇呢?以下圖所示:

若是n很大,接近m,那麼使用Logistic迴歸或者線性SVM;
若是n很小,m大小適中,使用高斯核函數;
若是n很小,m很大,則能夠建立新的特徵而後使用logistic迴歸或者線性SVM
神經網絡在上面幾種狀況下均可能有較好的表現,但訓練神經網絡很是慢。

以上,爲吳恩達機器學習第七週支持向量機的課程筆記。

相關文章
相關標籤/搜索