MATLAB神經網路(七):基於SVM的葡萄酒識別

支持向量機(SVM,support vector machine)是由vapnik(1963)首先提出的,像多層感知器網路和徑向基函數網路一樣,可用於模式分類和非線性回歸。支持向量機的主要思想是建立一個分類超平面作為決策曲面,使得正例和反例之間的隔離邊緣被最大化。支持向量機的理論基礎是統計學習理論。學習機器在測試數據上的誤差率以訓練誤差率和一個依賴於VC維數(Vapnik-Chervonenkis dimension)的項的和為界,在可分模式情況下,支持向量機對前一項的值為0,並且使第二項最小化。因此,儘管它不利用問題的領域內部問題,但在模式分類問題上能提供好的泛化性能。

wine數據的來源是UCI資料庫,記錄的是在義大利同一區域上三種不同品種的葡萄酒的化學成分分析,數據里含有178個樣本,每個樣本含有13個特徵分量(化學成分),每個樣本的類別標籤已給。將這178個樣本的50%作為訓練集,另50%作為測試集,用訓練集對SVM進行訓練可以得到分類模型,再用得到的模型對測試集進行類別標籤預測。

在178個樣本中,1-59屬於第一類,60-130屬於第二類,131-178屬於第三類。現將每個類別分成兩組,重新組合數據,一部分作為訓練集(train_wine),一部分作為測試集(test_wine)。

load data;ntrain_wine=[1:30,:],wine(60:95,:),wine(131:,153,:);n%將相應的標籤提取出來ntrain_wine_labels=.....n[wine_labels(1:30);...nwine_labels(60:95);wine_labels(131:153)];n%將第一類的31~59,第二類的96~130,第三類的154~178作為測試集ntest_wine=[wine(31:59,:);wine(96:130,:);wine(154:178,:)];n%將相應的標籤提取出來ntest_wine_labels=...n[wine_labels(31:59);...nwine_labels(96:130);wine_labels(154:178)];n%數據預處理,將訓練集和測試集歸一化到[0,1]區間;n[mtrain,ntrain]=size(train_wine);n[mtest,ntest]=size(test_wine);nndataset=[train_wine;test_wine];n%mapminmax為MATLAB自帶的歸一化函數n[dataset_scale,ps]=mapminmax(dataset,0,1);ndataset_scale=dataset_scale;nntrain_wine=dataset_scale(1:mtrain,:);ntest_wine=dataset_scale((mtrain+1):(mtrain+mtest),:);nnmodel-....nsvmtrain(train_wine_labels,train_wine,-c2-g1);n[predict_label,accuracy]=...nsvmpredict(test_wine_labels,test_wine,model);n

用SVM作人類預測時需要調節相關的參數才能得到比較理想的預測分類準確率,那麼SVM的參數該如何選取呢?採用交叉驗證(Cross Validation)可以在某種意義下得到最優的參數,可以有效避免過學習和前學習狀態的發生

CV是用來驗證分類器性能的一種統計分析方法,基本思想是把在某種意義下將原始數據進行分組,一部分作為訓練集,另一部分作為驗證集,其方法是首先用訓練集對分類器進行訓練,再利用驗證集來測試訓練得到的模型,以得到的分類準確率作為評價分類器的性能指標。

常見的CV方法如下

Hold-out Method

原始數據被隨機分為兩組,一組作為訓練集,一組作為驗證集,利用訓練集訓練分類器然後利用驗證集驗證模型,記錄最後的分類準確率作為分類器的性能指標。此種方法的好處是處理簡單,只需隨機把原始數據分為兩組即可,其實嚴格上並沒有達到交叉的思想。

K-fold CV

原始數據被分成K組,將每個子集數據分別做一次驗證集,同時其餘的K-1組子集數據作為訓練集,這樣會得到K各模型,用這K個模型最終的驗證集的分類準確率的平均數作為此K-CV下分類器的性能指標。K一般大於等於2,實際操作時一般從3開始取。

Leave-One-Out CV(LOO-CV)

如果原始數據由N個樣本,那麼LOO-CV就是N-CV,即每個樣本單獨作為驗證集,其餘的N-1個樣本作為訓練集。相比K-CV,LOO-CV有兩個明顯的優點。1. 集合中幾乎所有的樣本皆用於訓練模型,因此最接近原始樣本的分布,這樣評估所得的結果比較可靠。2. 實驗過程中沒有隨機因素影響實驗數據,確保實驗過程是可以被複制的。但LOO-CV的缺點是計算成本高,因為需要建立的模型與原始數據樣本數量相同,當原始數據樣本數量相當多時,LOO-CV在實際操作上幾乎不可實現,除非每次訓練分類器得到模型的速度很快,或是可以用並行化計算減少計算所需的時間。

推薦閱讀:

MATLAB手動跳出循環的技巧
matlab稀疏矩陣使用的是什麼數據結構?
漫談Simulink:什麼是代數環?
FAU公開研究挑戰賽之Holography
在Live Editor里用Symbolic Math Toolbox是一種什麼樣的體驗

TAG:MATLAB | 神经网络 | SVM |