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).
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
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? –
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