借實驗的機會加深了對SVM的認識,因而把此次實驗進行了總結,進一步鞏固這種認識。 算法
1、實驗題目 編程
實驗一:原空間求解線性分類面問題 機器學習
仔細閱讀svc.m程序,嘗試利用matlab的二次優化函數在原空間中求解線性分類面問題。並比較原空間問題的解和對偶空間問題的解的區別。 函數
實驗二:印章識別 工具
受銀行的委託: 學習
編制程序顯示印章圖像(24位真彩色位圖); 測試
讀出位圖中每一像素點的(R,G,B)樣本值; 優化
以RGB其中某兩個(或三個)爲座標,取必定數量的圖像點爲分析樣本,分析其座標系中的分佈; 編碼
採用本章將要學習的方法找到分類判別函數,對這些樣本進行分類;(要求首先將印章與底紋區分,將印章、底紋、簽字區分) spa
將分類後的結果標記到原始圖像上,檢查其效果。
2、實驗基礎知識總結
l 間隔(Margin)的概念
支持向量積(SVM)的理解須要從間隔的概念入手。所謂的間隔就是在追尋最優二維線性分類器時所用到的衡量線性分類面好壞的度量。對於分類好壞的衡量,一種合理方式就是比較不一樣分類的可信度,能夠看做尋找在已知條件下機率最大的分類方式,下面對這種觀點進行簡要描述。
考慮logistic regression,咱們知道就是進行判別的條件機率
的模型,並且當且僅當
(或者
)時判別爲類1。顯然,當
(
)時,y的類別很可能是1。因此
的大小衡量regression的可信度。
再用圖形來形象地描述。以下圖所示,‘x’和‘o’表明正、負兩類訓練樣本,分類面是一條直線,考慮三個樣本點A,B,C。注意到A離分界面很遠,常理來看A能夠很大程度上確認爲‘x’類;相反,C離分界面特別近,若是分界面稍有改變,C可能就從‘x’類變爲‘o’類了,所以對C屬於‘x’類的確信度較小。從以上直觀的描述中,咱們能夠發現樣本點(A,B,C)屬於‘x’類或者‘o’類的確信度(或者機率)能夠用它們到分界面的距離來表徵,這種思想引出了間隔(margin)的概念。
圖1 示意圖
受此啓發,咱們考慮classification問題:爲二分問題設計線性分類器。類別標籤用表示,特徵用x表示,線性分類器用
進行參數化描述:
如今讓咱們看看所謂的間隔(margin)。其實間隔有函數間隔和幾何間隔之分,它們之間的聯繫與規範化(歸一化)有關。對於訓練樣本和分類器
咱們定義函數間隔爲
能夠看出當和
同號時,
越大則函數間隔
越大。所以,大的函數間隔表明了確信度高且正確的類別判別。原本覺得函數間隔
就直接能夠用來做爲分類面優劣的衡量標準(頭腦簡單的根本緣由在於數學功底不夠),可是它存在一個問題:把
變成
,
不會有任何改變,可是函數間隔
會增大兩倍。這意味着咱們須要對函數間隔
進行一點小小的修改,這就是規範化。好比說,咱們能夠規定一個規範化條件
(能夠有其餘選擇),則
變爲
。對於訓練集
和分類器
,函數間隔定義爲
也就是單個樣本點的最小函數間隔。
接下來總結一下什麼是幾何間隔。以下圖所示,分類器爲圖中的超平面(直線),
爲垂直於分類面的法向量。B點是訓練樣本點A
在超平面上的投影,A到超平面的距離,即線段AB的長度,就是幾何間隔
。
圖2 示意圖
下面計算幾何間隔。易知
是單位法向量。考慮已知A表明樣本點
,則B爲
,並且可知B在超平面上,知足
,因此有
解得
爲了引入分類條件,從新將對於訓練樣本相對超平面
的幾何間隔定義爲
能夠看出,當時,函數間隔就等於幾何間隔。一樣地,對於訓練集
和分類器
,幾何間隔定義爲
對於訓練集,比較直觀的想法是找到一個分類器
使得幾何間隔最大,用數學語言描述爲
可是這個問題解決不了,由於存在這個非凸約束。爲了去掉這個煩人的約束,將上面的最優化問題改寫爲等價形式
可是咱們仍是沒法直接求解這個問題。咱們從上文中加入的約束(縮放約束)並不改變分界面性質中獲得啓發,此次咱們加入
的縮放約束。因而獲得了以下優化問題
這是一個常見的二次規劃問題,已經有很大成熟的方法和工具能夠解決。這也就是所謂 最優間隔分類器的原問題。
l 最優間隔分類器(對偶問題)
先拋開上面的二次規劃問題,先來看看存在等式約束的極值問題求法,好比下面的最優化問題:
目標函數是,下面是等式約束。一般解法是引入拉格朗日算子,這裏使用β來表示算子,獲得拉格朗日公式爲
而後分別對和
求偏導,使得偏導數等於0,而後解出
和
。至於爲何引入拉格朗日算子能夠求出極值,緣由是
的
變化方向受其餘不等式的約束,
的變化方向與
的梯度垂直時才能得到極值,並且在極值處,
的梯度與其餘等式梯度的線性組合平行,所以他們之間存在線性關係。
而後咱們探討有不等式約束的極值問題求法,問題以下:
咱們定義通常化的拉格朗日公式
這裏的和
都是拉格朗日算子。若是按這個公式求解,會出現問題,由於咱們求解的是最小值,而這裏的
,咱們能夠將
調整成很大的正值,來使最後的函數結果是負無窮。所以咱們須要排除這種狀況,咱們定義下面的函數:
若是直接求解,首先面對的是兩個參數,而也是不等式約束,而後再在
上求最小值。這個過程不容易作,那麼怎麼辦呢?答案就是拉格朗日對偶,對偶優化問題數學描述以下
很明顯,與
只是「max」和「min」的順序進行了交換,那它們之間有什麼聯繫呢?它們的大小關係以下
咱們只關心等號何時成立。Karush-Kuhn-Tucker (KKT)條件給了咱們答案。
KKT條件
l SVM 的優化問題:
咱們將約束條件改寫爲:
從KKT條件得知只有函數間隔是 1(離超平面最近的點)的線性約束式前面的係數>0,也就是說這些約束式
,對於其餘的不在線上的點(
),極值不會在他們所在的範圍內取得,所以前面的係數
=0,注意每個約束式實際就是一個訓練樣本。
圖3 示意圖
如上圖所示,實線是最大間隔超平面,在虛線上的點就是函數間隔是 1 的點,那麼他們前面的係數>0,其餘點都是
=0,這三個點稱做支持向量。構造拉格朗日函數以下:
下面就能夠按照對偶問題的求解步驟來一步步進行,
並獲得
將上式帶回到拉格朗日函數中獲得,此時獲得的是該函數的最小值:
而後求解
根據求解獲得的,咱們代入前式獲得
也就是說,之前新來的要分類的樣本首先根據和
作一次線性運算,而後看求的結果是大於0仍是小於0,來判斷正例仍是負例。如今有了
,咱們不須要求出
,只需將新來的樣本和訓練數據中的全部樣本作內積和便可。此外,咱們從 KKT 條件中獲得,只有支持向量的
,其餘狀況
。所以,咱們只需求新來的樣本和支持向量的內積,而後運算便可;這爲核函數(kernel)作了很好的鋪墊。
l SVM 多類分類方法
SVM多類分類方法的實現根據其指導思想大體有兩種:
(1)將多類問題分解爲一系列SVM可直接求解的兩類問題,基於這一系列SVM求解結果得出最終判別結果。
(2)經過對前面所述支持向量分類機中的原始最優化問題的適當改變,使得它能同時計算出全部多類分類決策函數,從而「一次性」地實現多類分類。
第(2)種指導思想看起來簡單,但因爲它的最優化問題求解過程太複雜,計算量太大,實現起來比較困難,所以未被普遍應用。而基於第(1)種指導思想的SVM多類分類方法主要有5種。
一、一對其他法
一類對餘類法(One versus rest,OVR)是最先出現也是目前應用最爲普遍的方法之一,其步驟是構造k個兩類分類機(設共有k個類別),其中第i個分類機把第i類同餘下的各種劃分開,訓練時第i個分類機取訓練集中第i類爲正類,其他類別點爲負類進行訓練。判別時,輸入信號分別通過k個分類機共獲得k個輸出值fi(x)=sgn(gi(x)),若只有一個+1出現,則其對應類別爲輸入信號類別;實際狀況下構造的決策函數老是有偏差的,若輸出不僅一個+1(不僅一類聲稱它屬於本身),或者沒有一個輸出爲+1(即沒有一個類聲稱它屬於本身),則比較g(x)輸出值,最大者對應類別爲輸入的類別。
這種方法的優勢是,對k類問題,只須要訓練k個兩類分類支持向量機,故其所獲得的分類函數的個數(k個)較少,其分類速度相對較快。
二、一對一
該方法在每兩類問訓練一個分類器,所以對於一個k類問題,將有k(k-1)/2個分類函數。當對一個未知樣本進行分類時,每一個分類器都對其類別進行判斷.併爲相應的類別「投上一票」,最後得票最多的類別即做爲該未知樣本的類別。決策階段採用投票法,可能存在多個類的票數相同的狀況,從而使未知樣本同時屬於多個類別,影響分類精度。
三、DAG方法(有向無環圖)
DAG-SvMS是由PIatt提出的決策導向的循環圖DAG導出的,是針對「一對一"SVMS存在誤分,拒分現象提出的。這種方法的訓練過程相似於「一對一」方法,k類別問題須要求解k(k-1)/2個支持向量機分類器,這些分類器構成一個有向無環圖。該有向無環圖中含有k(k-1)/2個內部節點和k個葉結點,每一個節點對應一個二類分類器。
DAG-SVMS簡單易行,只須要使用k-1個決策函數便可得出結果,較「一對一"方法提升了測試速度,並且不存在誤分、拒分區域;另外,因爲其特殊的結構,故有必定的容錯性,分類精度較通常的二叉樹方法高。然而,因爲存在自上而下的「偏差積累」現象是層次結構固有弊端,故DAG-SVMS也逃脫不掉。即若是在某個結點上發生了分類錯誤,則會把分類錯誤延續到該結點的後續結點上.
四、決策樹方法
決策樹的基本思想是從根節點開始,採用某種方法將該節點所包含的類別劃分爲兩個子類,而後再對兩個子類進一步劃分,如此循環,直到子類中只包含一個類別爲止,這樣,就獲得了一個倒立的二叉樹。最後,在二叉樹各決策節點訓練支持向量機分類器,實現對識別樣本的分類。決策樹支持向量機多分類方法有不少種,不一樣方法的主要區別在於設計樹結構的方法不一樣。
徹底二叉樹結構分類時使用的平均分類器數目爲log2k,偏二叉樹使用的平均分類器數爲(k+1)/2-1/k,具備其餘層次結構的二叉樹使用的分類器平均值介於兩者之間。徹底二叉樹分類時所須要的分類器數目最少,所以具備較少支持向量的徹底二叉樹的分類器速度也是較快的。
五、糾錯輸出編碼法(ECOC)
對於K類分類問題,能夠根據不一樣方法構造一系列的兩類分類問題,對於每一個兩類分類問題能夠創建一決策函數。共獲得L個決策函數,若是這些決策函數徹底正確,K類中的每一類都對應一個元素爲-l或+1的長度爲L的數列,按照K類中的第一類、第二類,...,第K類的順序,把這些數列排列起來,即可獲得一個K行L列的編碼矩陣,若要判斷一個測試輸入點的歸屬,首先用所獲得的L個決策函數,獲得一個元素爲-l或l的長度爲L的數列,而後將此數列與先前獲得矩陣比較,相應於矩陣中有一行且僅有一行向與此數列相同,這個行數就是輸入點的歸屬類;若矩陣中沒有一行與該數列相同,能夠經過計算漢明距離找出最近的一行,改行對應的類別即爲該點的類別。
3、實驗及結果分析
l 實驗一:原空間求解線性分類面問題
一、整體實驗方案
原始問題爲:
對偶問題爲:
在svc.m中,做者是在對偶空間中利用Matlab中的二次規劃函數quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)進行參數求解的。其中二次規劃問題以下:
工具箱中的svc.m所調用的二次規劃函數形式爲:
quadprog(H,f,[],[],aeq,beq,vlb,vub,x0)。
如今要在原空間求解問題,也就是求解
我沒有使用quadprog()進行求解,而是使用了fmincon()。有約束非線性多變量優化函數x=fmincon(fun,x0,A,b,Aeq,beq,lb,ub)針對標準問題
進行求解。只需將題目改寫成標準問題,便可使用fmincon()進行求解。
二、具體技術途徑
令變量,函數margin(x)=
=
,則fmincon()各參數的數值以下:
fun=@margin
x0=zeros(n+1,1)
A=sampleY.*sampleX;
b=-ones(m,1);
Aeq,beq,lb,ub=[];
三、實驗結果與分析
以印章提取二分類的測試圖爲例,提取像素的R值、G值和B值,分別以(R,G)和(R,G,B)做爲特徵,分別提取正(印章)、負(底紋)樣本各10個,進行比較,並在座標中顯示其數值分佈,以下圖所示:
圖4 以(R,G)做爲特徵的結果圖
圖5 以(R,G,B)做爲特徵的結果圖
使用Steve Gunn工具包獲得結果見下圖
圖6 用Steve Gunn工具包獲得分類面
圖7 用Steve Gunn工具包獲得分類效果
能夠看出採用2個特徵就能夠獲得很好的效果了,也驗證了間隔最優分類算法對此問題的有效性。
爲了比較對偶空間與原空間的計算效率,比較了兩空間的運算時間。
表 1 運算時間對比
方法 |
訓練時間 |
測試樣本判別時間 |
原空間 |
0.556517 秒 |
0.788372 秒 |
對偶空間 |
0.025058 秒 |
20.910515 秒 |
能夠看到,訓練樣本數爲正、負各10個的狀況,原空間和對偶空間的訓練效率和判別效率是有明顯差別的。其緣由爲:原始問題的複雜度由特徵維數決定,而對偶問題複雜度由訓練樣本個數決定。具體來講,當特徵維數大於訓練樣本個數時,原空間問題複雜度較高,效率較低;當訓練樣本個數大於特徵維數時,對偶空間問題複雜度較高,效率較低。可是,它們的計算結果是相同的。
l 實驗二:印章識別
一、整體實驗方案
因爲須要將印章、底紋、簽字區分,因此這是一個多類分類問題。將多類問題分解爲一系列SVM可直接求解的兩類問題,基於這一系列SVM求解結果得出最終判別結果,這裏採用一類對餘類法(One versus rest,OVR)。
兩類問題的分類採用了原空間和對偶空間求解兩種方式。
二、具體技術途徑
對一類對餘類法進行了必定的修改,在本問題中應用的具體步驟爲構造2個兩類分類機(印章、底紋、簽字3個類別),其中第i個分類機把第i類同餘下的各種劃分開,訓練時第i個分類機取訓練集中第i類爲正類,其他類別點爲負類進行訓練。2個分類器,按照(印章,其他)、(簽字,其他)依此判別時,第1個分類器從總樣本中分出印章,第2個分類器在餘下的樣本中分出簽字,剩下的就是底紋。
對偶空間的求解沒有使用steve gunn的工具包,而是本身根據拉格朗日對偶原理從新進行了相關程序的編寫。
三、實驗結果與分析
總共取20個樣本點做爲訓練集,在原空間和對偶空間求解二分問題,效果以下
圖8 原空間求解獲得分類效果
圖9 對偶空間獲得分類效果
能夠看出,分類效果很好,分類器基本上將印章、底紋、簽字3個類別分開了,這驗證了間隔最優分類算法和一對其他多分類算法對此問題的有效性。
4、實驗心得與體會
本次實驗主要經過編程解決具體問題加深對SVM原理的理解。個人收穫與體會有以下幾點:
1.怎樣針對問題設計最優化
最優化問題是咱們很面熟的問題,咱們在之前的學習中經常遇到,可是之前須要優化的問題(變量,目標,約束)都是以數學語言進行了精確描述的,只需咱們求解就行了,可此次咱們須要本身去定義好壞的標準,優化變量以及約束條件,我認爲只要優劣的衡量標準是合理的,可行的,它不會是惟一的,好比,該問題中咱們使用了「間隔」的概念;
2.數學很重要,頗有趣
推導原空間問題的形式時,將問題一步步從難求解的非凸優化問題變爲易求解的二次規劃問題的過程使人神往;處理多分類問題時多種多樣的算法也使人眼花繚亂。
3.具體問題具體分析
沒有最優的惟一標準,最適合的方法就是最好的方法。對一對其他的多類分類方法進行了修改,變簡單了,可是對該問題一樣優秀。
文中的多分類方法徹底引用了開到荼蘼的博客
http://blog.sina.com.cn/fanhuasijin118
文中關於SVM的知識參考了吳恩達斯坦福機器學習講義和JerryLead的斯坦福大學機器學習我的筆記