在前面的博客中,我们已经详细讲述过了,什么是过拟合问题。
过拟合(overfitting)表现为模型在训练集上预测效果好,在测试集上预测效果差。
数据中的异常点会导致过拟合,这些异常点,严重偏离正常位置。
在SVM中,最优分类超平面恰恰是那些占少数的支持向量,如果支持向量中碰巧存在异常点,那么我们傻傻地让SVM去拟合这样的数据,最后的超平面就不是最优的了。
具体例子:(参考:https://www.jianshu.com/p/9b03cac58966)
如下图所示,深红色线表示我们希望训练得到的最优分类超平面,黑色虚线表示由于过拟合得到的较差的分类面。这是由于蓝色数据中有一个异常点,即图中的那个黑圈蓝点,使得我们的SVM去将就配合它,导致最后得到的分类面(粗黑色虚线)不尽如人意。从间隔可以看出,黑色虚线两边的间隔要比红色线两边的间隔要狭窄,也就是黑色虚线的分类效果比较差。
解决过拟合的办法是为SVM引入了松弛变量ξ(slack variable),将SVM公式的约束条件改为:
从下可以看到,引入松弛变量使SVM能够容忍异常点的存在。
为什么?
因为引入松弛变量后,所有点到超平面的距离约束不需要大于等于1了,而是大于0.8就行了(如果ξ=0.2的话),那么异常点就可以不是支持向量了,它就作为一个普通的点存在,我们的支持向量和超平面都不会受到它的影响。
我们知道,事物都有两面性,对异常点太容忍会导致任意超平面都可以是“最优”超平面,SVM就失去意义了。因此SVM公式中的目标函数也需要相应修改,我们加上松弛变量的平方和,并求最小值。这样就达到一个平衡:既希望松弛变量存在以解决异常点问题,又不希望松弛变量太大导致分类解决太差。
总结:svm中解决过拟合问题.
(1)数据扩增(前面说过)
(2)减少特征维度,维度太高,进行降维
(3)引入松弛变量,SVM特有的(类似于正则化?还在研究中。。。)
注:SVM中还有很多知识需要学习,一点一点啃。
以上内容,如有错误,望留言指正。
引用和参考:
https://www.jianshu.com/p/9b03cac58966
http://www.blogjava.net/zhenandaci/archive/2009/03/15/259786.html
https://www.zhihu.com/question/20178589
https://www.zhihu.com/question/30230784
仅用来个人学习和分享,如若侵权,留言立删。
尊重他人知识产权,不做拿来主义者!
喜欢的可以关注我哦QAQ,
你的关注就是我write博文的动力。