斯坦福機器學習公開課筆記(九)–支援向量機

來源:互聯網
上載者:User

公開課地址:https://class.coursera.org/ml-003/class/index 

授課老師:Andrew Ng

1、optimization objective(最佳化目標)

前面我們提到過羅吉斯迴歸的模型,如下所示:

可以看到,當真實值y為1時,我們希望預測值h(x)儘可能接近1,也就是確保z>>0,當y為0時,我們希望h(x)接近0,也就是確保z<<0。其中針對一個樣本的代價函數如下:


我們可以對y取1,y取0時分別繪出z的取值和代價函數的關係,如:


左側是y=1時,可以看到代價函數值隨著z取值增大而減小,這和我們希望的z>>0時,h(x)儘可能接近1相符,右側是y=0的情況,代價函數值隨著z取值增大而減小。至於我們這裡要提到的支援向量機的代價函數,則是圖中藍色標出的部分,可以看到它和羅吉斯迴歸中的代價函數曲線相似,最大的不同是分成cost1和cost0兩個部分。

前面我們已經知道了羅吉斯迴歸的代價函數形式:

下面給出SVM代價函數形式:


可以看到,這兩者的代價函數形式也是相似的。cost0和cost1分別對應y=0和y=1時的目標函數定義,後面接一個規格化項,係數是因為線性變換消去了。

2、large margin intuition(大間隔)

前面我們已經給出了SVM的代價函數,下面針對y=1和y=0的情況加以說明:


從可以看到,我們在這裡讓C取100000,目的就是讓第一項括弧內的值儘可能小,最好為0.於是我們發現在y=1時,為了讓cost1為0,我們應該讓theta’x≥1,在y=0時,我們需要讓cost0為0,也就是讓theta’x≤-1。前面已經提到過決策邊緣的概念,我們可以得到SVM的決策邊緣:


決策邊緣有了,那麼margin(翻譯為間隔,以下均用英文)這個概念呢?如所示,粉線,綠線和黑線都能夠把兩類樣本分開,這三條線都是決策邊緣,margin就是決策邊緣到距其最近樣本點的距離,這種距離是繪製兩條平行線,中的藍線所示,margin就是黑線到藍線之間的距離。


從中我們也可以發現,決策邊緣應該距離樣本點越遠越好,圖中的粉線和綠線由於距離樣本點太近,當再增加一些樣本點後很可能就不能正確分類了。只有黑線距離兩類樣本點距離較遠,這種遠近就通過margin來衡量,我們要確保margin越大越好,所以SVM也被認為是一個large margin分類器。

在前面我們讓C取值100000,但是根據之前的經驗C的取值肯定不是越大越好,如:


當C取值很大時,得到的決策邊緣就是圖中的粉線,當C取值不那麼大時,就是圖中的黑線。所以說C的取值還是適度好,我們需要在C的取值和margin之間尋找一個平衡點。下面會講到為何C取值很大,margin反而會減小。

3、the mathematics behind large margin classification(大間隔分類背後的數學知識)

首先我們需要補充一點向量方面的知識,學過微積分的應該可以忽略了:

 

如所示,u和v都是向量,公式中給出了u和v的長度表示,乘積計算公式。

上面我們已經把C值設的很大,所以前面一項幾乎為0,剩下的只有後面那項:


從可以發現theta’x也就是p·||theta||,於是我們得到:


y=1時,讓p·||theta||≥1, y=0時,讓p·||theta||≤-1。如所示:


首先需要知道,決策邊緣方向和theta是垂直的,原因如下:

從上可以看到,左邊選取的是一個較差的決策邊緣,為了滿足p·||theta||取值的要求,需要讓||theta||值很大,但是這和代價函數是相悖的。右側選取的就是一個較好的決策邊緣,這個時候兩邊的margin都比較大,||theta||取值相對較小,按照代價函數來計算,SVM肯定能保證得到一個較大的margin.

4、kernels one(核[1])

對於一個非線性決策邊緣,我們可以採用多項式的函數來類比:

這裡我們讓f來代替x的高階形式,不難想到如果地區越複雜階數會越高f自然增多,是否還有其他更好的辦法呢?為此可以引入核的概念,我們把核定義為輸入的原始向量與標記點之間的相似性:


上面給出的相似性採用的是高斯分布的形式,這個核函數也被稱為高斯核函數,原始向量x與標記點l越接近,f值越接近於1,否則f值為0:


從也可以看到,當x取值為l時,位於最高點,f為1,隨著x遠離l,f趨近於0:


引入核函數後再考慮一個分類問題,比如下面我們要將紅色地區內的點預測為1,否則為0,我們首先訓練得到theta值和標記點l1,l2,l3,我們只需要計算f1,f2,f3,然後代入式子判斷其是否不小於0即可:

5、kernels two(核[2])

上面例子中我們並沒有說明theta和標記點l是如何計算出來的。這裡我們首先來說明標記點l的選取:


這裡我們先不考慮樣本是正樣本還是負樣本,選擇m個訓練資料,將其作為標記點l,


然後我們就能夠計算m個f值,注意每次肯定有一個點自己就是標記點,於是計算結果m維向量f中必有一個值為1。同時在增加一個f0=1後,每個點都對應於一個m+1維的特徵向量f。我們把得到的m+1維向量f代替原始向量x代入代價函數,求解代價函數最小值,這樣就能求出theta:


不過在求解theta之前,我們還需要確定C和核函數中σ的取值,前面已經提到了方差和偏差,這裡C和σ的取值其實影響的就是這兩個因素:

6、using an SVM(支援向量機的應用)

在使用SVM前需要明確是否要採用核函數的形式。如果不採用核函數,那該類SVM就稱為線性SVM,否則就是非線性SVM。明確了這一點,下面就是選擇C和核函數(線性不需要選擇)的問題。

一般用的最多的核函數就是高斯核函數,注意在使用核函數之前需要對輸入向量進行歸一化操作。當然我們也可以選擇其他的核函數,不過要注意並不是隨便一個拿過來都能讓SVM正確分類:

針對多分類問題,我們可以訓練多個SVM,採用之前提到過的one-vs-all方法:

最後來比較一下羅吉斯迴歸和SVM的區別:

翻譯如下:

用n表示特徵個數,m表示訓練樣本個數。

l 當n>=m,如n=10000,m=10~1000時,建議用logistic regression, 或者linear kernel的SVM,模型簡單即可解決

l 如果n小,m不大不小,如n=1~1000,m=10~10000,建議用Gaussian Kernel的SVM

l 如果n很小,m很大,如n=1~1000,m>50000,建議增加更多的feature並使用logistic regression, 或者linear kernel的SVM,如果還用Gaussian kernel會導致很慢,所以還選擇logistic regression或者linear kernel

神經網路可以解決以上任何問題,但是速度是一個很大的問題。

------------------------------------弱弱的分割線----------------------------------------

這一講只是對SVM進行了簡單的介紹,Andrew教授的引入SVM的方式比較獨特,先給出代價函數而不是margin的直觀表示。不過SVM的內容顯然不止這麼點,這裡連支援向量,SVM代價函數的對偶式都沒提到過,其實SVM的應用極其廣泛,而且效果很不錯,關於SVM更多的內容可以看這篇博文:

http://blog.csdn.net/v_july_v/article/details/7624837

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.