我正在使用UCI ML乳腺癌數據集來構建使用SVM的分類器。我使用LIBSVM和它的fselect.py腳本來計算特徵選擇的f分數。我的數據集有8個功能,其評分如下:SVM分類中的特徵選擇 - 奇怪行爲
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');
注:伽瑪和C採用網格搜索計算,x是8列(對應8個功能部件)
當我打印出完整的矩陣errors2矩陣,我得到下面的輸出:
errors2 =
88.416
92.229
93.109
94.135
94.282
94.575
94.575
這意味着我得到的最準確,當我使用所有的功能和拿得最少的準確性時,我用最挑剔的功能。據我所知,當我使用包含最具辨別性特徵的子集時,我應該獲得最高精度。爲什麼程序這樣呢?有人能指出我可能犯的任何錯誤嗎? (我的直覺說我已經計算出C錯了,因爲它太小了)。
也不要僞造基本的數據分析來查看你的模型在哪些行中給出了不好的結果。嘗試在這些行中查看模式並使用該模式創建變量 – abhiieor
嘿,你能解釋一下你最後的陳述嗎?我如何識別模式?因此,我應該在(training?)數據的每一行上測試我的分類器,並查看哪些行會給出不好的結果? –
我的意思是在你的分類器中是否存在任何錯誤分類,然後嘗試查看錯誤分類有多糟糕。對於某些記錄,期望1級,但獲得1級概率0.1非常差,與概率0.4相比非常差(如果閾值爲默認值0.5)。因此,尋找這樣的錯誤分類案例,並試着去思考那些可能出錯的案例。 – abhiieor