SVM基本概念
简单的说SVM是一种对线性合非线性数据进行分类的方法。
以二维数据为例,中间的直线将数据分为两部分,分别用实心的圆点和空心的圆点表示。
对于上边的数据可能有很多直线将数据区分开,如下
SVM通过搜索最大边缘超平面来选择最合适的超平面,因为具有较大边缘的超平面对于未来的数据分组分类更好的准确性。
分离超平面表示为:
W*X+b =0
位于超平面上方的点满足 W*X&#43;b >0,位于超平面下方的点满足 W*X&#43;b <0,
可以定义分离超平面的边缘为&#xff1a;W*X&#43;b &#61;1 和W*X&#43;b &#61;-1&#xff1b;边缘之间的距离可以推到为 2/|w|。
对于非线性可分的情况&#xff0c;需要按照如下两步扩展SVM&#xff1a;
- 用非线性映射把原始数据据变换到高纬空间
- 在新的空间搜索最大边缘超平面
Orange中的SVM
Orange中的SVM基于LibSVM 、 LIBLINEAR 这两个库。提供了三个学习算法
-
SVMLearner
-
SVMLearnerEasy
-
LinearSVMLearner
下面的例子使用了这三种算法&#xff1a;
from Orange import data
from Orange.classification import svmiris &#61; data.Table("iris")
svm_easy &#61; svm.SVMLearnerEasy(iris,name&#61;"svm easy", folds&#61;3)
svm_normal &#61; svm.SVMLearner(iris,name&#61;"svm")
svm_linear &#61;svm.LinearSVMLearner(iris,name&#61;"svm linear")for i in iris[:5]:print svm_normal(i),svm_easy(i),svm_linear(i),i.getclass()
运行结果如下&#xff1a;
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和其它分类算法结果&#xff1a;
参考资料
数据挖掘&#xff1a;概念与技术 http://book.douban.com/subject/2038599/
数据挖掘导论&#xff1a;http://book.douban.com/subject/5377669/