使用svm的一个常见错误

http://blog.sina.com.cn/s/blog_6ae183910101cxbv.html

几天前,我在微博上面问了一个问题“一个两类分类问题,5400个训练样本,600个测试样本(测试、训练样本不交叠),特征10000维,用RBF核的SVM训练,得到的模型在测试集上测试误差为50%(和随机猜想一样)。而如果改用线性核,则准确率可以达到80%。这正常吗?”


包括余凯、老师木、山世光在内的很多大牛都热情回答,在此一并感谢,就不一一点名啦。

大家的讨论,从RBF核的特点、特征空间分布、高维几何反直觉一直到人脑的处理方式,让人眼花缭乱,同时也受益匪浅。

最终证明,这其实是我在使用RBF Gamma参数时设置不当造成的过训练。我的修改和结果如下:我将每一个样本的特征向量都做了L2归一化(此时,gamma的取值在1附近,对性能影响不大),RBF特征可以得到86%的准确率。未作归一化的线性核结果可以达到84%(相对发微博时的版本,特征上面有所调整,所以线性核性能有所提高,此外,L2会造成不同样本同一特征的相对值改变,所以线性版本未用L2归一化)。

这里面大家需要注意的就是gamma的物理意义,大家提到很多的RBF的幅宽,它会影响每个支持向量对应的高斯的作用范围,从而影响泛化性能。我的理解:如果设的太大,则会造成只会作用于支持向量样本附近,对于未知样本分类效果很差,存在训练准确率可以很高,而测试准确率不高的可能,就是通常说的过训练;而如果设的过小,则会造成平滑效应太大,无法在训练集上得到特别高的准确率,也会影响测试集的准确率。
此外大家注意RBF公式里面的sigma和gamma的关系如下:
The rbf kernel is typically defined as k(x,z) = exp(-(d(x,z)^2)/(2*sigma^2)), which can be re-defined in terms of gamma as k(x,z) = exp(-gamma*(d(x,z)^2)), where gamma = 1/(2*sigma^2). 

此外,可以明确的两个结论是:
结论1:样本数目少于特征维度并不一定会导致过拟合,这可以参考余凯老师的这句评论:
这不是原因啊,呵呵。用RBF kernel, 系统的dimension实际上不超过样本数,与特征维数没有一个trivial的关系。

结论2:RBF核应该可以得到与线性核相近的效果(按照理论,RBF核可以模拟线性核),可能好于线性核,也可能差于,但是,不应该相差太多。
当然,很多问题中,比如维度过高,或者样本海量的情况下,大家更倾向于用线性核,因为效果相当,但是在速度和模型大小方面,线性核会有更好的表现。

老师木还有一句评论,可以加深初学者对SVM的理解:
须知rbf实际是记忆了若干样例,在sv中各维权重重要性等同。线性核学出的权重是feature weighting作用或特征选择 。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值