SVM分类中的特征选择-怪异行为

Feature selection in SVM classification-Weird behaviour

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

5:  1.765716
2:  1.413180
1:  1.320096
6:  1.103449
8:  0.790712
3:  0.734230
7:  0.698571
4:  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 个特征已经没有效果了。 (在汽车示例中,这可能是诸如汽车有多脏、轮胎上剩余胎面的数量、收音机调谐到的频道等特征)。