关于惩罚因子和核函数的思考
2017-10-10 00:00
190 查看
最初理解的SVM是从最大化分类间隔提出的,直观的理解,最好的分类界面应该是使分割的类别越远越好,通过获得分类间隔转换成对偶问题,利用SMO算法解决。我理解的SVM的优势在于:
1. 对于二分类线性可分问题可以直接分类;
2. 对于多分类线性可分问题可以转换成一对一的二分类问题(不能算优势)
3. 对于线性不可分问题通过特征映射在新的映射空间下线性可分的问题;
4. 对于映射到高维或者无穷维可以通过核技巧解决映射的维数灾难问题。
基于以上优势,主要探讨了不同的C和不同的核函数对SVM二分类问题的影响。
对于惩罚因子C的作用,是用来权衡损失和分类间隔的权重,惩罚因子C越大,表明重视损失,如果C选取的非常大,那么如果有分错的样本,对其的惩罚非常大,将导致出现硬间隔的效果。不断增大C的值,总能实现将样本点完全正确的分类,但是这样将会导致过拟合,泛化能力不够。
通过LibSVM自带的svm-toy可以直观的看出随着C的增大,对分类效果的影响。实验中,在考虑惩罚因子C的影响的时候,选取的核函数为RBF核,C的值依次为10、25、50、100。
如果在同一个问题中,对不同的样本点用不同的惩罚因子也是可以的。通过查阅文献看到有给定正负样本不同的惩罚因子,这样对于如果正负样本点的数目差别比较大,可以对样本数目比较小的样本类别赋予较大的权重,否则此类样本错分的概率将增大。
如果对于不同的样本点赋予不同的惩罚因子,这样从理论上来说,应该会有更好的分类效果,分别考虑每个样本的惩罚因子,确定其对于错分的影响,但是这样对于复杂性又有所提高,需要单独考虑每个样本。但是对于样本点比较少的时候,比较适合分别赋予权重,有更好的效果。
关于惩罚因子C的选取是依靠经验,在LibSVM中一般取值为10或者100。
对于不同核函数的影响,一般在SVM中用到的核函数主要有RBF核、线性核、多项式核、Sigmoid核。
核函数的重要性在于可以将无穷维的映射转换为简单的点乘,对于某一特征映射,可能将原空间映射到高维空间产生维数灾难,核函数有效的解决了这个问题。文献[5]中指出不同核函数的选取对于分类效果有明显的差别,而文献[6]中则指出核函数的具体形式对分类效果的影响不大,对此,利用了小型数据集对不同核函数的效果进行验证。
实验中利用了三个训练和测试集,分别为train1.txt、test1.txt、train2.txt、test2.txt、train3.txt、test3.txt,数据集的特点如下:均为二分类问题,特征维数为二维,数据集的样本数少(仅供测试)。
实验中利用LibSVM的库函数仿真的效果如下:
从实验结果中可以看出,不同的核函数选取对于小数据集来说,影响并不大,对于分类的正确率及精度等无明显差别,但是对于线性不可分问题则有差异,并且不同的核函数对运算速度有一定的影响。
1. 对于二分类线性可分问题可以直接分类;
2. 对于多分类线性可分问题可以转换成一对一的二分类问题(不能算优势)
3. 对于线性不可分问题通过特征映射在新的映射空间下线性可分的问题;
4. 对于映射到高维或者无穷维可以通过核技巧解决映射的维数灾难问题。
基于以上优势,主要探讨了不同的C和不同的核函数对SVM二分类问题的影响。
对于惩罚因子C的作用,是用来权衡损失和分类间隔的权重,惩罚因子C越大,表明重视损失,如果C选取的非常大,那么如果有分错的样本,对其的惩罚非常大,将导致出现硬间隔的效果。不断增大C的值,总能实现将样本点完全正确的分类,但是这样将会导致过拟合,泛化能力不够。
通过LibSVM自带的svm-toy可以直观的看出随着C的增大,对分类效果的影响。实验中,在考虑惩罚因子C的影响的时候,选取的核函数为RBF核,C的值依次为10、25、50、100。
如果在同一个问题中,对不同的样本点用不同的惩罚因子也是可以的。通过查阅文献看到有给定正负样本不同的惩罚因子,这样对于如果正负样本点的数目差别比较大,可以对样本数目比较小的样本类别赋予较大的权重,否则此类样本错分的概率将增大。
如果对于不同的样本点赋予不同的惩罚因子,这样从理论上来说,应该会有更好的分类效果,分别考虑每个样本的惩罚因子,确定其对于错分的影响,但是这样对于复杂性又有所提高,需要单独考虑每个样本。但是对于样本点比较少的时候,比较适合分别赋予权重,有更好的效果。
关于惩罚因子C的选取是依靠经验,在LibSVM中一般取值为10或者100。
对于不同核函数的影响,一般在SVM中用到的核函数主要有RBF核、线性核、多项式核、Sigmoid核。
核函数的重要性在于可以将无穷维的映射转换为简单的点乘,对于某一特征映射,可能将原空间映射到高维空间产生维数灾难,核函数有效的解决了这个问题。文献[5]中指出不同核函数的选取对于分类效果有明显的差别,而文献[6]中则指出核函数的具体形式对分类效果的影响不大,对此,利用了小型数据集对不同核函数的效果进行验证。
实验中利用了三个训练和测试集,分别为train1.txt、test1.txt、train2.txt、test2.txt、train3.txt、test3.txt,数据集的特点如下:均为二分类问题,特征维数为二维,数据集的样本数少(仅供测试)。
实验中利用LibSVM的库函数仿真的效果如下:
从实验结果中可以看出,不同的核函数选取对于小数据集来说,影响并不大,对于分类的正确率及精度等无明显差别,但是对于线性不可分问题则有差异,并且不同的核函数对运算速度有一定的影响。
相关文章推荐
- 关于核函数的一些思考
- SVM学习(续)核函数 & 松弛变量和惩罚因子
- 关于惩罚因子C
- 关于核函数和SVM的几点思考
- 关于职业的一点忧虑和思考
- 关于方法名是否可以很详细的思考
- 关于编程能力的思考
- 关于产品的一些思考——四季凯芯之问我
- 关于布局设计器的思考
- 关于原码,反码,补码和左右移位的若干思考
- 关于工作和读研的思考
- 关于掉电保存数据的思考
- 关于项目关键人物的一点思考
- [体感游戏]关于体感游戏的一些思考(七) --- “我是泰山,你是简?”
- 关于大型网站技术演进的思考(八)--存储的瓶颈终篇(8)
- 关于“用户调研”几点小思考
- 关于返回引用的思考
- 【引用】——关于Pad设计的思考——
- 关于工作日历的思考
- 关于数据加载的一些思考