libsvm中如何做特征选择

来源:互联网 发布:esp8266连接单片机 编辑:程序博客网 时间:2024/05/12 23:31

上一篇论文被审稿人说特征选择是在交叉验证的外部做的,存在过拟合的问题。所以这一次花了几天的时间弄清楚了交叉验证,libsvm和特征选择三者的关系。

首先libsvm内部是不包含特征选择的。libsvm的model.SV参数是把特征进行了一个区域的标准化,把所有的特征都压缩到一个范围内(默认的应该是[1,-1])。并不是每个样本特征的权重值。在2006年林林智仁教授的一篇文章中对于如何把libsvm和特征选择方法结合起来有了些了解。(本文的方法和图片都摘自这篇文章)1

文章中涉及到的特征选择的方法个人感觉是Embedded方法大类,除此之外还有Filter方法大类和Wrapper方法大类。文中介绍了三种方法F-scroe+SVM,F-score+RF+SVM,RF+RM-SVM。

1、F-score+SVM方法

算F值选取几个肉眼可见区别的F值域,然后分别去掉超出域的特征;把数据随机分成训练集合和验证集合,对每个subfeatures训练svm,之后再检验,重复五次,得到一个平均正确率值;进行比较得到最好的一个作为整个实验的特征选择程序;再用确定好的特征训练svm模型,来预测。

2、F-score+RF+SVM方法

这个方法是说随机森林除了可以做分类以外,也可以提供特征的重要程度。但是RF方法不能处理太多的特征,因此在使用RF之前需要按照第一个方法用F-score先做一下预筛选(感觉这个方法太拖沓了,做两次特征的筛选)。

参考上一个方法得到subfeatures;用RF来对所有训练集合进行处理得到特征子集的排序(how?之后再查);用RF来做5重交叉验证;之后去掉一半的不是特别重要的特征,然后重复上一步,这样循环,直到特征的数量很少了为止(什么算少?并没有给出具体值啊);上面这两步循环很多次,最后选取正确率最高的对应的特征值为准。

3、RF+RM-SVM方法

这个方法认为RBF核可以自己进行特征的筛选,因此通过最小化特征的泛化误差来得到特征的重要程度,然后用loo,之后一个平滑的函数来约束边缘,称为radius margin (RM),因此这个方法称为RM-SVM。在做之前需要RF方法进行预筛选。所以这个方法不能用于特征特别多的预测,因此作者在实现的时候只在最后一个样本上进行了实现。

之后是一个各种方法实现的错误率(BER)对比的表:


样本特征情况


这是作者参加一个NIPS的比赛做的,林教授最后是第三名,这是他的结果和第一名结果的对比图:


对此表我有两个疑问,之后再查一下。1、Score,Feat,Probe是如何计算的?2、正确率这么高真的好么,给大神跪了,是我之前做的太渣,还是有特殊的优化方法?

另外,抛开这篇文章,由于libsvm的SVMtrain如果加上了-v 5,那得到的就只是一个正确率值。如果是用五重交叉验证的正确率值作为模型好坏的评判标准,那如何画ROC,中间的数据又没有给出,还是说要向F-score+SVM方法中的,随机分成两份,一份预测模型,另外一份来做ROC,ACC?

这些问题先记录下来,慢慢查。第一篇CSDN博文,个人学习的记录。哪里错了,看到的大神望指点一下。

参考文献:

Chen Y W, Lin C J. Combining SVMs with various feature selection strategies[M]//Feature extraction. Springer Berlin Heidelberg, 2006: 315-324.

0 0
原创粉丝点击