第三章 研究方法
3.3 支持向量機
圖 3.24:以 3×3 為例之區塊式區域紋理特徵擷取與直方圖建構示意圖
3.3 支持向量機
支持向量機(support vector machine, SVM) [36]是一種功能非常強大的演算 法,它本質上是與類神經網路相似,應用層面很廣,包括:分類(classification)、
迴歸(regression)的演算及密度估計等。SVM 為一種根據統計學習理論提出的機 器學習(machine learning)演算法,亦為監督式學習法(supervised learning),但是目 前多數人都是將其應用於分類。基於可以處理線性與非線性分割問題、運算速度 快、分類的準確度高且當樣本數不平等時,仍然可以有良好的效果,種種的優點,
使我們在分類器的選用上選擇 SVM 進行分類。
SVM 的基礎觀念是如果有一堆已經分成類別 A 和類別 B 的數據,但是不知 其分類的依據是什麼,如圖 3.25 所示,SVM 可以在這些資料中找到一個超平面 (hyperplane),使之將不同類別的資料區隔開,兩類最接近超平面的所有資料點(圖 3.25 中黑色三角形與圓形)被稱為支持向量(support vector),超平面則由這些支持 向量所決定。兩類別資料各自與超平面間的最短距離之和則為邊界(margin),邊 界的大小代表不同類別資料間分離的程度,所以這超平面的邊界(margin)越大越 好,當邊界達到最大值時之超平面稱之為最佳超平面,之後經由訓練(training) 建立一個模型(model),當輸入未分類的新資料進行測試時,SVM 可利用訓練完 成的模型預測(predict)這筆新資料所屬的類別。
24
類別A(+1)
類別B(-1)
Maximum Margin x2
x1
圖 3.25:二維平面 SVM 分類最佳超平面
假 設 我 們 有 一 堆 分 好 類 別 的 樣 本 集 合 且 ,接著我們需要找到超平面 使得當 的所有點 落在 這一邊,也同時使所有 的點落在 這一邊,如此一來 我們便可輕易的分類該點是屬於哪一類別。
SVM 有一重要的特點,就是可以解決線性與非線性資料的問題,而 SVM 解 決非線性資料問題的方法就是透過所謂的核函數(kernel function)把資料投射到 比原始資料高維度的空間上來改變其特徵空間分佈型態,使得資料變得可用線性 方法區分,如圖 3.26 所示。
圖 3.26:利用核函數把資料投射到高維度空間[12]
25
使用不同的核函數來減低複雜問題的分類難度,是影響 SVM 結果相當重要 的一環。基礎的核函數總共有四種[37],分別為線性(Linear) 、多項式(Polynomial)、
輻射基底函數(Radial Basis Function, RBF)和 Sigmoid,如表 3.1 所示,其中 、 和 是 kernel 的係數。我們因相關文獻中多以 RBF 作為核函數的選擇,且 Bing 等人 [38]比較了 Linear Kernel、Polynomial Kernel 和 RBF 的差異,Linear Kernel 雖然 較快,但 Polynomial Kernel 和 RBF 正確率較高,但 Polynomial Kernel 在較高維 度的空間時會有計算上的困難,所以選擇 RBF 會比選擇 Polynomial Kernel 來的 佳。Guo 等人[39]分析了 Sigmoid Kernel 和 RBF 的表現,認為 RBF 的效果較優 秀。綜合上述分析,本論文在 SVM 之核函數將使用 RBF 作為選擇。
表 3.1:核函數的定義
種類 function
Linear Kernel
Polynomial Kernel Radial Basis Function (RBF)
Sigmoid Kernel
本論文後續之實驗是以 Multimedia Knowledge and Social Media Analytics Laboratory[40] 提 供 的 GPU-accelerated LIBSVM(a library for support vector machine) 作為測試系統效能之工具,選用在 2013 年更新的 version 1.2。我們將 性 別 訓 練 樣 本經 過 GEI 處 理後 , 透 過 TPLZP 方 法 取 得 之 特 徵 向量 輸 入 GPU-accelerated LIBSVM 進行模型訓練與分析。在使用 GPU-accelerated LIBSVM 之前我們必須要先安裝 python[41]與 gnuplot[42]兩套軟體,需要安裝 python 是因 為後面使用到的工具是以此程式語言撰寫而成,gunplot 是因使用的工具須以此
26
來繪製圖形。
GPU-accelerated LIBSVM version 1.2 是利用 CUDA 架構對 Chang 和 Lin 提 供的 LIBSVM version3.17[43]進行修改。在 CUDA 的架構下,我們可以使用 NVIDIA 顯卡內的多核心進行平行運算,如此可以顯著的縮短處理時間並產生相 同的結果。GPU 版本與原始版本效能差距如圖 3.27 所示。
圖 3.27:不同模式 LIBSVM 的效率比較圖[40]
一個完整的分類辨識階段是:輸入資料-資料正規化-參數選擇-訓練模型-測 試-辨識結果,其中除了參數選擇,我們可以全部直接呼叫 LIBSVM 完成。輸入 特徵資料後,我們先呼叫函式庫中的 svmscale 將資料調整到-1 至 1 的範圍內,
此作法可以避免特徵值中的某項特徵過大,在計算超平面時主導結果。接著在參 數選擇上,Chang 和 Lin 提供名為“grid.py”的 kernel function 參數選擇工具,此處 我們選擇 RBF 作為 kernel function,該工具在訓練階段會採用交叉驗證針對所有 訓練資料評估每一個聯合參數的準確性,最後自動找出一組最佳參數以此呼叫函 式庫中的 svmtrain 產生 SVM 分類模型,再將測試樣本以相同特徵擷取方法取得 之特徵向量一樣正規化後,呼叫函式庫中的 svmpredict,把資料輸入分類模型中
27
進行分類,即可從分類結果中得出我們所提方法之整體辨識效果。Chang 和 Lin 也為了方便他人使用,提供一個名為“easy.py”的簡易腳本,此腳本從資料正規化 -參數選擇-訓練模型-測試可以一次完成,我們也是使用此工具進行實驗。
28