Ich versuche, meinen SVM-Algorithmus mit Daten von Klicks und Conversions von Leuten zu vermitteln, die die Banner sehen. Das Hauptproblem ist, dass die Klicks etwa 0,2% aller Daten ausmachen, also ist es ein großes Missverhältnis. Wenn ich einfache SVM in der Testphase benutze, wird immer nur die Klasse "view" vorhergesagt und niemals "click" oder "conversion". Im Durchschnitt gibt es 99,8% richtige Antworten (wegen Unverhältnismäßigkeit), aber es gibt 0% richtige Vorhersage, wenn Sie "Klick" oder "Umwandlung" überprüfen. Wie können Sie den SVM-Algorithmus abstimmen (oder einen anderen auswählen), um das Missverhältnis zu berücksichtigen?
Der einfachste Ansatz besteht darin, ein sogenanntes "class weighting scheme" zu verwenden - in der klassischen SVM-Formulierung gibt es einen C
-Parameter, der zur Steuerung der Fehlklassifizierungszählung verwendet wird. Er kann in die Parameter C1
und C2
geändert werden, die für Klasse 1 bzw. 2 verwendet werden. Die häufigste Wahl von C1
und C2
für eine gegebene C
ist
wobei n1
und n2
Größen der Klasse 1 bzw. 2 sind. Sie "bestrafen" SVM für das Fehlklassifizieren der weniger häufigen Klasse viel schwieriger als für die Fehlklassifikation am häufigsten.
Viele vorhandene Bibliotheken (wie libSVM ) unterstützen diesen Mechanismus mit class_weight-Parametern.
Beispiel mit Python und sklearn
%Vor% Insbesondere können Sie in sklearn einfach die automatische Gewichtung aktivieren, indem Sie class_weight='auto'
setzen.
Tags und Links machine-learning scikit-learn svm supervised-learning