关于svm
名詞解釋:
(1) SVM(Support Vector Machine)是從瓦普尼克(Vapnik)的統計學習理論發展而來的,主要針對小樣本數據進行學習、分類和預測(有時也叫回歸)的一種方法,能解決神經網絡不能解決的過學習問題。作者以為,類似的根據樣本進行學習的方法還有基于案例的推理(Case-Based Reasoning),決策樹歸納算法C4.5等,以后將詳細闡述這兩種方法。
(2)過學習問題:訓練誤差過小導致推廣能力下降,即真實風險的增加。
(3)推廣能力:generalization ability,也可以說是泛化能力,就是對未知樣本進行預測時的精確度。
原文:A practical guide to support vector classification.
libsvm中的樣本預處理的原則有2個:
1 非數值屬性(Categorical Feature)
???? 由于SVM要求被處理的數據都是實數,因此對于屬性值為類別的屬性要進行轉換。例如{red, green, blue},可以轉換成3個屬性
red??? (1, 0, 0)
green? (0, 1, 0)
blue?? (0, 0, 1)
來表示。經驗表明當這樣的非數值屬性的取值不是太多(這個具體數字不明確)的時候,這種編碼比用一個數字來表示屬性的類別要穩定的多,比如用1, 2, 3來分別表示red, green, blue就不太合適了。目前,這個過程沒有實現自動處理,需要使用者根據屬性取值的多少自己動手去修改。
2 縮放(scaling)
??? 進行縮放的原因和使用神經網絡時的考慮是一樣的,由于RBF網絡中采用樣本數據的歐式距離來計算。主要優點就是避免數值范圍較大的屬性控制數值范圍較小的屬性。另一個優點就是避免計算時的numerical difficulties. 因為核值通常依賴特征向量的內積(inner product),而較大的屬性值可能導致numerical問題。因此推薦把每個屬性縮放到[-1, 1]或者[0, 1]之間,而且前一個范圍要比后一個好,即對列向量進行規范化,其詳細解釋和計算公式見http://www.faqs.org/faqs/ai-faq/neural-nets/part2/中的“Should I standardize the input variables (column vectors)?”。libsvm中沒有考慮屬性的類型(效益、成本、固定、偏離、區間、偏離區間 6 種不同的屬性類型的規范化計算公式是不一樣的,詳見:徐澤水,《不確定多屬性決策方法及應用》,清華大學出版社,2004。)而采用了統一的線性縮放,作者以為此處可以改進一下。
??? 需要注意的是,在進行測試之前,要對測試數據進行同樣的縮放操作。其實在libsvm中有程序(svmscale.exe)來進行縮放操作,也可以不用手工縮放,只要用easy.py來對(經過非數值的歸一化處理之后的)原始數據直接操作即可。
??? 上面這兩種方法基本上可以完成所有的樣本的預處理了。其實只有原則 1 是需要自己手工改動的,其他工作在libsvm中的tool文件夾下都由現成的python程序處理。
??
“推廣能力”是分類問題(classification,也稱為模式識別問題,在概率統計中則稱為判別分析問題)的一個指標。所謂推廣就是在求得決策函數f(x)后,對一個新的輸入x,按照y=f(x)推斷出x相應的輸出y。“推廣能力”就是描述推廣優劣的一種度量。
那么,決策函數f(x)是怎么回事?這要從分類問題的(數學語言描述的)定義說起,參見(鄧乃揚等人的《數據挖掘中的新方法——支持向量機》,科學出版社,2005)。通俗的講。就是一個表示x,y之間關系的函數,而x,y就是樣本中的一對數據。其中x代表輸入,y代表類別。分類問題就是找到這個決策函數f(x),而對于新的輸入x,能夠判斷其所屬類別y則是個預測(回歸)問題。
?
名詞解釋1——支持向量機:“機(machine,機器)”實際上是一個算法。在機器學習領域,常把一些算法看作是一個機器(又叫學習機器,或預測函數,或學習函數)。“支持向量”則是指訓練集中的某些訓練點的輸入 xi 。它是一種有監督(有導師)學習方法,即已知訓練點的類別,求訓練點和類別之間的對應關系,以便將訓練集按照類別分開,或者是預測新的訓練點所對應的類別。
?
名詞解釋2——符號函數:sgn(a) = 1, a >= 0;sgn(a) = -1, a < 0.
?
一般地,考慮 n 維空間上的分類問題,它包含 n 個指標和 l 個樣本點。記這 l 個樣本點的集合為 T = {(x1,y1),...,(xl,yl)},其中 xi 是輸入指標向量,或稱輸入,或稱模式,其分量稱為特征,或屬性,或輸入指標;yi?是輸出指標向量,或稱輸出,i = 1,...,l。 這 l 個樣本點組成的集合稱為訓練集,所以我們也稱樣本點位訓練點。
?
對于訓練集來說,有線性可分、近似線性可分和線性不可分等三種情況,這就是分類問題的三種類型。其實,無論是哪類問題,都有對應的分類機,這將在以下的內容中進行詳細闡述。那么,有人可能會問,什么叫線性可分?通俗地講,就是可以用一條或幾條直線把屬于不同類別的樣本點分開。實際上,求解分類問題,就是要求出這條或這幾條直線!那么,問題是:怎么求?這里先以二維兩類線性可分的分類問題為例,做個詳細的說明,然后再過渡到多類分類問題。
?
首先,回憶一下平面(二維)坐標系中某條直線的方程。還記得直線的一般方程
Ax + By +?C = 0 (公式一)
吧,我們引入向量的概念,則該方程可以寫成{x,y}與{A,B}的內積加上C等于0,即
{A,B}·{x,y} + C = 0
你還記得法向量和方向向量的概念嗎?其實{A,B}就是法向量,而{B,-A}就是方向向量了。那么我們可以把直線的一般方程簡化成為
w·x + b = 0 (公式二)
的形式(因為這個式子是大家最常用的嘛)。注意:(公式二)中的 x 和(公式一)中的 x 不同,前者一個二維向量,后者是一個實數。
?
對于兩類問題,如果將某一直線兩側的樣本點分為正類和負類,則用符號函數的方式推斷點 x 所對應的類別 y 的決策函數如下:
y? = f(x) = sgn((w·x) + b) (公式三)
根據符號函數的定義,很明顯 y 的取值要么是 1 ,要么是 -1,也就是說樣本點的類別只有 1 和 -1 兩類。此時的分類問題是:對于任意給定的一個新的模式 x ,根據訓練集推斷它所對應的輸出 y 是 1 還是 -1。這就是線性可分的分類問題,也是一個模式識別問題,我們要做的工作就是要求出 w 和 b 。
?
直接求這兩個參數基本上不太可能,除了訓練集我們又沒有別的信息可以利用,這可如何是好?前輩們給出了一個絕妙的方法——就是所求得的預測函數?f(x) 對原有樣本的分類錯誤率最小。那么,問題又出來了,這個錯誤率咋算?損失函數就是專門用來評價預測準確程度的一種度量,而且模式識別問題使用的正是“0-1損失函數”。根據我的上一篇學習體會——《從機器學習到支持向量機》http://axywestwind.bokee.com/viewdiary.14525093.html中的闡述,使(公式三)中的 f(x) 的預測誤差最小的問題轉化成期望誤差最小、經驗風險最小,最后在統計學習理論中又轉化為結構風險最小(Structural Risk Minimization, SRM)。而實現SRM的思路之一就是設計預測函數集的某種結構使每個子集中都能取得最小的經驗風險(如使訓練誤差為0),然后只需選擇適當的子集使置信范圍最小,則這個子集中使經驗風險最小的函數就是最優函數。SVM方法實際上就是這種思想的具體實現,它是對SRM的近似。說了半天,終于和上次的內容連接上了。但是,為了求解SRM這個最小化問題,還得將它轉化成數學形式。
?
SVM方法是從線性可分情況下的最優分類面提出的,它是實現統計學習理論思想的方法。什么是最優分類面呢?這要從最優分類線說起。所謂最優分類線就是要求分類線不但能將兩類無錯誤地分開,而且要使兩類的分類間隔最大。前者是保證經驗風險最小(如使訓練誤差為0),而使分類間隔最大實際上就是使推廣性的界中的置信范圍最小,從而使真實風險最小。推廣到高維空間,最優分類線就成為最優分類面。
?
那么如何構造這個最優分類面呢?方法有 2 個:平分最近點法和最大間隔法。有趣的是,這兩個方法殊途同歸,它們求解得到的是同一個超平面(由三個定理聯合起來證明了這個結論)。由這三個定理可知,這兩個方法與一個最優化問題求解方法等價,這個方法就稱為“線性可分支持向量分類機”。其實,這個分類機是將最大間隔法求解最優分類面的最優化問題轉化為其對偶問題,從而通過求解相對簡單的對偶問題來求解原分類問題的算法。隨后引入松弛變量和懲罰因子來解決非線性分類問題,并且允許一定的分類錯誤(軟間隔),最終得到非線性軟間隔的標準的 C-支持向量機(C-SVC)。其中的巧妙之處就在于把一個復雜的最優化問題的求解簡化為對原有樣本數據的內積運算。我們要做的就是選擇適當的核函數及其參數、懲罰因子就可以了。
?
概括地說,SVM就是首先通過用內積函數定義的非線性變換將輸入空間變換到一個高維空間,然后再在這個空間中求(廣義)最優分類面的分類方法。
?
svm處理流程:
???? svm主要做分類或者回歸的.以分類為例,一般情況下,數據不是線性可分的,因此如果要分類非線性數據,就必須將數據映射為線性可分的空間,但是這會伴隨著數據維數的增加,甚至會到無窮的情況.那這樣就沒法計算了.幸虧svm的特點決定了并不需要考慮數據的維數,它的相關計算只與兩個數據的內積有關,當數據映射到高維空間后,需要計算數據的內積,但是又不知道映射函數以及數據的具體維數時.核函數很好的解決了這個矛盾,它使計算高維空間的內積轉換為在原來空間數據點的核函數計算.可以這樣理解,核函數就是高維空間數據點的內積,但它的計算是原來空間計算的.這個特點是svm成功的基礎,也是svm的核心內容,相當的完美.要真正理解這個概念,需要一些泛函的知識,但是開始的時候你無須知道所有細節,什么mercer條件你都不要管.現在研究的核函數只有那么幾種,先用他們再說.
總結
- 上一篇: 2008年最受欢迎的资源TOP100
- 下一篇: 科研人员必须知道的SCI知识