SVM -支持向量機原理詳解與實踐之三
-
什么是核
什么是核,核其實就是一種特殊的函數,更確切的說是核技巧(Kernel trick),清楚的明白這一點很重要。
為什么說是核技巧呢?回顧到我們的對偶問題:
|
映射到特征空間后約束條件不變,則為:
|
在原始特征空間中主要是求,也就是
和
的內積(Inner Product)
,也稱數量積(Scalar Product)或是點積(Dot Product),映射到特征空間后就變成了求
,也就是
和
的映射到特征空間之后的內積,就如我前面所提到的在原始空間樣本線性不可分,但是映射到高維后可以得到一個線性可分的決策曲面,但是我們假如映射到的這個維度很高,甚至是無窮維怎么辦?映射到高維空間后計算量無疑很大,但是運用核后計算量將大大降低,這就是為什么我們說核為核技巧。
下面我們舉個例子可以更為直觀的看到在原始樣本空間映射到高維空間后運算量為什么會很大,而運用核函數或是核技巧后計算量會大大降低。
設向量A = [a1,a2,a3];B = [b1,b2,b3];
則向量A和B的內積表示為:
A·B=a1×b1+a2×b2+a3×b3;
而映射到了特征空間后的分別為:
= (a1*a1, a1*a2, a1*a3, a2*a1, a2*a2, a2*a3, a3*a1, a3*a2, a3*a3)
= (b1*b1, b1*b2, b1*b3, b2*b1, b2*b2, b2*b3, b3*b1, b3*b2, b3*b3)
假設實數向量:A = [1,2,3];B = [2,3,4];
= (1, 2, 3, 2, 4, 6, 3, 6, 9)
= (4, 6, 8, 6, 9, 12, 8, 12, 16)
= 4 + 12 + 24 + 12 + 36 + 72 + 24 + 72 + 144 = 400;
我們會發現三維的運算已經很繁瑣,如果更高維呢,運算量無疑大大增加,但是如果我們引入核函數:
再做計算
我們發現,但是
的計算要簡便得多。
下面我們給出核的定義:
假如原始的內積形式是,給定一個特征映射
,映射之后的內積形式則為
,所以我們將相應的核定義為:
以上的核函數我們稱為內積核,或者簡稱核。
-
核函數選擇
通過前面這個簡單的例子我們知道了核的用途,就是將特征空間龐大運算量問題(或者說無法計算的問題)通過核技巧轉化為低維空間可計算的問題。
我們前面的例子比較簡單,我們可以手工構造對應於映射的核函數出來,但如果對於任意一個映射,想要構造出對應的核函數出來那就困難了,或者換句話說幾乎不可能,所以概括的說解決現實的問題時我們會遇到以下兩個問題:
- 想要找到將具體樣本數據和分布映射到高維實現線性可分的映射函數
很難
- 計算出核函數
很難,或是幾乎不可能。
根據上面的例子我們看到運用核函數我們可以不用確切的知道
同樣可以得到和
一致的結果,所以
可以不用知道具體形式,現在就剩下一個問題: 這個核函數
怎么來的?或者說我們怎么才能找到合適的核函數。
要想確切的找到這樣的核函數也幾乎是不可能的。但是我們能不能用其它的函數來代替或者說是表示核函數呢,答案是肯定的。再看核函數的定義:
其實就是兩個特征映射函數的內積。它可以用多項式等函數表示。因為根據高等數學泰勒展開式我們可以知道,任何函數都可以用多項式的方式去趨近,一些基礎的函數如等等都可以去趨近,而不同的函數曲線其實就是這些基礎函數的組合。理解這一點很重要!
所以我們完全可以用一些基礎函數去無線趨近實際的核函數,例如多項式,還有高斯函數
, 也就是指數函數的擴展形式,這些都是基礎函數,所以這些函數都可以作為核函數。(相信很多人都曾疑惑為什么在絕大多數講解核函數文章或是書籍的時候都會跳到核函數的具體形式如多項式核、高斯核等,而卻為什么沒有講解這些函數為什么可以作為核函數)。
下面就是一些常用的核函數介紹:
回到本章的具體問題,我們應該如何選取這些核函數並應用到我們的學習器中呢?它有什么經驗可以遵循?本人自認經驗還很欠缺,不敢做深入分析,以下收集一些網上和論文的經驗:
- 線性核(Linear) 主要應用與線性可分的情形,參數少,速度塊,對於一般的數據可以嘗試首先運用線性核。 Linear和是
- RBF也就是徑向基函數,也叫高斯核,應用最為廣泛,主要應用線性不可分的情形,參數多,分類結果非常依賴於參數。通過交叉驗證來尋找合適的參數,通過大量的訓練可以達到比線性核更好的效果。
- 多項式核需要確定的參數要比RBF多,而參數多少直接影響了模型的復雜度。
- Sigmoid核,對於某些參數RBF和sigmoid具有相似的性能。
-
核函數判定與再生核希爾伯特空間(reproducing kernel Hilbert space, RKHS)
通過前面的介紹我們知道核函數的用途,也知道一些常用的核函數,當然不是任何基礎函數都可以做為核函數的,作為核函數還必須要滿足一些性質,這一章節要講解做為核函數所必須具有的一些性質。
如果K是有效的核函數,那么根據核的定義可知:
從上式可知,K矩陣必須是對稱的。並且讓表示
第k坐標的屬性值,對任意向量z有:
從上面的對到可以看出只要是K是個有效的核函數,由於z是任意的,所以核K是半正定的(K>=0)。
下面的Mercer定理很好的總結該性質:
如果函數K是上的映射(也就是從兩個n維向量映射到實數域)。那么如果K是一個有效的核函數,也稱為Mercer核函數,那么當且僅當對於訓練樣例
, 其相應的核函數矩陣是半正定的。
簡單的說就是只要一個對稱函數所對應的核矩陣半正定就可以作為核函數使用。對於一個半正定核矩陣,總能找到一個與之對應的映射,換言之,任何一個核函數都隱式地定義一個稱為"再生核希爾伯特空間"(reproducing kernel Hilbert space, RKHS)的特征空間。
-
再生核希爾伯特空間
我們知道希爾伯特空間就是完備的內積空間(如果對函數空間知識不是很了解,可以看看函數空間的相關知識,上海交大的公開課講的挺不錯,上海交通大學公開課:數學之旅——函數空間),詳細一點的說就是描述就是:
- 賦予范數的集合稱為賦范空間;
- 賦予距離的集合稱為度量空間。
賦范空間有向量的模長,也就是范數,但是兩個向量是有夾角的,范數沒有夾角的概念,所以為了表示這樣的兩個向量,引入內積的概念,所以有接着的第三個:
- 賦予內積的集合稱為內積空間
注意內積空間有幾個屬性,即對稱性(例如距離的d|x-y|=d|y-x|)和正定性等和前面討論的Mercer定理是一一對應的。
如果在內積空間加上完備性就構成了希爾伯特空間,完備性簡單點說就是極限運算中不能跑出度量的范圍。
在了解了希爾伯特空間后,我們看再生核希爾伯特空間的定義:
這里暫且不進行進一步的討論,主要是由於自己對再生核理解得還不夠透徹,希望能在下一篇文章中做進一步的闡述。
-
軟間隔和正則化
-
離群樣本點和損失函數分析
-
前面我們提到,當我們嘗試將原始空間上的線性不可分的問題轉化為高維空間的線性可分的問題,但是現實的情況非常復雜,即使在維度比較高的特征空間也很難找到合適的核函數使得訓練樣本線性可分。
我們看到左圖中間隔曲線將兩個類別分開,並且最小間隔比較大,右圖則是另一種情況,左上角出現一個樣本點,它更靠近正例(我們說它是離群點),這時候我們仍然要將它從正例中區別出來,並且將它正確的預測分類為負類,那么我們的間隔曲線就必須做一定的調整,也就是從原來的虛線轉變為實線,這樣才能有效的將新的樣本區別開來,這個例子說明我們前面介紹的模型對這些離群的點或者說是樣本的噪聲非常敏感。
這里要提到的軟間隔就是,就是支持向量機允許一些樣本出錯,即允許存在一些不滿足約束的離群的點,如下圖紅色高顯的點,就是一些不滿足約束的離群點。
即這些點不滿足約束:
優化目標寫為:
|
(3-10-1) |
上式中C是一個大於0的常數,是0/1損失函數,
由前面兩個式子可以看出,C取無窮大時,為了讓優化目標取得最小值,則取;意思就是后面的項歸0(otherwise),也就是
, 這也就是說,
- 當C取無窮大時,為了達到目標的最優化,所有樣本就必須滿足約束條件
而當C取有限值時,為了讓優化目標取得最小值,可以允許,即允許加上一個有限值C*1=C, 即
-
即當C去有限值的,允許有一些樣本不滿足約束,對應到上面的兩個圖,就是那些離群的樣本點。
-
替代損失(surrogate loss)簡介與松弛變量(Slack variables)
-
替代損失,顧名思義,就是替代前面介紹的為了優化有樣本離群這種情況的目標函數而引入的損失函數。那為什么需要替代函數呢?因為非凸,不好求極值,而我們的最小化問題就是一個求極值的問題,所以我們需要這么一個替代的函數來代替
,以下是三個比較常用的替代函數:
- hinge損失:
- 指數損失(exponential loss):
- 對率損失(logistic loss):
若采用hinge損失:則優化目標(3-10-1)可以有以下的轉化:
這就是常用的"軟間隔支持向量機",這和線性可分模式下分析時候的二次規划問題很類似,觀察(3-10-2)式,很顯然每個樣本都對應有一個松弛變量,我們可以看到首先松弛變量非負,約束條件同時也表明允許某些樣本點的函數間隔小於1或是函數間隔為負,讓我們再看下圖分析:
- 函數間隔小於1的樣本點在最大間隔區間里面,如下圖中的藍圈圈住的樣本。
- 函數間隔為負數的樣本點則在在相反的樣本分類里面,如下圖中的紅圈圈住的樣本。
通過上面的描述我們可以總結的重要特性,即:
表征了該樣本不滿足約束條件
的程度。
我們可以看到(3-10-2)式的約束條件相對於約束條件
,這個條件也是我們在線性可分模式下的時候必須服從的約束條件放寬了很多,而放寬了這些限制后我們就必須對目標函數進行調整。
再看(3-10-2)式中的,我們發現它有兩個特點:
表示離群點越多,目標函數就越大,這和我們最小化目標函數是相悖的。
- 表示的是離群點的權重,C越大表示離群點對目標函數的影響就越大。
- 目標函數控制着離群點的數目和程度,使得大部分樣本仍然服從限制條件。
-
拉格朗日求解軟間隔目標函數
為了求解軟間隔的優化目標函數(3-10-2),回想我們在求解最優間隔分類器對偶問題時的拉格朗日乘子法,通過目標函數和約束條件構造拉格朗日函數,
其中和
是拉格朗日乘子,然后根據以下步驟分別求導:
- 對偶問題則是先固定
,優化出最優的
,最后確定參數
。
固定拉格朗日乘子,對w求導得到:
|
(3.10.3-2) |
對b求導得到:
|
(3.10.3-3) |
對求導得到:
|
(3.10.3-4) |
將上面三個等式帶入目標函數(3-10-2)可得到(解法參考前面的詳細推導):
|
(3.10.3-5) |
|
|
對比上式和最優間隔分類器中對偶問題的求解結果可知,兩者之間只是約束不一樣,求解的結果中並不包括松弛變量,但是包括了參數C。
同樣參考拉格朗日對偶性中對KKT條件的描述:
我們的軟間隔支持向量機即(3-10-2)
|
-
軟間隔的KKT條件分析
緊接着求相應的軟間隔的KKT條件可得:
分析軟間隔的KKT條件,也如拉格朗日對偶性章節中分析的一樣,軟間隔的KKT條件仍滿足KKT的對偶互補條件即,也就是說對任意樣本
,總有
或是
,所以
- 若
,則很顯然該樣本不會對
產生任何影響
- 若
,則必然有
,即該樣本就是支持向量。
另外根據(3.10.3-4)即,分析以下幾種情況:
- 若
,則因為
,所以
, 則
,又根據
,進而有松弛變量
,這表明該樣本恰好在最大間隔的邊界上,如下圖紅圈點:
- 若
,則有
,又根據
的,這個時候
有以下兩種情況:
-
則樣本落在最大間隔內部,但是在超平面的正確一側,如下圖紅圈點:
-
則該樣本被錯誤分類,即落在超平面的錯誤一側,如下圖紅圈的樣本點
總結:上面通過對軟間隔的KKT條件分析,我們得出結論:軟間隔支持向量機的模型只與
支持向量有關。
-
過擬合(overfitting)與正則化(regularization)
過擬合就是說學習器把訓練樣本自身的一些特征當做所有潛在樣本都會具有的一般性質,導致泛化性能下降。與過擬合相對的是欠擬合,也就是說學習器連樣本的一般性質都沒有學習好,下圖中比較好的詮釋了過擬合和欠擬合的分類效果。
- X1為欠擬合的情況,也就是不能很好的區分類別。
- X2為分類剛剛好,就是即使有些樣本沒有分類出來,但是可以保證絕大部分情況下有效的分類,沒有將樣本特有的一些屬性添加到模型,在真實情況時候往往可以達到理想的效果。
- X3為過擬合,也就是說分類只適合訓練樣本,到了真實環境中的時候效果會不理想。
A: 欠擬合的情況可以通過在學習過程中擴展分支或是在神經網絡學習中增加訓練輪數來解決。
B: 過擬合的情況不可避免,只能是緩解,各種機器學習算法中都有一些針對過擬合的措施,正則化就是一個防止過擬合的有效手段。
正則化就是為模型添加調整參數的過程,目的是為了防止過擬合(overfitting), 增加平滑度。通常會以向現有的權向量(weight vector)添加常倍數的方式來完成,這個常數一般為L1(Lasso)或者L2(ridge), 但是實際上可以是任何形式的。
在修改后的模型中,從正則化訓練集得出的損失函數,平均值應當降至最低。
|
再看(3-10-2-1)式子中是hinge損失函數,如下圖可知hinge損失函數有一段"平坦"的零區域,這使得支持向量機的解具有稀疏性。
如果用其他的損失函數代替hinge損失做0/1損失函數,就可以得到其他的學習模型,它的一般形式為:
(3.10.5-1)上式就是正則化問題,其中:
稱為"結構風險"(structural risk), 也稱為正則化項,用於描述模型f的某些性質;
稱為"經驗風險"(empirical risk),用於描述模型與訓練數據的契合程度;
- C用於對前面兩個進行折中,稱為正則化常數。
常用的正則化項有: 范數是常用的正則化項,其中
范數
傾向於w的分量取值盡量的均衡,即非零分量個數盡量稠密。而
范數
和
范數
則傾向於w的分量盡量的稀疏,即非零分量個數盡量少。
-
支持向量回歸
-
核方法
-
支持向量機實踐
這里限於篇幅,實踐的內容將在下一篇展開…