?? eee.txt
字號:
陸振波博士對四種SVM工具箱的使用要點一文已發表在置頂帖
<【共享】四種支持向量機(Support Vector Machine ,SVM)Matlab工具箱(Toolbox)的分類與回歸算法的示例程序 >中.特在此說明,歡迎學習!
http://bbs.matwav.com/post/view?bid=105&id=466201&sty=1&tpg=1&age=20
為方便研友閱讀,省去找的麻煩,將原文粘帖如下:
應研學論壇<<人工智能與模式識別>>版主magic_217之約,寫一個關于針對初學者的<<四種支持向量機工具箱>>的詳細使用說明。同時也不斷有網友向我反映看不懂我的源代碼,以及詢問如何將該工具箱應用到實際數據分析等問題,其中有相當一部分網友并不了解模式識別的基本概念,就急于使用這個工具箱。本文從模式識別的基本概念談起,過渡到神經網絡模式識別,逐步引入到這四種支持向量機工具箱的使用。
本文適合沒有模式識別基礎,而又急于上手的初學者。作者水平有限,歡迎同行批評指正!
[1]模式識別基本概念
模式識別的方法有很多,常用有:貝葉斯決策、神經網絡、支持向量機等等。特別說明的是,本文所談及的模式識別是指“有老師分類”,即事先知道訓練樣本所屬的類別,然后設計分類器,再用該分類器對測試樣本進行識別,比較測試樣本的實際所屬類別與分類器輸出的類別,進而統計正確識別率。正確識別率是反映分類器性能的主要指標。
分類器的設計雖然是模式識別重要一環,但是樣本的特征提取才是模式識別最關鍵的環節。試想如果特征矢量不能有效地描述原樣本,那么即使分類設計得再好也無法實現正確分類。工程中我們所遇到的樣本一般是一維矢量,如:語音信號,或者是二維矩陣,如:圖片等。特征提取就是將一維矢量或二維矩陣轉化成一個維數比較低的特征矢量,該特征矢量用于分類器的輸入。關于特征提取,在各專業領域中也是一個重要的研究方向,如語音信號的諧振峰特征提取,圖片的PCA特征提取等等。
[2]神經網絡模式識別
神經網絡模式識別的基本原理是,神經網絡可以任意逼近一個多維輸入輸出函數。以三類分類:I、II、III為例,神經網絡輸入是樣本的特征矢量,三類樣本的神經網絡輸出可以是[1;0;0]、[0;1;0]、[0;0;1],也可以是[1;-1;-1]、[-1;1;-1]、[-1;-1;1]。將所有樣本中一部分用來訓練網絡,另外一部分用于測試輸出。通常情況下,正確分類的第I類樣本的測試輸出并不是[1;0;0]或是[1;-1;-1],而是如[0.1;0;-0.2]的輸出。也是就說,認為輸出矢量中最大的一個分量是1,其它分量是0或是-1就可以了。
[3]支持向量機的多類分類
支持向量機的基本理論是從二類分類問題提出的。我想絕大部分網友僅著重于理解二類分類問題上了,我當初也是這樣,認識事物都有一個過程。二類分類的基本原理固然重要,我在這里也不再贅述,很多文章和書籍都有提及。我覺得對于工具箱的使用而言,理解如何實現從二類分類到多類分類的過渡才是最核心的內容。下面我僅以1-a-r算法為例,解釋如何由二類分類器構造多類分類器。
二類支持向量機分類器的輸出為[1,-1],當面對多類情況時,就需要把多類分類器分解成多個二類分類器。在第一種工具箱LS_SVMlab中,文件Classification_LS_SVMlab.m中實現了三類分類。訓練與測試樣本分別為n1、n2,它們是3 x 15的矩陣,即特征矢量是三維,訓練與測試樣本數目均是15;由于是三類分類,所以訓練與測試目標x1、x2的每一分量可以是1、2或是3,分別對應三類,如下所示:
n1 = [rand(3,5),rand(3,5)+1,rand(3,5)+2];
x1 = [1*ones(1,5),2*ones(1,5),3*ones(1,5)];
n2 = [rand(3,5),rand(3,5)+1,rand(3,5)+2];
x2 = [1*ones(1,5),2*ones(1,5),3*ones(1,5)];
1-a-r算法定義:對于N類問題,構造N個兩類分類器,第i個分類器用第i類訓練樣本作為正的訓練樣本,將其它類的訓練樣本作為負的訓練樣本,此時分類器的判決函數不取符號函數sign,最后的輸出是N個兩類分類器輸出中最大的那一類。
在文件Classification_LS_SVMlab.m的第42行:codefct = 'code_MOC',就是設置由二類到多類編碼參數。當第42行改寫成codefct ='code_OneVsAll',再去掉第53行最后的引號,按F5運行該文件,命令窗口輸出有:
codebook =
1 -1 -1
-1 1 -1
-1 -1 1
old_codebook =
1 2 3
比較上面的old_codebook與codebook輸出,注意到對于第i類,將每i類訓練樣本做為正的訓練樣本,其它的訓練樣本作為負的訓練樣本,這就是1-a-r算法定義。這樣通過設置codefct ='code_OneVsAll'就實現了支持向量機的1-a-r多類算法。其它多類算法也與之雷同,這里不再贅述。值得注意的是:對于同一組樣本,不同的編碼方案得到的訓練效果不盡相同,實際中應結合實際數據,選擇訓練效果最好的編碼方案。
[4]核函數及參數選擇
常用的核函數有:多項式、徑向基、Sigmoid型。對于同一組數據選擇不同的核函數,基本上都可以得到相近的訓練效果。所以核函數的選擇應該具有任意性。對訓練效果影響最大是相關參數的選擇,如:控制對錯分樣本懲罰的程度的可調參數,以及核函數中的待定參數,這些參數在不同工具箱中的變量名稱是不一樣的。這里仍以Classification_LS_SVMlab.m為例,在第38、39行分別設定了gam、sig2的值,這兩個參數是第63行trainlssvm函數的輸入參數。在工具箱文件夾的trainlssvm.m文件的第96、97行有這兩個參數的定義:
% gam : Regularization parameter
% sig2 : Kernel parameter (bandwidth in the case of the 'RBF_kernel')
這里gam是控制對錯分樣本懲罰的程度的可調參數,sig2是徑向基核函數的參數。所以在充分理解基本概念的基礎上,將這些概念與工具箱中的函數說明相結合,就可以自如地運用這個工具箱了,因此所以最好的教科書是函數自帶的函數說明。
最佳參數選擇目前沒有十分好的方法,在Regression_LS_SVMlab.m的第46至49行的代碼是演示了交叉驗證優化參數方法,可這種方法相當費時。實踐中可以采用網格搜索的方法:如gam=0:0.2:1,sig2=0:0.2:1,那么gam與sig2的組合就有6x6=36種,對這36種組合訓練支持向量機,然后選擇正確識別率最大的一組參數作為最優的gam與sig2,如果結果均不理想,就需要重新考慮gam 與sig2的范圍與采樣間隔了。
[5]由分類向回歸的過渡
LS_SVMlab、SVM_SteveGunn這兩個工具箱實現了支持向量機的函數擬合功能。從工具箱的使用角度來看,分類與回歸的最大區別是訓練目標不同。回歸的訓練目標是實際需要擬合的函數值;而分類的訓練目標是1,2,…N(分成N類),再通過適當的編碼方案將N類分類轉換成多個二類分類。比較文件Regression_LS_SVMlab.m與Classification_LS_SVMlab.m的前幾行就可以注意到這一點。另外,分類算法以正確分類率來作為性能指標,在回歸算法中通常采用擬合的均方誤差(mean square error, MSE)來作為性能指標。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -