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?
Die Vorhersage-Methode für LinearSVC
in sklearn sieht folgendermaßen aus
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.
Sie können die Entscheidungsgrenze auf Ihre Bedürfnisse hin optimieren.
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:
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.
Tags und Links python scikit-learn svm