Wie soll ich maschinellen Lernalgorithmus unterrichten, der Daten mit großen Unverhältnismäßigkeiten von Klassen verwendet? (SVM)

7

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?

    
rvnikita 06.08.2013, 10:49
quelle

2 Antworten

24

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

%Vor%

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.

    
lejlot 06.08.2013, 18:47
quelle
1

Dieser Artikel beschreibt eine Vielzahl von Techniken. Eine einfache (aber sehr schlechte Methode für SVM) besteht darin, nur die Minderheitenklasse (n) zu replizieren, bis Sie ein Gleichgewicht haben:

Ссылка

    
denson 12.06.2015 21:31
quelle