Scikit: Berechnung der Präzision und des Recalls mit der Funktion cross_val_score

8

Ich benutze Scikit, um eine logistische Regression auf Spam / Ham-Daten durchzuführen. X_train ist meine Trainingsdaten und y_train die Etiketten ('spam' oder 'ham') und ich habe meine LogisticRegression so trainiert:

%Vor%

Wenn ich die Genauigkeiten für eine 10-fache Kreuzvalidierung erhalten möchte, schreibe ich einfach:

%Vor%

Ich dachte, es wäre möglich, auch die Genauigkeiten und Rückrufe zu berechnen, indem man einfach einen Parameter auf diese Weise hinzufügt:

%Vor%

Aber es ergibt sich ein ValueError :

%Vor%

Handelt es sich um die Daten (sollte ich die Etiketten binarisieren?) oder ändern sie die Funktion cross_val_score ?

Vielen Dank im Voraus!

    
Anil Narassiguin 08.12.2014, 11:34
quelle

4 Antworten

8

Um den Abruf und die Genauigkeit zu berechnen, müssen die Daten in der Tat binärisiert werden:

%Vor%

Um weiter zu gehen, war ich überrascht, dass ich die Daten nicht binarisieren musste, wenn ich die Genauigkeit berechnen wollte:

%Vor%

Nur weil die Genauigkeitsformel nicht wirklich Informationen darüber benötigt, welche Klasse als positiv oder negativ betrachtet wird: (TP + TN) / (TP + TN + FN + FP). Wir können tatsächlich sehen, dass TP und TN austauschbar sind, das gilt nicht für Rückruf, Präzision und f1.

    
Anil Narassiguin 09.12.2014, 13:01
quelle
1

Die oben gezeigte Syntax ist korrekt. Sieht aus wie ein Problem mit den Daten, die Sie verwenden. Die Beschriftungen müssen nicht binarisiert werden, solange sie keine fortlaufenden Zahlen sind.

Sie können die gleiche Syntax mit einem anderen Datensatz nachweisen:

%Vor%     
Jeff G 08.12.2014 18:29
quelle
1

Ich habe hier das selbe Problem gefunden, und ich habe es mit

gelöst %Vor%     
Xiangru Lian 04.05.2015 08:46
quelle
0

Sie können eine Kreuzvalidierung wie diese verwenden, um den f1-Score zu erhalten und sich zu erinnern:

%Vor%

für weitere Scoring-Parameter siehe die Seite

    
Zero 13.05.2016 08:13
quelle