使用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:
- 用非線性對映把原始資料據變換到高緯空間
- 在新的空間搜尋最大邊緣超平面
Orange中的SVM
Orange中的SVM基於LibSVM、LIBLINEAR這兩個庫。提供了三個學習演算法
-
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/