2016-08-15 5 views
0

Ich verwende das UCI ML-Brustkrebs-Dataset, um einen Klassifizierer mit SVMs zu erstellen. Ich verwende LIBSVM und das Skript fselect.py zur Berechnung von f-Scores für die Featureauswahl. Meine Daten-Set verfügt über 8 Funktionen und die Noten für sie sind folgende:Feature-Auswahl in der SVM-Klassifizierung-Eigenartiges Verhalten

5: 1.765716 
2: 1.413180 
1: 1.320096 
6: 1.103449 
8: 0.790712 
3: 0.734230 
7: 0.698571 
4: 0.580819 

Dies bedeutet, dass das fünfte Merkmal der meisten unterscheidenden ist, und 4. ist die am wenigsten. Mein nächstes Stück Code sieht in etwa wie folgt aus:

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'); 

Hinweis: Gamma und C wurden unter Verwendung von Rastersuche berechnet und x ist die komplette Matrix mit 8 Spalten (entsprechend 8 Funktionen)

Wenn ich das Drucken errors2 Matrix, erhalte ich die folgende Ausgabe:

errors2 = 

    88.416 
    92.229 
    93.109 
    94.135 
    94.282 
    94.575 
    94.575 

das bedeutet, dass ich die Genauigkeit, wenn ich alle Funktionen nutzen und die geringste Genauigkeit, wenn ich das unterscheidende Merkmal verwenden. Soweit ich weiß, sollte ich die größte Genauigkeit erreichen, wenn ich eine Untermenge von Merkmalen verwende, die die am meisten diskriminierenden enthalten. Warum verhält sich das Programm dann so? Kann jemand auf Fehler hinweisen, die ich gemacht habe? (Meine Intuition sagt, dass ich das C falsch berechnet habe, da es so klein ist).

+0

auch nicht fälschen, um grundlegende Datenanalyse zu tun, um zu sehen, in welchen Zeilen Ihr Modell schlechte Ergebnisse gibt. Versuchen Sie, Muster in diesen Zeilen zu sehen und Variablen mit diesem Muster zu erstellen. – abhiieor

+0

Hey, kannst du deine letzte Aussage erklären? Wie erkenne ich Muster? Also sollte ich meinen Klassifikator in jeder Zeile der (Trainings-?) Daten testen und sehen, welche Zeilen schlechte Ergebnisse liefern? –

+0

Ich meinte in Ihrem Klassifikator, wenn es eine Fehlklassifikation gibt, dann versuchen Sie zu sehen, wie schlecht diese Fehlklassifikation ist. Es wird erwartet, dass Klasse 1 für einen bestimmten Datensatz erwartet wird, aber die Wahrscheinlichkeit für Klasse 1 mit 0,1 ist sehr schlecht, verglichen mit der Wahrscheinlichkeit 0,4 (wenn der Schwellenwert standardmäßig 0,5 ist). Suchen Sie also nach solchen Fehlklassifizierungsfällen und versuchen Sie darüber nachzudenken, was mit denen falsch gelaufen sein könnte. – abhiieor

Antwort

1

Die Fehlerraten, die Sie erhalten, sind wie erwartet. Das Hinzufügen einer zusätzlichen Funktion sollte die Fehlerrate verringern, da Sie mehr Informationen haben.

Als Beispiel, versuchen Sie herauszufinden, welches Modell ein Auto ist. Das unterscheidendste Merkmal ist wahrscheinlich der Hersteller, aber das Hinzufügen von Merkmalen wie Motorgröße, Höhe, Breite, Länge, Gewicht usw. wird es weiter eingrenzen.

Wenn Sie viele Funktionen in Betracht ziehen, von denen einige eine sehr geringe Unterscheidungskraft haben, könnten Sie Probleme mit der Überanpassung Ihrer Trainingsdaten bekommen. Hier haben Sie nur 8 Funktionen, aber es sieht so aus, als ob das Hinzufügen der 8. Funktion keine Auswirkungen hat. (Im Auto-Beispiel könnten dies Merkmale sein, wie z. B. wie schmutzig das Auto ist, wie viel Lauffläche noch auf den Reifen ist, auf welchen Kanal das Radio eingestellt ist usw.).

+0

Können Sie mir Vorschläge machen, wie Sie die Genauigkeit des Klassifikators verbessern können? Ich strebe mindestens 98% an. –

+0

Sie könnten versuchen, einen Polynom-Kernel zu verwenden – Richard

Verwandte Themen