Wie kann man die False-Positive-Rate einer linearen SVM korrigieren?

8

Ich bin ein SVM-Neuling und das ist mein Anwendungsfall: Ich habe viele unsymmetrische Daten, die mit einer linearen SVM binär klassifiziert werden sollen. Ich muss die Rate falscher positiver Werte auf bestimmte Werte festlegen und die entsprechenden falschen negativen Werte für jeden Wert messen. Ich verwende so etwas wie den folgenden Code, der die Implementierung von scikit-learn svm nutzt:

%Vor%

Gibt es eine Möglichkeit, mit einem Parameter (oder einigen Parametern) des Klassifikators so zu spielen, dass man die Messmetriken effektiv fixiert?

    
Rabih Kodeih 29.01.2014, 02:23
quelle

2 Antworten

9

Die Vorhersage-Methode für LinearSVC in sklearn sieht folgendermaßen aus

%Vor%

Also zusätzlich zu dem, was mbatchkarov vorgeschlagen hat, können Sie die Entscheidungen des Klassifikators (jeder Klassifikator wirklich) ändern, indem Sie die Grenze ändern, bei der der Klassifikator sagt, dass etwas von der einen oder anderen Klasse ist.

%Vor%

Sie können die Entscheidungsgrenze auf Ihre Bedürfnisse hin optimieren.

    
Matti Lyra 29.01.2014, 11:08
quelle
14

Mit dem Parameter class_weights können Sie diese falsch positive Rate nach oben oder unten verschieben. Lassen Sie mich anhand eines alltäglichen Beispiels veranschaulichen, wie das funktioniert. Angenommen, Sie besitzen einen Nachtclub und arbeiten unter zwei Bedingungen:

  1. Sie möchten, dass so viele Menschen wie möglich in den Club eintreten (zahlende Kunden)
  2. Du willst keine minderjährigen Leute, da dies dich in Schwierigkeiten mit dem Staat bringen wird

An einem durchschnittlichen Tag werden (sagen wir) nur 5% der Leute, die versuchen in den Club einzutreten, minderjährig sein. Sie stehen vor der Wahl: nachsichtig zu sein oder streng zu sein. Ersteres wird Ihre Gewinne um bis zu 5% steigern, aber Sie riskieren eine kostspielige Klage. Letzteres wird unweigerlich dazu führen, dass einigen Personen, die knapp über dem gesetzlichen Mindestalter sind, die Einreise verweigert wird, was auch Geld kostet. Sie möchten relative cost der Nachsicht vs Striktheit anpassen. Hinweis: Sie können nicht direkt steuern, wie viele minderjährige Personen den Club betreten, aber Sie können kontrollieren, wie streng Ihre Türsteher sind.

Hier ist ein bisschen Python, das zeigt, was passiert, wenn Sie die relative Wichtigkeit ändern.

%Vor%

Welche Ausgänge

%Vor%

Beachten Sie, dass die Anzahl der Datenpunkte, die als 0 eingestuft werden, das relative Gewicht der Klasse 1 ist. Angenommen, Sie haben die Rechenressourcen und die Zeit, um 10 Klassifikatoren zu trainieren und zu bewerten, können Sie die Präzision und den Abruf jedes einzelnen berechnen und eine Zahl wie die folgende erhalten (schamlos aus dem Internet gestohlen). Sie können dann verwenden, um zu entscheiden, was der richtige Wert von class_weights für Ihren Anwendungsfall ist.

    
mbatchkarov 29.01.2014 10:29
quelle

Tags und Links