最初理解的SVM是从最大化分类间隔提出的,直观的理解,最好的分类界面应该是使分割的类别越远越好,经过得到分类间隔转换成对偶问题,利用SMO算法解决。我理解的SVM的优点在于:html
1. 对于二分类线性可分问题能够直接分类;算法
2. 对于多分类线性可分问题能够转换成一对一的二分类问题(不能算优点)函数
3. 对于线性不可分问题经过特征映射在新的映射空间下线性可分的问题;测试
4. 对于映射到高维或者无穷维能够经过核技巧解决映射的维数灾难问题。url
基于以上优点,主要探讨了不一样的C和不一样的核函数对SVM二分类问题的影响。htm
对于惩罚因子C的做用,是用来权衡损失和分类间隔的权重,惩罚因子C越大,代表重视损失,若是C选取的很是大,那么若是有分错的样本,对其的惩罚很是大,将致使出现硬间隔的效果。不断增大C的值,总能实现将样本点彻底正确的分类,可是这样将会致使过拟合,泛化能力不够。blog
经过LibSVM自带的svm-toy能够直观的看出随着C的增大,对分类效果的影响。实验中,在考虑惩罚因子C的影响的时候,选取的核函数为RBF核,C的值依次为十、2五、50、100。get
若是在同一个问题中,对不一样的样本点用不一样的惩罚因子也是能够的。经过查阅文献看到有给定正负样本不一样的惩罚因子,这样对于若是正负样本点的数目差异比较大,能够对样本数目比较小的样本类别赋予较大的权重,不然此类样本错分的几率将增大。test
若是对于不一样的样本点赋予不一样的惩罚因子,这样从理论上来讲,应该会有更好的分类效果,分别考虑每一个样本的惩罚因子,肯定其对于错分的影响,可是这样对于复杂性又有所提升,须要单独考虑每一个样本。可是对于样本点比较少的时候,比较适合分别赋予权重,有更好的效果。技巧
关于惩罚因子C的选取是依靠经验,在LibSVM中通常取值为10或者100。
对于不一样核函数的影响,通常在SVM中用到的核函数主要有RBF核、线性核、多项式核、Sigmoid核。
核函数的重要性在于能够将无穷维的映射转换为简单的点乘,对于某一特征映射,可能将原空间映射到高维空间产生维数灾难,核函数有效的解决了这个问题。文献[5]中指出不一样核函数的选取对于分类效果有明显的差异,而文献[6]中则指出核函数的具体形式对分类效果的影响不大,对此,利用了小型数据集对不一样核函数的效果进行验证。
实验中利用了三个训练和测试集,分别为train1.txt、test1.txt、train2.txt、test2.txt、train3.txt、test3.txt,数据集的特色以下:均为二分类问题,特征维数为二维,数据集的样本数少(仅供测试)。
实验中利用LibSVM的库函数仿真的效果以下:
从实验结果中能够看出,不一样的核函数选取对于小数据集来讲,影响并不大,对于分类的正确率及精度等无明显差异,可是对于线性不可分问题则有差别,而且不一样的核函数对运算速度有必定的影响。