这个例子演示了一个单类SVM分类器,它尽可能简单,同时仍然显示完整的LIBSVM工作流。
步骤1:导入NumPy&LIBSVMimport numpy as NP
from svm import *
步骤2:生成合成数据:例如,给定边界内的500个点(注意:LIBSVMwebsite上提供了相当多的实数据集)Data = NP.random.randint(-5, 5, 1000).reshape(500, 2)
步骤3:现在,为一个类分类器选择一些非线性决策边界:rx = [ (x**2 + y**2) < 9 and 1 or 0 for (x, y) in Data ]
步骤4:下一步,使用此决策边界对数据进行任意分区:I类:位于上或内的任意圆
II类:决策边界(圆)外的所有点
SVM模型的构建从这里开始;在此之前的所有步骤只是准备一些合成数据。
步骤5:通过调用svm问题,传入决策边界函数和数据来构造问题描述,然后将此结果绑定到变量。px = svm_problem(rx, Data)
步骤6:为非线性映射选择一个核函数
对于这个例子,我选择了RBF(径向基函数)作为我的核函数pm = svm_parameter(kernel_type=RBF)
步骤7:训练分类器,
通过调用svm模型,传递问题描述(px)&;内核(pm)v = svm_model(px, pm)
第8步:最后,对训练后的模型对象('v')调用predict来测试训练后的分类器v.predict([3, 1])
# returns the class label (either '1' or '0')
在上面的例子中,我使用了LIBSVM的3.0版本(这个答案发布时的当前稳定释放)。
最后,w/r/t关于选择核函数的部分,支持向量机不是特定于特定核函数的,例如,我可以选择不同的核(高斯核、多项式等)。
LIBSVM包含所有最常用的内核函数——这是一个很大的帮助,因为您可以看到所有可能的替代项,并选择一个用于您的模型,这只是调用svm_parameter并为kernel_type传递一个值(所选内核的三个字母缩写)。
最后,选择用于训练的内核函数必须与测试数据匹配。