【发布时间】:2016-12-21 21:49:15
【问题描述】:
我正在使用 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,因为它太小了)。
【问题讨论】:
-
也不要伪造进行基本数据分析以查看您的模型在哪些行中给出了不好的结果。尝试查看这些行中的模式并使用该模式创建变量
-
您好,您能解释一下您最后的陈述吗?我如何识别模式?所以,我应该在(训练?)数据的每一行上测试我的分类器,看看哪些行给出了不好的结果?
-
我的意思是在您的分类器中,如果有任何错误分类,那么请尝试查看错误分类的严重程度。与概率 0.4 相比(如果阈值默认为 0.5),期望某些记录为 1 类但获得 1 类概率 0.1 非常糟糕。因此,请查找此类错误分类案例,并尝试思考这些案例可能出了什么问题。
标签: machine-learning classification svm feature-selection