SVM分类中的特征选择 – 奇怪的行为

我使用UCI ML乳腺癌数据集来构建基于SVM的分类器。我使用的是LIBSVM及其fselect.py脚本来计算特征选择的F分数。我的数据集有8个特征,它们的分数如下:

5:  1.7657162:  1.4131801:  1.3200966:  1.1034498:  0.7907123:  0.7342307:  0.6985714:  0.580819

这意味着第5个特征是最具区分性的,而第4个特征是最不具区分性的。我接下来的代码大致如下:

x1=x(:,5);x2=x(:,[5,2]);      x3=x(:,[5,2,6]);    x4=x(:,[5,2,6,8]);x5=x(:,[5,2,6,8,3]);x6=x(:,[5,2,6,8,3,7]);x7=x(:,[5,2,6,8,3,7,4]);errors2=zeros(7,1);errors2(1)=svmtrain(y,x1,'-s 0 -t 2 -c 0.062500 -g 0.0039062 -v 10');errors2(2)=svmtrain(y,x2,'-s 0 -t 2 -c 0.062500 -g 0.0039062 -v 10');errors2(3)=svmtrain(y,x3,'-s 0 -t 2 -c 0.062500 -g 0.0039062 -v 10');errors2(4)=svmtrain(y,x4,'-s 0 -t 2 -c 0.062500 -g 0.0039062 -v 10');errors2(5)=svmtrain(y,x5,'-s 0 -t 2 -c 0.062500 -g 0.0039062 -v 10');errors2(6)=svmtrain(y,x6,'-s 0 -t 2 -c 0.062500 -g 0.0039062 -v 10');errors2(7)=svmtrain(y,x7,'-s 0 -t 2 -c 0.062500 -g 0.0039062 -v 10');

注意:gamma和C是通过网格搜索计算得出的,x是包含8列(对应8个特征)的完整矩阵

当我打印errors2矩阵时,我得到以下输出:

errors2 =   88.416   92.229   93.109   94.135   94.282   94.575   94.575

这意味着当我使用所有特征时准确率最高,而当我只使用最具区分性的特征时准确率最低。据我所知,我应该在使用包含最具区分性的特征的子集时获得最高的准确率。那么为什么程序会这样表现呢?有人能指出我可能犯的任何错误吗?(我的直觉告诉我,我可能计算错了C,因为它太小了)。


回答:

你得到的错误率是可以预期的。添加额外的特征应该会降低错误率,因为你有了更多的信息。

举个例子,假设你要确定一辆车的型号。最具区分性的特征可能是制造商,但添加诸如发动机尺寸、高度、宽度、长度、重量等特征会进一步缩小范围。

如果你考虑了很多特征,其中一些可能具有非常低的区分能力,你可能会遇到过拟合训练数据的问题。在这里你只有8个特征,但看起来添加第8个特征已经没有效果了。(在汽车的例子中,这可能包括诸如车辆的脏污程度、轮胎剩余胎面深度、收音机调到的频道等特征)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注