什麼是支持向量機(Support Vector Machine)

支持向量機(Support Vector Machine,簡稱SVM),是一種機械學習(machine learning)中監督式學習(Supervised learning)的方法,可以廣泛的應用於統計分類(classification)和回歸分析(regression analysis)

0621-1.png

SVM最主要的概念,就是希望可以在一個由不同類別混合而成的資料集中,依據一些特徵(feature),找到一個最佳的超平面(hyper plane)將不同類別的資料分開來。所謂最佳的超平面就是其距離兩個類別的邊界可以達到最大,而最靠近邊界的這些樣本點提供SVM最多的分類資訊,就叫做支持向量(Support Vector)

 

如何使用SVM

SVM的使用方法有很多,其中最容易上手的就是由台灣大學林智仁老師所寫的LIBSVM(A Library For Support Vector Machine)

LIBSVM中主要有3個執行工具,svm-scalesvm-trainsvm-predict。其中,svm-scale是用來重新調整資料的範圍,svm-train是用來建模,而svm-predict則是用來預測。

以下我們使用著名的生物資訊資料集 - 鳶尾花(iris)來當作範例。鳶尾花(iris)資料集,取自UCI (University of California, Irvine)機械學習資料庫,共有150筆資料、5個欄位,且沒有遺失值。

0621-2.png

我們從150筆資料中隨機抽取百分之八十的資料當作訓練資料(training data),剩餘百分之二十的資料當作測試資料(testing data),並依照下列步驟進行建模預測。

 (1) 檔案格式:

在開始使用LIBSVM以前,須將資料轉變成一個LIBSVM適用的檔案格式:

0621-3.png

輸入的檔案須為純文字檔,且不需要變數名稱。如上圖所示,第一欄是Label,即要分類的種類(1-setosa, 2-versicolor, 3-virginica);第二欄開始為Attributes,其格式為[index]:[value],冒號前後分別表示變數的編號和變數的數值。

(2) 調整資料範圍:

為了避免原始資料中的某些變數值過大或過小,進而影響結果,我們可以使用svm-scale來按比例縮放資料的範圍,使資料中的每個變數值都介於[0,1][-1,1]需要注意的是training datatesting data必須使用相同程度的縮放比例

0621-4.png

(3) 測試參數:

我們期望可以建立一個效率最好(正確率最高)的模型,因此在建模時根據資料的不同給予適當的參數是一件重要的事情,­而在LIBSVM中有提供一個測試參數的工具 - grid.py

0621-5.png

grid.py會提供一個等高線圖,我們可以透過圖形的走向修改參數,並經由測試不同的參數,得到到最佳的參數組合,有一點需要注意,training data中不同類別的數量不均,需要針對權重下參數,以免模型被影響族群數量影響造成偏誤。

0621-6.png

(4) 建模:

找出最佳參數組合後,我們便可以利用這些參數來進行建模。

0621-7.png

(5) 預測:

得到模型後,接下來就是將testing data丟進建好的模型進行測試,便可以得到正確率與結果。

0621-8.png

         0621-9.png

 

參考資料:

Wikipedia -Support vector machinehttps://en.wikipedia.org/wiki/Support_vector_machine

piaip[lib]SVM簡易入門:http://ntu.csie.org/~piaip/svm/svm_tutorial.html

笨蛋也可以用的libsvmhttp://www.cmlab.csie.ntu.edu.tw/~cyy/learning/tutorials/libsvm.pdf

 

 

 

 

 

 

YourGene 發表在 痞客邦 PIXNET 留言(0) 人氣()