機器學習&數據挖掘筆記_9(一些svm基礎知識)


 

  前言:

  這次的內容是Ng關於machine learning關於svm部分的一些筆記。以前也學過一些svm理論,並且用過libsvm,不過這次一聽Ng的內容,確實收獲不少,隱約可以看到從logistic model到svm model的過程。

 

  基礎內容:

  使用linear模型進行分類時,可以將參數向量看成一個變量,如果代價函數用MSE表示,則代價函數的圖形類似拋物線(以新的變量為自變量);如果代價函數用交叉對數公式表示時,則其代價函數曲線如下:

   

  在Logistic回歸中其代價函數可以表示為如下:

   

  其中第一項是訓練樣本的誤差,第二項是權值系數的懲罰項,λ為權值懲罰系數,其中的m為訓練樣本的個數,我們的目標是找到合適的θ使代價函數值最小,很明顯這個優化過程和m無關。因此我們可以將m去掉,另外將權衡預測誤差和權值懲罰的變量λ放在第一項的前面,並將其改為C時,其代價函數就變成了svm的代價函數了,公式如下:

   

  其中的cost1和cost0函數表示當訓練樣本的標簽為1和0時對應的代價函數。

  svm分類器通常也叫做large margine分類器。它的目標不僅是找出訓練樣本的分界面,而且需要使得用該分界面分開的樣本距離最大,因為從直觀意義上來看,這樣的分類器泛化能力會更強,而前面的linear模型和logistic模型分類器就不具備這種能力。

  如果將svm中的代價函數中的C值取很大的話(成千上百),就可以讓訓練樣本的准確率非常高,甚至可以將第一項的誤差可以變為0,這時候的代價函數優化可以轉換為:

   

  但是C太大也不一定是好事,C太大的話可能會去嚴重的考慮每一個outliers,反而使得泛化能力變差,當然這些只是宏觀上的理解,要做到精確的調整還是離不開數學的。        

  Ng在介紹svm的數學理論時復習了一個數學基礎知識點:向量u和v的內積可以這樣計算:u’v=p*||v||,其中p為向量v在向量u上的投影,可以為正或負。

  當C很大時,此時目標函數變成了參數平方和的一半,我們要求這個目標函數值最小,且滿足參數與每個樣本之間的內積值要大(正樣本時,該值需滿足大於1,負樣本時則滿足小於-1),由上面的數學知識可以知道需保證每個樣本在參數θ上的投影距離要大,滿足上述要求的θ向量即我們所對應的分界面的法向量,對應的分界面為我們所求,這個也就是可以從幾何上給出svm分類器通常叫做large margine分類器的原因。

  下面來看kernel方法的引入,首先看一個非線性分類問題,如下圖所示:

   

  一般情況下我們會建立一個高維參數模型去擬合分界曲線,可以將圖中右邊模型公式中的x1,x2,x1x2,x1^2,x2^2等看做是原始樣本的特征(這里的特征不再是簡單的x1,x2了,而是它們乘積的各種組合等),參數θ仍然是我們需要學習的model參數。但是在svm理論框架中,我們需要用采用新的特征,將上面的x1,x2,x1x2,x1^2,x2^2…分別用f1,f2,f3…來表示,且新特征f的來源為:原始輸入特征x與某個l(小寫的L)的相似度,比如說:

   

  因此此時在訓練svm模型時,當標簽為1時,需滿足下面成立:

   

  現在的問題就差該怎么確定L了,即:

   

  在使用svm分類器時,一般的做法是將每個訓練樣本都當成一個l,而訓練樣本與每個l都可以計算一個f,因此假設有m個樣本,每個樣本x是n維的,則本來n維的特征x,現在變成了m維的新特征f了。因此此時svm的代價函數變成了:

    

  有很多svm的變種,其中一部分代價函數的表達式主要為后面權值的懲罰項稍有不同。

  使用svm庫時需要調整不少參數,以高斯核為例,此時至少需要考慮的參數有C和σ,其中C為訓練樣本誤差項的懲罰系數,該值太大時,會對訓練樣本擬合很好(bias小),但對測試樣本效果就較差(variance大),即屬於過擬合現象,反之亦然。σ為高斯函數的方差系數,該值過大時,學習到的新特征比較smoth,屬於欠擬合現象,反之亦然。

  在svm中不使用kernel的意思其實表示的是使用線性kernel,這一般適用於當輸入樣本的特征x維數n較大,而訓練樣本的個數m又較小的時候。而當n比較小,而m比較大時一般會采用非線性kernel,常見的有高斯kernel。

  當然還可以使用其它的kernel,但是需要滿足Mercer定理,不然的話在使用svm庫對其優化時其過程不會收斂。常見的核還有多項式核,表達式為(x’*θ+contant)^degree,它有2個參數需要選擇;String kernel(多用於文本處理),chi-sqare kernel,histogram interection kernel等。不過據Ng本人介紹,他自己一生中都是用高斯kernel,其它的kernel幾乎沒用過,因為不同的核在一般的分類問題中區別不大(特殊問題可能會有不同)。

  最后需要注意的是在使用svm時一定要將訓練樣本數據的進行歸一化。

 

 

 

 


免責聲明!

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



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