吳恩達機器學習筆記(十二)-支援向量機
第十三章 支援向量機(SVM)
優化目標
支援向量機在學習複雜的非線性方程時能夠提供一種更為清晰個更加強大的方式。
先回顧一下邏輯迴歸的相關概念,看如何進行改動可以得到支援向量機。邏輯迴歸的假設函式為,對應的影象如下:
如果有樣本y=1,希望能儘可能接近1,意味著遠大於0;
如果有樣本y=0,希望能儘可能接近0,意味著遠小於0。
邏輯迴歸中的代價函式為:
針對某一項的cost為:
可以看到下圖中SVM中對代價函式的改變:
這裡的log函式部分改變成了紅色線所代表的cost函式。
相應的代價函式變成了:
於是得到支援向量機的總體優化目標,最小化下面的函式,就得到了SVM學習得到的引數,在
與邏輯迴歸不同的是,支援向量機並不會輸出概率,相對的得到的是通過這個優化這個代價函式得到一個引數θ,支援向量機所做的是他直接進行一個預測,預測y是等於1還是等於0。
學習得到引數值θ後,這就是支援向量機的假設函式的形式。
直觀上對大間距的理解
有時候會把支援向量機叫做大間距分類器,本節中將會介紹這是什麼意思,並給出直觀的影象便於理解SVM假設。
和邏輯迴歸相比較,在支援向量機中:
如果有樣本y=1,希望大於等於1,而不僅僅是大於等於0;
如果有樣本y=0,希望小於等於-1,而不僅僅是小於等於0。
當C非常大時,我們希望跟在後面的累加部門為0,這樣即可以得到
歸結起來這是一個條件極值問題。
對於下面的這個例子,有不止一條直線可以把正負樣本劃分開,但是相比來說,黑色的分界線要好很多,它是更穩健的決策邊界。
從數學來說,這條黑色的決策邊界擁有更大的距離,叫做邊距,這個邊距也叫做支援向量機的間距,這會使支援向量機具有魯棒性。因此,支援向量機有時被稱為大間距分類器。
從這張圖中能夠更直觀的觀察出支援向量機戶選擇什麼樣的模型。
對於下面大間距分類器,它是在常數C被設的非常大的情況下得出的:
當有圖中的異常點出現的時候,在常數C比較大的情況下,決策邊界會從黑線變成紅線,但如果常數C比較小,最後得到的還是黑線。
所以,在本節的學習中,通過這些影象可以更直觀地理解支援向量機是如何作為大間距分類器工作的。
大間距分類器的數學原理
這一節將從數學的角度來看一下SVM。
下面是上一節中給出的支援向量機模型中的優化目標函式,。
通過簡化問題,我們知道要求的最小值就是||θ||的最小值,即θ的範數最小值,通過兩個向量相乘的幾何含義如下:
通過上述計算可知,如果要求得||θ||的最小值,則要儘量的大。
左邊的圖中:因為這裡的很小,要使,只能夠讓||θ||很大;同樣,這裡的也很小,要使,只能夠讓||θ||很大,所以這不能夠求||θ||的最小值。
右邊的圖中:因為這裡的很大,要使,就可以讓||θ||變得小了;同樣,這裡的也很大,要使,也可以讓||θ||變得小了。
因此,通過選擇的是右邊圖中的決策邊界而不是左邊的那個,支援向量機可以使引數θ的範數變小很多,意味著也變小很多,就可以達到最小化的目標。()
這就是支援向量機產生大間距的分類現象,這樣我們就從直觀上感受了SVM作為大間距分類器的效果。
核函式
這一節中將改造支援向量機來構造複雜的非線性分類器,下面將介紹核函式是什麼以及如何使用它。
之前的課程中有講解用多項式解決非線性擬合問題:
在這裡我們通過引入核函式來解決這個問題。
假設函式:
手動的取3個點,把這些點叫做標記:
給定x,根據與標記的距離計算新的特徵:
上述公式中的相似度函式(similarity)用數學術語來說就是一個核函式 ,這裡的核函式實際上是高斯核函式,即exp。
是高斯核函式的引數,通過下面的圖我們可以看出對函式圖形的改變。
以上講述的內容能夠幫助很好的理解核函式以及如何使用它在支援向量機中定義新的特徵變數。
下面將介紹如何在實際應用中應用核函式的思想,例如:如何處理支援向量機中的偏差方差的平衡。
上面介紹了選擇標記點的過程,使我們能夠定義相似度函式,也就是核函式,那麼關於標記點,在實際問題中,我們應該怎麼選取呢?
給定m個訓練樣本,將選取與m個樣本完全一樣的位置作為標記點。
這樣,對於每一個訓練集中的資料,我們都有一個m+1維向量與之對應。
那麼,上圖中的向量就用於描述訓練樣本的特徵向量。所以在給定核函式和相似度函式後,這就是我們如何使用簡單的支援向量機。
給定x的值,並對樣本x做出預測,先要計算特徵向量f,f是m+1維特徵向量,這裡之所以有m是因為有m個訓練樣本,於是就有m個標記點。
大於等0時,預測y=1,,所以引數向量為m+1維,以上就是當已知引數時,怎麼做出預測的過程。
是否可以將核函式這個想法應用到其他演算法上,比如邏輯迴歸。事實證明,如果願意,的確可以將核函式這個想法用於定義特徵向量,將標記點之類的技術用於邏輯迴歸演算法,但是用於支援向量機的計算技巧,卻不能較好的推廣到其他演算法諸如邏輯迴歸中,所以,將核函式用於邏輯迴歸時,將變得非常的慢,相比之下,支援向量機和核函式可以相得益彰。
另一個值得注意的問題是,當使用支援向量機時,怎麼選擇支援向量機中的引數?
首先選擇的是優化目標中的引數C,C的作用和邏輯迴歸演算法中的λ相似:
如果使用較大的引數C,則對應著邏輯迴歸中較小的λ時的情況,意味著不使用正則化,就有可能得到一個低偏差但高方差的模型,更傾向於過擬合;
如果使用較小的引數C,則對應著邏輯迴歸中較大的λ時的情況,意味著不使用正則化,就有可能得到一個高偏差但低方差的模型,更傾向於欠擬合。
另一個要選擇的引數是高斯核函式中的:
當偏大時,那麼對應的相似度函式傾向於變得相對平滑,就有可能得到一個高偏差但低方差的模型;
當偏小時,那麼對應的相似度函式傾向於變得相對集中,就有可能得到一個低偏差但高方差的模型;
這就是利用核函式的支援向量機演算法。
使用SVM
使用SVM的步驟:
一般使用SVM的軟體包(例如:liblinear,libsvm…)來解決引數問題。
需要做的事情:
▷ 首先提出引數C的選擇
▷ 需要選擇核心引數或要使用的相似函式:
如果選擇了高斯核函式,接下來要根據使用的支援向量機軟體包,實現一個核函式或相似函式。
一個實現函式的注意事項:如果有大小很不一樣的特徵向量,很重要的事就是在使用高斯函式之前將這些特徵變數的大小按比例歸一化。
不是所有可能提出來的相似函式都是有效的核函式,高斯核函式和線性核函式以及有時可能會用到的核函式,這些函式都需要滿足一個技術條件,叫作默塞爾定理。
需要滿足這個條件的原因是因為支援向量機演算法或SVM的實現函式有許多熟練的數值優化技巧,為了有效的求解引數θ,在最初的設想裡,這些決策都用以將注意力僅僅限制在可以滿足默塞爾定理的核函式上,這個定理所做的是確保所有的SVM包、所有的SVM軟體包能夠使用大類的優化方法並從而迅速得到引數θ。
多類別分類中的討論:
輸出在多個類別間恰當的判定邊界
許多SVM的包已經內建了多分類的函式,因此,如果使用一個類似這樣的模式,只是使用這些內建函式,但是會取得不錯的效果。
除此之外,一個多分類的方法是使用one-vs-all的方法,要做的是訓練K個SVM,如果有K個類別,用以將每個類別從其他類中區分開來,這會給你K引數的向量,這會嘗試從其他所有類別中識別出y=1的類別。
邏輯迴歸VS支援向量機:
n代表特徵的數量時,m是訓練樣本的數量時,應該如何選擇兩者中的一個呢?
▷ 當特徵數量n很大,訓練樣本個數m不大時。比如,一個文字分類問題,特徵矩陣的維度可能非常大,並且訓練集的個數不大,這時候通常使用邏輯迴歸或不帶核函式的SVM,使用線性核函式。(n=10000,m=10~1000)
▷ 當特徵數量n比較少,並且訓練樣本m大小適中,這時候使用帶高斯核函式的SVM。(n=1~1000,m=10~10000)
▷ 當特徵數量n很小,訓練樣本個數m很大時,這時會嘗試手動的建立更多的特徵變數,然後使用邏輯迴歸或不帶核函式的SVM。(n=1~1000,m=50000+)
▷ 對所有不同的問題、不同的設計,設計良好的神經網路可能會非常有效,但是神經網路訓練起來可能會比較慢。
SVM仍然被認為是非常強大的機器學習演算法之一,這是一個體系,包含了什麼時候一個有效的方法去學習複雜的非線性函式,因此,實際上,與邏輯迴歸、神經網路、SVM一起使用這些方法來提高學習演算法,有能力可能構造更加強大的機器學習系統和強大的演算法工具。