SlideShare a Scribd company logo
1 of 23
SVM & LibSVM
boshen
Outline
• What is SVM
• LibSVM
• Use svm-toy
What is SVM(Support Vector Machine)
• 支撐向量機(Support Vector Machine),以下都簡稱為SVM,SVM
是可以用來作為分類(classification)的工具,所謂的分類簡單來說
就是會將屬性類似的歸為一類。
• SVM是一種演算法,包含了數學工具、統計方法等等
• 當我們在使用SVM時,
①我們會給予已經分類好的資料,SVM就會透過這組資料建立模型,
②往後當有新資料想分類時,我們就可以利用先前建立的模型,來判斷此
資料的分類
Think a Scenario about classification
很會游泳 體重 身高 臂長 體指 腳長
data1 Yes 60 190 100 13 110
data2 no 55 170 80 15 120
data3 Yes 40 160 90 30 130
data4 no 70 165 120 20 140
data5 Yes 66 176 99 9 90
老師想要尋找班上的游泳好手, 於是將全班的學生抓來游
泳池測驗,測驗的結果的確有人游的如魚得水, 但有人游
的就很吃力,以下就是老師的實驗數據(只列出部分)
Training Data
Predict by SVM
• 某日校長要老師開體育班,要對全校每個學生檢測…但這樣太沒
效率,但有什麼方法可以透過剛剛觀察的結果,來預測分析每個
學生是不是游泳的料呢?
• 老師想到, 可以用SVM來解決這個問題。
SVM Concepts
• 讓 training data 在 特徵空間中,找到一個超平面將這些資料分開來。
• 特徵空間: 一個多維的空間;我們可以看到下圖,如果想要在原空間將這
些零散的資料,清楚劃分成兩類,就需要用到橢圓方程式,但是如果我們透
過一些方式將原空間的資料轉換到特徵空間,這時候我們就可以找到一個平
面將資料成功劃分。
SVM FOR predict
• 換句話說,老師可以將班上同學測游泳的data轉換到一個 feature
space上,然後透過一個平面切割成兩類,
• 如果要測試其它學生會不會游泳時,只要給受測者學生的data(跟
training data一樣的特徵欄位), 然後SVM就會判斷學生會不會游泳
了(分類, classification)。
SVM 如何把資料切成兩類
圖中有很多點,也可以找到很多條線把資料分成兩類,但要如何選擇正確的那條線?
SVM會選擇margin越大的來當分界線,如果選擇margin小的線,當資料有細微變動,就會導致分類錯誤。
Margin:分類邊界與最近的訓練資料點之間的距離
很會游
泳
體重 身高 臂長 體指 腳長
YES 65 170 100 11 100
NO ?! 65.01 170 100 11 100
多類資料分法
• 如果要將學生分成三類, 1. 很會游 2. 會游 3. 不會游, how to do?
• 主要有兩種方法
• 1. One-against-One 一對一
• 2. One-against-All 一對多
One-against-One 一群一群兩兩比對,
Train-----------------
C跟A建立超平面
C跟B建立超平面
A跟B建立超平面
Predict- --------------------------
怎麼知道該學生是哪一類的? 用兩兩相比多數決
先看A,C, 歸類在A
再看C,B, 歸類在C
再看A,B, 歸類在A
被歸類在C的有1票
歸類在A的有2票
所以該學生是被歸類在很會游泳
One-against-All
笑臉代表該學生再feature space所在的點
Training-------------
A跟 (B,C) 建立一個超平面
B跟 (A,C)建立一個超平面
C跟 (A,B)建立一個超平面
Predict------------------------
如何判斷?
先看會游泳的區塊, 沒錯它會游泳
再看很會游泳的區塊, 沒錯它很會游泳
再看不會游泳的區塊, 它不屬於這區塊的,
那這位同學是很會還是指是會游泳呢?
答案是距離超平面距離院遠越好, 越像那一
類, 也就是她很會游泳!
小結
• SVM是非常好用的工具,可以幫助我們解決分類的問題,
其主要概念就是將資料轉換到特徵空間,然後找到超平面
將資料劃分,最後就可以透過此模型快速的將資料分類。
• 但是…SVM用到非常多的數學、統計方法,如果要自己實作
tool有點困難,於是有人就寫了LibSVM,使用它只要準備好
training data, 就可以用它寫好的tool去建立model, predict…
• LibSVM把前面介紹到SVM的分類方法等等都實做好了
Install LibSVM
• LibSVM.zip
• Python
• For more detail, please refer:
• 笨蛋也可以用的 libsvm
基本 libsvm classify 流程
• 1. 把training data 轉換成 libsvm看得懂得格式
• 2. train model
• 3. 把test data丟到model裡取得分類結果
1.
把training data 轉換成 libsvm看得懂得格式
Label: 該data屬於哪一類, 通常是一些整數
Index: 該特徵的編號
Value: 特徵值
以剛剛提到游泳的例子,身高、體重都是該data特徵
N維空間就有N組特徵 (feature space)
Use svm-toy (simulator)
• 用svmtoy幫助我們產出training data作測試
這裡的點就是我們的training data,
而model紀錄的就是點的分部狀況,
右圖是按下run之後模擬這些點所產生
Model的結果(並不是真的產生model)
按下save後得到training data, 模擬器是模擬二維空間,
所以兩個特徵值分別是X,Y軸的值
像是
(0.026, 0.852)是屬於class 2
(0.302, 0.604)是屬於class 3
…
有了這一堆training data做出來的model,
就可以隨便指定一個座標(一個data),
就可以predict出對應的分類(顏色)。
2. train model (svm-train.exe)
• 使用svm-toy產出training data後, 我們要下指令去train這組data, 並
產出model file.
此例子train完後, 會產出
train_data.model
在當前目錄
What does this output mean?
See
http://www.csie.cyut.edu.tw/~shwu/PR_slide/SVM.pdf
3. 把test data丟到model裡取得分類結果
• 語法: svm-predict.exe test_file model_file output_file
• test_file就是我們要拿來預測的資料,格式跟之前提到的
training data是一樣的,
[label] [index1]:[value1] [index2]:[value2] ...
• Predict完會把predict的結果跟test_file的分類作比較, 如此就可
以知道這個model預測有多準確, 也方便調整參數。
• test_file 不一定要跟 training data一樣有 class label (可不用分
類), 但必須放一個隨意整數;單純得到test_file的分類結果。
Create test_file and predict
Test_file
Svm-predict.exe
Predict result
有更方便的
• 作者有外寫一個script, 把上述train跟predict一起做完。
• python easy.py trainingData testData
預測誰是游泳好手?
Class 1 : 很會游泳
Class 2 : 可能不太行
Training data Test data
Run easy.py
Predict result
Advanced topic
• Scaling
• Arguments
• 幫助svm運行的速度跟準確率

More Related Content

More from Roy Chen

Phonegap入門
Phonegap入門Phonegap入門
Phonegap入門Roy Chen
 
WiFi direct
WiFi directWiFi direct
WiFi directRoy Chen
 
Nfc tutorial
Nfc tutorialNfc tutorial
Nfc tutorialRoy Chen
 
Cloud service and gae for java(gae:j)
Cloud service and gae for java(gae:j)Cloud service and gae for java(gae:j)
Cloud service and gae for java(gae:j)Roy Chen
 
Processing for fun
Processing for funProcessing for fun
Processing for funRoy Chen
 
聽障朋友科技應用
聽障朋友科技應用聽障朋友科技應用
聽障朋友科技應用Roy Chen
 
Phonegap tricky
Phonegap trickyPhonegap tricky
Phonegap trickyRoy Chen
 

More from Roy Chen (9)

Phonegap入門
Phonegap入門Phonegap入門
Phonegap入門
 
WiFi direct
WiFi directWiFi direct
WiFi direct
 
Nfc tutorial
Nfc tutorialNfc tutorial
Nfc tutorial
 
Gwt rpc
Gwt rpcGwt rpc
Gwt rpc
 
Cloud service and gae for java(gae:j)
Cloud service and gae for java(gae:j)Cloud service and gae for java(gae:j)
Cloud service and gae for java(gae:j)
 
Processing for fun
Processing for funProcessing for fun
Processing for fun
 
個資法
個資法個資法
個資法
 
聽障朋友科技應用
聽障朋友科技應用聽障朋友科技應用
聽障朋友科技應用
 
Phonegap tricky
Phonegap trickyPhonegap tricky
Phonegap tricky
 

Svm and libsvm

Editor's Notes

  1. 老師想要尋找游泳好手, 於是將全班的學生抓來游泳池測驗,測驗的結果的確有人遊的如魚得水, 但有人遊的就很吃力,以下就是老師的實驗數據
  2. 一群一群兩兩比對, C跟A建立超平面 C跟B建立超平面 A跟B建立超平面 怎麼知道該學生是哪一類的? 用兩兩相比多數決 先看A,C, 歸類在A 再看C,B, 歸類在C 再看A,B, 歸類在A 被歸類在C的有1票 歸類在A的有2票 所以該學生是被歸類在很會游泳
  3. A跟 (B,C) 建立一個超平面 B跟 (A,C)建立一個超平面 C跟 (A,B)建立一個超平面 如何判斷? 先看會游泳的區塊, 沒錯它會游泳 再看很會游泳的區塊, 沒錯它很會游泳 再看不會游泳的區塊, 它不屬於這區塊的, 那這位同學是很會還是指是會游泳呢? 答案是距離超平面距離院遠越好, 越像那一類, 也就是她很會游泳!