Coursera 機器學習 第7章 Support Vector Machines 學習筆記


7 Support Vector Machines
7.1 Large Margin Classification
7.1.1 Optimization Objective
支持向量機(SVM)代價函數在數學上的定義。

復習一下S型邏輯函數:

那么如何由邏輯回歸代價函數得到支持向量機的代價函數(對於一個示例):

其實就是將邏輯回歸的代價函數中的log(1/(1+e^(-ΘTx)))和log(1-1/(1+e^(-ΘTx)))分別替換為cost1Tx)和cost0Tx)(cost0和cost1分別對應y=0和y=1時的目標函數定義。后面會知道,cost1Tx)應該是cost1(ΘTf),cost0Tx)應該是cost0Tf))。並對m和λ進行提取。

可以對比:

邏輯回歸的代價函數(優化目標):

SVM的代價函數和假設:

注意一下C的作用:C是控制對於誤分類訓練樣本懲罰程度的,為正值。

the C parameter is a positive value that controls the penalty for misclassified training examples.

可以看到邏輯回歸和SVM的假設的優化重點不同,邏輯回歸的假設優化重點在第一項,SVM的優化重點在第二項。

 

做道題:

 

答案:可以將1式提取mλ,則1式的優化結果與2式相同。

 

 

7.1.2 Large Margin Intuition
支持向量機被稱為大間距分類器的原因以及理解SVM的假設。
最小化SVM代價函數的必要條件。


來直觀理解支持向量機被稱為大間距分類器的原因。取代價函數中的C非常非常大的時候為例作為說明。

當C非常大的時候,J(Θ)將會得到能使第一個累加項([]中的內容)的和近似為0的優化解。當你最小化這個關於變量Θ的函數的時候,會得到如圖的黑色的決策邊界,這就是SVM的決策邊界。黑色邊界有着較大的間距(margin),努力用一個最大間距來分離樣本,這也是SVM被稱為大間距分類器的原因,這也是求解優化問題的結果。

如果C很小,就會得到這條黑線;如果C很大,黑線就會順時針轉動變為粉線。C的作用類似於1/λ,λ就是邏輯回歸正則化中使用過的λ。

 

 

7.1.3 Mathematics Behind Large Margin Classification
從數學角度,用向量內積來理解SVM的目標函數,解釋為什么支持向量機是一個大間距分類器。
關於向量內積的預備數學知識。

下圖中介紹二維向量u和二維向量v的內積情況,首先介紹兩向量夾角≤90的情況:

uv的內積是uTv=||u||·||v||·cosθ=u1v1+u2v2=||u||·p,這里p就是vu上的投影。過程就是v投影至u向量,記其標量長度為p(有正負,與u同向為正,反向為負)。

下面討論當C非常大的目標函數的情況下,SVM能有效產生大間距分類的原因。

SVM標准的代價函數:

C非常大時,SVM的代價函數可以簡化為以下形式:

前提簡化:

1.n=2(只有2個特征)。

2.Θ0=0,這使決策邊界通過原點。其實當Θ0≠0的時候,類似於下面的推導過程,還是可以得到SVM能有效產生大間距分類的原因。

 

那么C非常大時,代價函數進一步可以演變為以下的意義:代價函數就是求向量Θ的范數(長度)最小值。

對應的,對約束條件進行理解(結合上面關於內積的預備知識):

如果向量機選擇這條綠色的邊界,那么該決策邊界對應的向量Θ應該垂直邊界代表的直線(因為直線上的點與原點形成的向量與向量Θ的內積為0),向量Θ應該指向正例。這時,可以看到x(1)在向量Θ上的投影p(1)的標量長度非常小,對應的如果要滿足p(i)*||Θ||1,那么||Θ||就會很大。同樣也可以分析x(2)

相反的,如果是下面的綠色直線x1=0作為決策邊界,可以看到x(1)在向量Θ上的投影p(1)的標量長度較大,對應的如果要滿足p(i)*||Θ||1,那么||Θ||就可以較小。同樣也可以分析x(2)。在這里,x(1)x(2)在向量Θ上的投影p(1)p(2)之和的一半就是margin。

支持向量機最小化目標函數的目標是p(i)*||Θ||≥1的前提下,使得||Θ||盡可能的小,所以要選擇能使p盡可能大的決策邊界。支持向量機極大化這些p(i)的范數(訓練樣本到決策邊界的距離)。

 

做道題:

 

答案:在坐標系中,默認橫軸對應的是x1,縱軸對應的是x2。可以看到決策邊界取x1=0時,左側正例在向量上的投影Θ至少是2,右側負例在向量Θ上的投影也至少是-2。又要滿足約束函數||Θ||·p(i)=||Θ||·2≥1和||Θ||·p(i)=||Θ||·(-2)≤-1。min(p(i))=2,所以||Θ||≥1/2。所以是B。

下一節介紹如何利用支持向量機的原理,應用他們建立一個復雜的非線性分類器。

 

 

7.2 Kernels
7.2.1 Kernels I
討論核函數是什么以及如何用核函數(kernels)構建復雜的非線性分類器。
對於一個特定的二元分類問題,如果要構造下圖的決策邊界,一般需要高階項。如果用高階項做特征變量,運算量會非常大,而且也不知道這些高階項是不是我們所需要的,所以能不能選擇別的特征變量或者有沒有比這些高階項更好的特征變量,或者說是否有不同的選擇或者更好的選擇來構造特征變量,以嵌入到假設函數中。有的,就要用到核函數。

定義決策邊界對應的函數是Θ01f12f23f3,其中f1、f2和f3就是相似度函數。

下圖給定新的x點,計算該點與標記的3個標記點(landmark)l(1)、l(2)和l(3)之間的相似度f1、f2和f3相似度函數就是所謂的核函數。在這里,就是高斯核函數,實際還有許多不同的核函數。這個相似度函數也可以寫成K(x,l(i)),這里的x和l是向量。

 

關於特征變量f1,高斯核函數情況下,具體的公式如下(忽略x0,這里的相似度函數是計算x和l向量之間的各分量的距離):當新給的點x距離l較近時,就x和l(1)比較相似,顯然f1≈1;當新給的點x距離l較遠時,就x和l(1)不相似,顯然f1≈0。這樣確定l(1),新給的x就能對應地求出相似度f1、f2和f3。

 

下面來看一下高斯核函數是怎么樣子的,也就是特征變量f1計算的內容。

取特定的l(1)向量並且參數σ2=分別取1、0.5和3情況下的高斯核函數的3D曲面立體圖以及曲面的等值線圖。

1.3D曲面圖上的z軸(高度)對應的就是f1的取值情況,在這里不同σ2情況下,f1取值都為0-1之間,極大值為1,極小值為0,就是高度不變。

2.σ2越大,曲線越“胖”,核函數凸起的寬度變寬了,等值線圖也擴大了一些;從l(1)點向外移動,特征變量的值減小的速度變慢。

高斯核函數相當於衡量示例之間距離的相似函數,其中σ決定了特征變量(相似性度量)減少的速度快慢。

 

講完特征變量的概念以后,來看一下特定Θ0、Θ1、Θ2、Θ3下,能得到什么樣的預測函數。Θ0=-0.5,Θ1=1,Θ2=1,Θ3=0時,預測兩個點離l(1)、l(2)和l(3)不同的距離來預測y值是1還是0。前提:如果Θ01f12f23f3≥0,就預測為1。

1.距離l(1)較近的點,那么f1≈1,f2≈0,f3≈0,所以Θ01f12f23f3=1≥0。

2.距離l(1)、l(2)和l(3)都較遠的點,那么f1≈0,f2≈0,f3≈0,所以Θ01f12f23f3=-0.5<0。

對大量的點進行相應的處理,特定Θ0、Θ1、Θ2、Θ3下(這里Θ0=-0.5,Θ1=1,Θ2=1,Θ3=0),距離l(1)、l(2)近的點的的預測值是1;距離l(1)、l(2)較遠的點的預測值y是0。那么自然就會得到如圖的決策邊界(紅線里面預測y=1,外面預測y=0)。這就是如何使用標記點和核函數來訓練非常復雜的非線性判別邊界的方法。


以上就是核函數的定義和以及我們如何在支持向量機中使用它們定義新的特征變量。我們通過標記點(landmark)和核函數(kernels)來定義新的特征變量,從而訓練復雜的非線性分類器。
下面將會講,我們如何得到這些標記點(landmark)以及其他的相似度函數是什么樣的,如果有的話,是否能夠代替上面用的高斯核函數。下節課將會來看看支持向量機如何通過核函數的定義,有效地學習復雜的非線性函數。

 

7.2.2 Kernels II
補充上一節缺失的一些細節以及支持向量機中的偏差-方差折中問題。
如何得到l(1)、l(2)、l(3)等標記點(landmark):選取所有訓練樣本為標記點。這說明特征向量是在描述新樣本距離每一個測試樣本的距離。

具體而言:給定m個訓練樣本,將這m個訓練樣本的位置作為landmark。然后輸入x,x可以屬於訓練集、測試集合交叉驗證集。我們計算特征值f1,f2,f3...最終得到由這些特征值得到的特征向量f。對於訓練集中的數據,描述訓練樣本的特征向量。在這m個訓練數據中,每一個訓練數據x(i)所得的特征向量(核函數)f中,總有一維向量的值為1(因為這里x(i)=l(i)

 

已知Θ向量,如何對樣本做出預測:給定x,計算特征向量f,只要當ΘTf>=0時就預測y=1,;否則,就預測y=0。其中的參數向量Θ是m+1維的(f0=1),這里有m+1個特征,額外的1是因為截距的原因。許多SVM軟件包自動設置x0=1,自動設置截距Θ0。因此,實現SVM時,不用想邏輯回歸那樣添加x0=1這樣的向量。

 

如何得到Θ變量。SVM中的代價函數:


具體而言就是求出能使代價函數取最小值的參數Θ。正則化項是n項的累加,這里n=m,因為特征變量的個數=訓練集樣本數。

實際使用SVM時,為了提高了計算效率,更適應大數據,對於代價函數的最后一項的細微改變使得最終的優化目標與上式直接最小化||Θ||2略有區別。將SVM的相關技術如果用於其他的機器學習算法,將會是不合適的(比如將核函數用於邏輯回歸,這樣的話,運行將會非常慢)。由於具體化技術,對某些細節的修改以及支持向量軟件的實現細節,支持向量機可以與核函數搭配得很好。成熟的軟件包中已經包含了SVM中的數值優化技巧,建議使用相關的軟件包。

 

下面討論SVM中的偏差-方差折中問題。涉及2個參數:代價函數中的參數C和核函數中(這里是高斯核函數)的σ2
1.支持向量機中的參數C選擇。C的作用和λ的作用相似(λ就是邏輯回歸中的正則化參數):C較大,等價於λ較小,低偏差,高方差;C較小,等價於λ較大,高偏差,低方差。

2.選擇高斯核函數中的σ2。假設只有一個特征量x:σ2越大,特征變量fi越平滑,相似函數隨x的變化更平緩,從而帶來高偏差和低方差。σ2越小,特征變量fi越陡峭,相似函數隨x的變化更劇烈,從而帶來低偏差和高方差。

做道題:

答案:

 

 

7.3 SVMs in Practice
7.3.1 Using An SVM
為了運行SVM,實際上需要做什么。
1.強烈建議使用一個高度優化的軟件庫,而不是嘗試自己去實現。好的軟件庫,比如liblinear,linsvm等等。
2.選擇參數C的值。
3.選擇核函數(相似函數)。以下是兩種最常見的核函數:
1)可以不用核函數,這種做法也叫線性核函數,僅僅使用ΘTx,可以理解為這種情況只是給你一個標准的線性分類器。什么情況下決定不用核函數(使用線性核函數):特征變量有n個,訓練樣本m個,n>>m。
2)使用高斯核函數。注意theta平方的選擇。什么時候選擇高斯核函數:特征變量有n個,訓練樣本有m個,m中等大於n。

如果選擇高斯核函數,那么要實現函數來計算核函數的特定特征。注意,如果特征變量取值范圍很不一樣,在使用高斯核函數之前,對它們進行歸一化是很重要的。

 

注意不是所有能夠提出來的相似度函數都是有效的核函數。高斯核函數,線性核函數等其他人們在用的核函數都滿足默塞爾定理(Mercer’s Theorem)。這條定理的作用就是確保所有的SVM軟件包能夠使用大量的優化方法,並能快速地獲得參數Θ。

不常用的核函數如下:
1.多項式核函數。k(x,l)=(xTl+b)^n(b為常數,n為指數),x和l很接近的時候,k(x,l)會很大。這個核函數有2個參數:b和n。效果要比高斯核函數差一些。用在x和l都是嚴格非負數的時候,保證兩者的內積非負。
2.字符串核函數。用於字符串相關,比如文本分類。
3.卡方核函數。
4.直方圖交叉核函數。


最后的細節。
1.多類分類問題。許多SVM軟件包已經內置用於多類分類的函數,可以直接使用;也可以使用邏輯回歸中提及的一對多的方法進行分類(k個類別,k個參數theta)。
2.什么時候用邏輯回歸,什么時候用SVM。
1)n相對於m比較大。使用邏輯回歸或者線性核函數SVM
2)n較小,m是中等規模(不會過分的大,但要比n合適的大)。這時候高斯核函數的運行效果就會比較好。
3)n較小,m非常大。創造更多的特征量,使用邏輯回歸或者不帶核函數的SVM。
其實,邏輯回歸或者不帶核函數的SVM是相似的。可以用邏輯回歸的地方就可以用不帶核函數的SVM,反之亦然。
3.神經網絡什么時候使用:對於上面的3種情況,神經網路都可能可以很好地解決,但是神經網絡的運行很慢。

實際上,SVM是一個凸優化問題,有全局最小值。有時候,選擇模型確實重要,但更重要的是數據是否充足,是否熟練,是否擅長做誤差分析和調試學習算法,如何設計新的特征變量等等。

 

做道題:

 

答案:

 

習題:

 

 

BC

 

 

CD

 

 

AD


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM