機器學習(二)—支持向量機SVM

一、SVM的原理是什麼?算法

  SVM是一種二類分類模型。它的基本模型是在特徵空間中尋找間隔最大化的分離超平面的線性分類器。(間隔最大是它有別於感知機) 
試圖尋找一個超平面來對樣本分割,把樣本中的正例和反例用超平面分開,並儘量的使正例和反例之間的間隔最大。緩存

  支持向量機的基本思想能夠歸納爲,首先經過非線性變換將輸入空間變換到一個高維的空間,而後在這個新的空間求最優分類面即最大間隔分類面,而這種非線性變換是經過定義適當的內積核函數來實現的。SVM其實是根據統計學習理論依照結構風險最小化的原則提出的,要求實現兩個目的:dom

  1)兩類問題可以分開(經驗風險最小)函數

  2)margin最大化(風險上界最小)既是在保證風險最小的子集中選擇經驗風險最小的函數。性能

分爲3類支持向量機: 
  (1)當訓練樣本線性可分時,經過硬間隔最大化,學習一個線性分類器,即線性可分支持向量機;學習

  (2)當訓練數據近似線性可分時,引入鬆弛變量,經過軟間隔最大化,學習一個線性分類器,即線性支持向量機;測試

  (3)當訓練數據線性不可分時,經過使用核技巧及軟間隔最大化,學習非線性支持向量機。優化

  注:以上各SVM的數學推導應該熟悉:硬間隔最大化(幾何間隔)—學習的對偶問題—軟間隔最大化(引入鬆弛變量)—非線性支持向量機(核技巧)。spa

二、SVM的主要特色3d

  (1)非線性映射-理論基礎 (2)最大化分類邊界-方法核心 (3)支持向量-計算結果 (4)小樣本學習方法

  (5)最終的決策函數只有少許支持向量決定,避免了「維數災難」

  (6)少數支持向量決定最終結果—->可「剔除」大量冗餘樣本+算法簡單+具備魯棒性(體如今3個方面)

  (7)學習問題可表示爲凸優化問題—->全局最小值

  (8)可自動經過最大化邊界控制模型,但須要用戶指定核函數類型和引入鬆弛變量

  (9)適合於小樣本,優秀泛化能力(由於結構風險最小) (10)泛化錯誤率低,分類速度快,結果易解釋。

  缺點:(1)大規模訓練樣本(m階矩陣計算) (2)傳統的不適合多分類 (3)對缺失數據、參數、核函數敏感

  爲何SVM對缺失數據敏感?

  這裏說的缺失數據是指缺失某些特徵數據,向量數據不完整。SVM沒有處理缺失值的策略(決策樹有)。而SVM但願樣本在特徵空間中線性可分,因此特徵空間的好壞對SVM的性能很重要。缺失特徵數據將影響訓練結果的好壞。

三、SVM爲何採用間隔最大化?

  當訓練數據線性可分時,存在無窮個分離超平面能夠將兩類數據正確分開。感知機利用誤分類最小策略,求得分離超平面,不過此時的解有無窮多個。

  線性可分支持向量機利用間隔最大化求得最優分離超平面,這時,解是惟一的。另外一方面,此時的分隔超平面所產生的分類結果是最魯棒的,對未知實例的泛化能力最強。

  而後應該藉此闡述,幾何間隔,函數間隔,及從函數間隔—>求解最小化1/2 ||w||^2 時的w和b。即線性可分支持向量機學習算法—最大間隔法的由來。

  svm中最大化的什麼,最小化的什麼?

  在各類對SVM的講解中,有一個知識點都講得不夠透徹:SVM的目標函數是最大化支持向量的幾何間隔,但怎麼最後就變成了最小化法向量(斜率)了呢?        

  能夠想像一下,一個超平面,斜率和截距以相同的倍數增大,這個超平面是不變的。也就是說,一個固定的超平面的參數倒是不固定的。在咱們求最優超平面時,解空間也就變成了無窮大。咱們固然能夠經過預先給這些參數設定一些約束來縮小解空間。那麼,這個約束就是:令支持向量的函數間隔=1。       

   這個約束的優勢有兩方面: 在超平面都未肯定的狀況下,固然誰也不知道支持向量是哪些向量,支持向量的幾何間隔也只有一個形式化表達,更別談「最大化支持向量的幾何間隔」該如何具體表達出來了。但有了以上約束,「支持向量的幾何間隔」的表達中,誰是支持向量已經不重要了,惟一和樣本相關的部分,也就是函數間隔,已變爲了1. 其它樣本的函數間隔要大於支持向量的函數間隔,這是惟一要知足的約束。此時,這個問題的解空間已經不是無窮大了,有了有意義的解空間。

   支持向量迴歸       本質上跟SVM沒什麼關係,名字較易讓人困惑。但libSVM裏都加入了這個功能,不得不說一下。實際上是求解一個線性迴歸問題,但因爲對斜率增長了最小范數要求,最優化問題形式上和SVM很像,最後求出的線性函數表達式也跟SVM很像,出現了美妙的與支持向量的內積形式。

四、爲何要將求解SVM的原始問題轉換爲其對偶問題?

  1、是對偶問題每每更易求解(當咱們尋找約束存在時的最優勢的時候,約束的存在雖然減少了須要搜尋的範圍,可是卻使問題變得更加複雜。爲了使問題變得易於處理,咱們的方法是把目標函數和約束所有融入一個新的函數,即拉格朗日函數,再經過這個函數來尋找最優勢。) 
  Note:拉格朗日對偶沒有改變最優解,但改變了算法複雜度:原問題—樣本維度;對偶問題–樣本數量。因此 線性分類—>樣本維度<樣本數量:原問題求解(liblinear默認); 非線性–升維—>通常致使 樣本維度>樣本數量:對偶問題求解。

  2、天然引入核函數,進而推廣到非線性分類問題。

五、解釋支持向量

  線性可分狀況下的定義+線性不可分狀況下的定義 。(統計學習方法) 
  (1)線性可分SVM對SV的幾種等價定義 (2)線性SVM對SV的幾種等價定義 (3)比較線性可分SVM的SV的定義和線性SVM對於SV定義之間的區別與聯繫

  爲何SVM要引入核函數?

  當樣本在原始空間線性不可分時,可將樣本從原始空間映射到一個更高維的特徵空間,使得樣本在這個特徵空間內線性可分。

  引入映射後的對偶問題: 

  在學習預測中,只定義核函數K(x,y),而不是顯式的定義映射函數ϕ。由於特徵空間維數可能很高,甚至多是無窮維,所以直接計算ϕ(x)·ϕ(y)是比較困難的。相反,直接計算K(x,y)比較容易(即直接在原來的低維空間中進行計算,而不須要顯式地寫出映射後的結果)。

  核函數的定義:K(x,y)=<ϕ(x),ϕ(y)>,即在特徵空間的內積等於它們在原始樣本空間中經過核函數K計算的結果。

  除了 SVM 以外,任何將計算表示爲數據點的內積的方法,均可以使用核方法進行非線性擴展。

六、svm RBF核函數的具體公式?(高斯核函數,也叫作徑向基函數(Radial Basis Function 簡稱RBF)。它可以把原始特徵映射到無窮維)

 

  RBF核的優勢 : 
  大小高低都適用。具體來講(1)無窮維,線性核是其特例 (2)與多項式~比,RBF需肯定的參數少 (3)某些參數下,與sigmoid~有類似的功能。

Gauss徑向基函數則是局部性強的核函數,其外推能力隨着參數σ的增大而減弱。

這個核會將原始空間映射爲無窮維空間。不過,若是 σ 選得很大的話,高次特徵上的權重實際上衰減得很是快,因此實際上(數值上近似一下)至關於一個低維的子空間;反過來,若是 σ 選得很小,則能夠將任意的數據映射爲線性可分——固然,這並不必定是好事,由於隨之而來的多是很是嚴重的過擬合問題。不過,總的來講,經過調控參數σ ,高斯覈實際上具備至關高的靈活性,也是使用最普遍的核函數之一。

七、SVM如何處理多分類問題?

  通常有兩種作法:一種是直接法,直接在目標函數上修改,將多個分類面的參數求解合併到一個最優化問題裏面。看似簡單可是計算量卻很是的大。

  另一種作法是間接法:對訓練器進行組合。其中比較典型的有一對一,和一對多。

  一對多,就是對每一個類都訓練出一個分類器,由svm是二分類,因此將此二分類器的兩類設定爲目標類爲一類,其他類爲另一類。這樣針對k個類能夠訓練出k個分類器,當有一個新的樣原本的時候,用這k個分類器來測試,那個分類器的機率高,那麼這個樣本就屬於哪一類。這種方法效果不太好,bias比較高。

  svm一對一法(one-vs-one),針對任意兩個類訓練出一個分類器,若是有k類,一共訓練出C(2,k) 個分類器,這樣當有一個新的樣本要來的時候,用這C(2,k) 個分類器來測試,每當被斷定屬於某一類的時候,該類就加一,最後票數最多的類別被認定爲該樣本的類。 

八、SVM與LR的區別與聯繫

  聯繫:(1)分類(二分類) (2)可加入正則化項 
  區別:(1)LR–參數模型;SVM–非參數模型?(2)目標函數:LR—logistical loss;SVM–hinge loss (3)SVM–support vectors;LR–減小較遠點的權重 (4)LR–模型簡單,好理解,精度低,可能局部最優;SVM–理解、優化複雜,精度高,全局最優,轉化爲對偶問題—>簡化模型和計算 (5)LR能夠作的SVM能夠作(線性可分),SVM能作的LR不必定能作(線性不可分)

  核函數選取與feature、樣本之間的關係 :
(1)fea大≈樣本數量:LR or 線性核 (2)fea小,樣本數量不大也不小:高斯核 (3)fea大,樣本數量多:手工添加特徵後轉

  Kernel函數其實是輸入數據的類似性度量,輸入向量組成一個類似度矩陣K(Gram Matrix/Similarity/Kernel Matrix),K是對稱半正定的。

K(x,z)是正定核的充要條件是:K(x,z)對應的Gram矩陣實半正定矩陣。 
Gram矩陣:矩陣對應點的內積。KTK, KKT 
半正定矩陣:設A是實對稱矩陣。若是對任意的實非零列矩陣X有XTAX≥0,就稱A爲半正定矩陣。 
當檢驗一個K是否爲正定核函數,要對任意有限輸入集{xi…}驗證K對應的Gram矩陣實是否爲半正定矩陣。

 

九、SVM是用的是哪一個庫?Sklearn/libsvm中的SVM都有什麼參數能夠調節?

  用的是sklearn實現的。採用sklearn.svm.SVC設置的參數。自己這個函數也是基於libsvm實現的(PS: libsvm中的二次規劃問題的解決算法是SMO)。

  SVC函數的訓練時間是隨訓練樣本平方級增加,因此不適合超過10000的樣本。

  對於多分類問題,SVC採用的是one-vs-one投票機制,須要兩兩類別創建分類器,訓練時間可能比較長。

sklearn.svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto’, coef0=0.0, shrinking=True, probability=False,tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=None,random_state=None)

參數:

  l C:C-SVC的懲罰參數C?默認值是1.0

  C越大,至關於懲罰鬆弛變量,但願鬆弛變量接近0,即對誤分類的懲罰增大,趨向於對訓練集全分對的狀況,這樣對訓練集測試時準確率很高,但泛化能力弱。C值小,對誤分類的懲罰減少,容許容錯,將他們當成噪聲點,泛化能力較強。

  l kernel :核函數,默認是rbf,能夠是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’

  0 – 線性:u’v

   1 – 多項式:(gamma*u’*v + coef0)^degree

  2 – RBF函數:exp(-gamma|u-v|^2)

  3 –sigmoid:tanh(gamma*u’*v + coef0) 

  首先介紹下與核函數相對應的參數: 
  1)對於線性核函數,沒有專門須要設置的參數 
  2)對於多項式核函數,有三個參數。-d用來設置多項式核函數的最高此項次數,也就是公式中的d,默認值是3。-g用來設置核函數中的gamma參數設置,也就是公式中的第一個r(gamma),默認值是1/k(k是類別數)。-r用來設置核函數中的coef0,也就是公式中的第二個r,默認值是0。 
  3)對於RBF核函數,有一個參數。-g用來設置核函數中的gamma參數設置,也就是公式中的第一個r(gamma),默認值是1/k(k是類別數)。 
  4)對於sigmoid核函數,有兩個參數。-g用來設置核函數中的gamma參數設置,也就是公式中的第一個r(gamma),默認值是1/k(k是類別數)。-r用來設置核函數中的coef0,也就是公式中的第二個r,默認值是0。

l degree :多項式poly函數的維度,默認是3,選擇其餘核函數時會被忽略。

l gamma : ‘rbf’,‘poly’ 和‘sigmoid’的核函數參數。默認是’auto’,則會選擇1/n_features

l coef0 :核函數的常數項。對於‘poly’和 ‘sigmoid’有用。

l probability :是否採用機率估計?.默認爲False

l shrinking :是否採用shrinking heuristic方法,默認爲true

l tol :中止訓練的偏差值大小,默認爲1e-3

l cache_size :核函數cache緩存大小,默認爲200

l class_weight :類別的權重,字典形式傳遞。設置第幾類的參數C爲weight*C(C-SVC中的C)

l verbose :容許冗餘輸出?

l max_iter :最大迭代次數。-1爲無限制。

l decision_function_shape :‘ovo’, ‘ovr’ or None, default=None3

l random_state :數據洗牌時的種子值,int值

主要調節的參數有:C、kernel、degree、gamma、coef0。

 

十、SMO算法實現SVM

  基本思想:將大優化的問題分解成多個小優化問題,這些小問題每每比較容易求解,而且對他們進行順序求解的結果與他們做爲總體來求解的結果徹底一致。 
過程: 

  問題: 

相關文章
相關標籤/搜索