‧什麼是支持向量機(Support Vector Machine)
支持向量機(Support Vector Machine,簡稱SVM),是一種機械學習(machine learning)中監督式學習(Supervised learning)的方法,可以廣泛的應用於統計分類(classification)和回歸分析(regression analysis)。
SVM最主要的概念,就是希望可以在一個由不同類別混合而成的資料集中,依據一些特徵(feature),找到一個最佳的超平面(hyper plane)將不同類別的資料分開來。所謂最佳的超平面就是其距離兩個類別的邊界可以達到最大,而最靠近邊界的這些樣本點提供SVM最多的分類資訊,就叫做支持向量(Support Vector)。
‧如何使用SVM
SVM的使用方法有很多,其中最容易上手的就是由台灣大學林智仁老師所寫的LIBSVM(A Library For Support Vector Machine)。
在LIBSVM中主要有3個執行工具,svm-scale、svm-train和svm-predict。其中,svm-scale是用來重新調整資料的範圍,svm-train是用來建模,而svm-predict則是用來預測。
以下我們使用著名的生物資訊資料集 - 鳶尾花(iris)來當作範例。鳶尾花(iris)資料集,取自UCI (University of California, Irvine)的機械學習資料庫,共有150筆資料、5個欄位,且沒有遺失值。
我們從150筆資料中隨機抽取百分之八十的資料當作訓練資料(training data),剩餘百分之二十的資料當作測試資料(testing data),並依照下列步驟進行建模預測。
(1) 檔案格式:
在開始使用LIBSVM以前,須將資料轉變成一個LIBSVM適用的檔案格式:
輸入的檔案須為純文字檔,且不需要變數名稱。如上圖所示,第一欄是Label,即要分類的種類(1-setosa, 2-versicolor, 3-virginica);第二欄開始為Attributes,其格式為[index]:[value],冒號前後分別表示變數的編號和變數的數值。
(2) 調整資料範圍:
為了避免原始資料中的某些變數值過大或過小,進而影響結果,我們可以使用svm-scale來按比例縮放資料的範圍,使資料中的每個變數值都介於[0,1]或[-1,1],需要注意的是training data和testing data必須使用相同程度的縮放比例。
(3) 測試參數:
我們期望可以建立一個效率最好(正確率最高)的模型,因此在建模時根據資料的不同給予適當的參數是一件重要的事情,而在LIBSVM中有提供一個測試參數的工具 - grid.py。
grid.py會提供一個等高線圖,我們可以透過圖形的走向修改參數,並經由測試不同的參數,得到到最佳的參數組合,有一點需要注意,若training data中不同類別的數量不均,需要針對權重下參數,以免模型被影響族群數量影響造成偏誤。
(4) 建模:
找出最佳參數組合後,我們便可以利用這些參數來進行建模。
(5) 預測:
得到模型後,接下來就是將testing data丟進建好的模型進行測試,便可以得到正確率與結果。
參考資料:
Wikipedia -Support vector machine:https://en.wikipedia.org/wiki/Support_vector_machine
piaip的[lib]SVM簡易入門:http://ntu.csie.org/~piaip/svm/svm_tutorial.html
笨蛋也可以用的libsvm:http://www.cmlab.csie.ntu.edu.tw/~cyy/learning/tutorials/libsvm.pdf
留言列表