2016-08-15 48 views
0

我正在使用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錯了,因爲它太小了)。

+0

也不要僞造基本的數據分析來查看你的模型在哪些行中給出了不好的結果。嘗試在這些行中查看模式並使用該模式創建變量 – abhiieor

+0

嘿,你能解釋一下你最後的陳述嗎?我如何識別模式?因此,我應該在(training?)數據的每一行上測試我的分類器,並查看哪些行會給出不好的結果? –

+0

我的意思是在你的分類器中是否存在任何錯誤分類,然後嘗試查看錯誤分類有多糟糕。對於某些記錄,期望1級,但獲得1級概率0.1非常差,與概率0.4相比非常差(如果閾值爲默認值0.5)。因此,尋找這樣的錯誤分類案例,並試着去思考那些可能出錯的案例。 – abhiieor

回答

1

您所得到的錯誤率與預期的一樣。增加一個額外的功能應該可以降低錯誤率,因爲你有更多的信息。

作爲一個例子,考慮試着找出一輛車是什麼車型。最具歧視性的特徵可能是製造商,但增加諸如發動機尺寸,高度,寬度,長度,重量等特徵將進一步縮小它的範圍。

如果您正在考慮很多功能,其中一些可能具有非常低的區分能力,您可能會遇到過度訓練數據的問題。在這裏你只有8個功能,但它已經看起來像添加第8個功能沒有效果。 (在汽車的例子中,這可能是一些特徵,例如車的髒污程度,輪胎上殘留的胎面數量,收音機調諧的頻道等)。

+0

你可以建議我一些方法來改善分類器的準確性嗎?我的目標至少是98%。 –

+0

您可以嘗試使用多項式內核 – Richard