四 学习Opencv2.4.9---SVM支持向量机

先来看一下什么是SVM(支持向量机)
1、SVM是一种训练机器学习的算法,可以用于解决分类和回归问题,同时还使用了一种称之为 trick(支持向量机的核函数)的技术进行数据的转换,然后再根据这些转换信息,在可能的输出之中找到一个最优的边界(超平面) 。简单来说,就是做一些非常复杂的数据转换工作,然后根据预定义的标签或者输出进而计算出如何分离用户的数据 。
支持向量机方法是建立在统计学习理论的VC 维理论和结构风险最小原理基础上的,根据有限的样本信息在模型的复杂性(即对特定训练样本的学习精度,)和学习能力(即无错误地识别任意样本的能力)之间寻求最佳折衷,以期获得最好的推广能力(或称泛化能力) 。
2、支持向量机较其他传统机器学习算法的优点:
1、小样本,并不是说样本的绝对数量少(实际上,对任何算法来说,更多的样本几乎总是能带来更好的效果),而是说与问题的复杂度比起来,SVM算法要求的样本数是相对比较少的 。SVM解决问题的时候,和样本的维数是无关的(甚至样本是上万维的都可以,这使得SVM很适合用来解决文本分类的问题,当然,有这样的能力也因为引入了核函数) 。
2、结构风险最小 。(对问题真实模型的逼近与问题真实解之间的误差,就叫做风险,更严格的说,误差的累积叫做风险) 。
3、非线性,是指SVM擅长应付样本数据线性不可分的情况,主要通过松弛变量(也有人叫惩罚变量)和核函数技术来实现,这一部分是SVM的精髓 。(关于文本分类这个问题究竟是不是线性可分的,尚没有定论,因此不能简单的认为它是线性可分的而作简化处理,在水落石出之前,只好先当它是线性不可分的反正线性可分也不过是线性不可分的一种特例而已,我们向来不怕方法过于通用) 。
SVM的强大离不开一个很重要的东西--核函数:
1、为何需要核函数?
很多情况下低维空间向量集是难于划分的,解决办法是将它们映射到高维空间 。但这个办法带来的艰苦就是策画错杂度的增长,而核函数正好奇妙地解决了这个问题 。也就是说,只要选用恰当的核函数,就可以获得高维空间的分类函数(超平面) 。在SVM理论中,采取不合的核函数将导致不合的SVM算法 。在断定了核函数之后,因为断定核函数的已知数据也存在必然的误差,推敲到推广性题目,是以引入了败坏系数以及处罚系数两个参变量来加以校订 。
其实核函数的本质作用可以简练概括为:将低维空间的线性不可分类问题,借助核函数转化为高维空间的线性可分,进而可以在高维空间找到分类的最优边界(超平面) 。(下图引自July‘s 支持向量机通俗导论(理解SVM的三层境界)) 。若要要分类下图红色和蓝色样本点:

四  学习Opencv2.4.9---SVM支持向量机

文章插图

四  学习Opencv2.4.9---SVM支持向量机

文章插图
二维线性不可分 三维线性可分
2、核函数的分类
(1)线性核函数
(2)多项式核函数
(3)径向基(RBF)核函数(高斯核函数)
(4)核函数(二层神经收集核函数)
3、中的核函数定义:
CvSVM:: : 线性内核,没有任何向映射至高维空间,线性区分(或回归)在原始特点空间中被完成,这是最快的选择 。
CvSVM::POLY : 多项式内核:
CvSVM::RBF : 基于径向的函数,对于大多半景象都是一个较好的选择:
CvSVM:: : 函数内核:
中SVM参数设置:
中SVM参数设置使用方法定义如下:
::(int ,
int ,