opencv——SVM参数详解( 二 )


3、CvSVM:: :单分类器,所有的练习数据提取自同一个类里,然后SVM建树了一个分界线以分别该类在特点空间中所占区域和其它类在特点空间中所占区域 。
4、CvSVM:: :
类支撑向量回归机 。练习集中的特点向量和拟合出来的超平面的间隔须要小于p 。异常值处罚因子C被采取 。
5、CvSVM:: :
类支撑向量回归机 。
庖代了 p 。
:内核函数(POLY)的参数 。
gamma:内核函数(POLY/ RBF/ )的参数

coef0:内核函数(POLY/ )的参数coef0 。
:SVM类型(C_SVC/ / )的参数C 。
nu:SVM类型(/ / )的参数

p:SVM类型()的参数

:C_SVC中的可选权重,赋给指定的类,乘以C今后变成
。所以这些权重影响不合类此外错误分类处罚项 。权重越大,某一类此外误分类数据的处罚项就越大 。
:SVM的迭代练习过程的中断前提,解决项目组受束缚二次最优题目 。您可以指定的公差和/或最大迭代次数 。
(1)获得练习样本及制作其类别标签(,)
(2)设置练习参数()
(3)对SVM进行训练(SVM::train)
(4)对新的输入样本进行猜测(SVM::),并输出结果类型(对应标签)
目前,构造SVM多类分类器的方法主要有两类:一类是直接法,直接在目标函数上进行修改,将多个分类面的参数求解合并到一个最优化问题中,通过求解该最优化问题“一次性”实现多类分类 。这种方法看似简单,但其计算复杂度比较高,实现起来比较困难,只适合用于小型问题中;另一类是间接法,主要是通过组合多个二分类器来实现多分类器的构造,常见的方法有one--one和one--all两种 。
1、一对多法(one--rest,简称) 。训练时依次把某个类别的样本归为一类,其他剩余的样本归为另一类,这样k个类别的样本就构造出了k个SVM 。分类时将未知样本分类为具有最大分类函数值的那类 。
假如我有四类要划分(也就是4个Label),他们是A、B、C、D 。于是我在抽取训练集的时候,分别抽取A所对应的向量作为正集,B,C,D所对应的向量作为负集;B所对应的向量作为正集,A,C,D所对应的向量作为负集;C所对应的向量作为正集,A,B,D所对应的向量作为负集;D所对应的向量作为正集,A,B,C所对应的向量作为负集,这四个训练集分别进行训练,然后的得到四个训练结果文件,在测试的时候,把对应的测试向量分别利用这四个训练结果文件进行测试,最后每个测试都有一个结果f1(x),f2(x),f3(x),f4(x).于是最终的结果便是这四个值中最大的一个 。
PS:这种方法有种缺陷,因为训练集是1:M,这种情况下存在偏差.因而不是很实用.
2、一对一法(one--one,简称或者) 。其做法是在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM 。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别 。中的多类分类就是根据这个方法实现的 。
还是假设有四类A,B,C,D四类 。在训练的时候我选择A,B;A,C; A,D; B,C;B,D;C,D所对应的向量作为训练集,然后得到六个训练结果,在测试的时候,把对应的向量分别对六个结果进行测试,然后采取投票形式,最后得到一组结果 。
3、层次支持向量机(H-SVMs) 。层次分类法首先将所有类别分成两个子类,再将子类进一步划分成两个次级子类,如此循环,直到得到一个单独的类别为止 。
4、DAG-SVMS是由Platt提出的决策导向的循环图DDAG导出的,是针对“一对一”SVMS存在误分、拒分现象提出的 。
这里仅仅是对几种多分类方法的简要说明,如果直接调用的方法,并不需要关心多分类算法的具体实现,来看看下面的例子: