1. 程式人生 > >使用Orange進行資料探勘之分類(4)------SVM

使用Orange進行資料探勘之分類(4)------SVM

SVM基本概念

簡單的說SVM是一種對線性合非線性資料進行分類的方法。

以二維資料為例,中間的直線將資料分為兩部分,分別用實心的圓點和空心的圓點表示。

對於上邊的資料可能有很多直線將資料區分開,如下

SVM通過搜尋最大邊緣超平面來選擇最合適的超平面,因為具有較大邊緣的超平面對於未來的資料分組分類更好的準確性。

分離超平面表示為:

W*X+b =0

位於超平面上方的點滿足 W*X+b >0,位於超平面下方的點滿足 W*X+b <0,

可以定義分離超平面的邊緣為:W*X+b =1 和W*X+b =-1;邊緣之間的距離可以推到為 2/|w|。

對於非線性可分的情況,需要按照如下兩步擴充套件SVM:

  1. 用非線性對映把原始資料據變換到高緯空間
  2. 在新的空間搜尋最大邊緣超平面

Orange中的SVM

Orange中的SVM基於LibSVMLIBLINEAR這兩個庫。提供了三個學習演算法

  • SVMLearner

  • SVMLearnerEasy

  • LinearSVMLearner

下面的例子使用了這三種演算法:

from Orange import data
from Orange.classification import svm

iris = data.Table("iris")
svm_easy = svm.SVMLearnerEasy(iris,name="svm easy", folds=3)
svm_normal = svm.SVMLearner(iris,name="svm")
svm_linear =svm.LinearSVMLearner(iris,name="svm linear")

for i in iris[:5]:

     print svm_normal(i),svm_easy(i),svm_linear(i),i.getclass()

執行結果如下:

Iris-virginica Iris-virginica Iris-virginica Iris-virginica
Iris-virginica Iris-virginica Iris-virginica Iris-virginica
Iris-virginica Iris-virginica Iris-virginica Iris-virginica
Iris-virginica Iris-virginica Iris-virginica Iris-virginica
Iris-virginica Iris-virginica Iris-virginica Iris-virginica

下圖用視覺化的方式比較了svm和其它分類演算法結果:


參考資料

資料探勘:概念與技術 http://book.douban.com/subject/2038599/

資料探勘導論:http://book.douban.com/subject/5377669/