SVM是一种训练机器学习的算法,可以用于解决分类和回归问题,同时还使用了一种称之为 trick(支持向量机的核函数)的技术进行数据的转换,然后再根据这些转换信息,在可能的输出之中找到一个最优的边界(超平面) 。简单来说,就是做一些非常复杂的数据转换工作,然后根据预定义的标签或者输出进而计算出如何分离用户的数据 。
支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(或称泛化能力) 。
1、为何需要核函数?
很多情况下低维空间向量集是难于划分的,解决办法是将它们映射到高维空间 。但这个办法带来的艰苦就是策画错杂度的增长,而核函数正好奇妙地解决了这个问题 。也就是说,只要选用恰当的核函数,就可以获得高维空间的分类函数(超平面) 。在SVM理论中,采取不合的核函数将导致不合的SVM算法 。在断定了核函数之后,因为断定核函数的已知数据也存在必然的误差,推敲到推广性题目,是以引入了败坏系数以及处罚系数两个参变量来加以校订 。
其实核函数的本质作用可以简练概括为:将低维空间的线性不可分类问题,借助核函数转化为高维空间的线性可分,进而可以在高维空间找到分类的最优边界(超平面) 。(下图引自July‘s支持向量机通俗导论(理解SVM的三层境界)) 。若要要分类下图红色和蓝色样本点:
文章插图
文章插图
2、核函数的分类
(1)线性核函数
(2)多项式核函数
(3)径向基(RBF)核函数(高斯核函数)
(4)核函数(二层神经收集核函数)
3、中的核函数定义:
CvSVM:: :线性内核,没有任何向映射至高维空间,线性区分(或回归)在原始特点空间中被完成,这是最快的选择 。
CvSVM::POLY :多项式内核:
CvSVM::RBF :基于径向的函数,对于大多半景象都是一个较好的选择:
CvSVM:: :函数内核:
文章插图
中SVM参数设置使用方法定义如下:
enum KernelTypes {/** Returned by SVM::getKernelType in case when custom kernel has been set */CUSTOM=-1,/** Linear kernel. No mapping is done, linear discrimination (or regression) isdone in the original feature space. It is the fastest option. \f$K(x_i, x_j) = x_i^T x_j\f$. */LINEAR=0,/** Polynomial kernel:\f$K(x_i, x_j) = (\gamma x_i^T x_j + coef0)^{degree}, \gamma > 0\f$. */POLY=1,/** Radial basis function (RBF), a good choice in most cases.\f$K(x_i, x_j) = e^{-\gamma ||x_i - x_j||^2}, \gamma > 0\f$. */RBF=2,/** Sigmoid kernel: \f$K(x_i, x_j) = \tanh(\gamma x_i^T x_j + coef0)\f$. */SIGMOID=3,/** Exponential Chi2 kernel, similar to the RBF kernel:\f$K(x_i, x_j) = e^{-\gamma \chi^2(x_i,x_j)}, \chi^2(x_i,x_j) = (x_i-x_j)^2/(x_i+x_j), \gamma > 0\f$. */CHI2=4,/** Histogram intersection kernel. A fast kernel. \f$K(x_i, x_j) = min(x_i,x_j)\f$. */INTER=5};
:SVM的内核类型(4种):
上面已经介绍过了就不再多说了 。
:指定SVM的类型(5种):
1、CvSVM::C_SVC :C类支撑向量分类机 。n类分组 (n≥2),容许用异常值处罚因子C进行不完全分类 。
【opencv——SVM参数详解】2、CvSVM:: :
类支撑向量分类机 。n类似然不完全分类的分类器 。参数为
庖代C(其值在区间【0,1】中,nu越大,决定计划鸿沟越腻滑) 。