Klassifizierungsschwelle in RandomForest-sklearn

9

1) Wie kann ich den Klassifizierungsschwellenwert (ich denke, er ist standardmäßig 0,5) in RandomForest in sklearn ändern?

2) Wie kann ich in sklearn eine Unterprobe machen?

3) Ich habe das folgende Ergebnis vom RandomForest-Klassifikator: [[1635 1297] [520 3624]]

         precision    recall  f1-score   support

class 0       0.76      0.56      0.64      2932
class 1       0.74      0.87      0.80      4144

Durchschnitt / Gesamt 0,75 0,74 0,73 7076

Erstens sind die Daten unausgeglichen (30% aus Klasse 0 und 70% aus Klasse 1). Ich denke also, dass der Klassifikator eher für Klasse 1 voreingenommen ist, was bedeutet, dass einige von Klasse 0 zu Klasse 1 verschoben werden (es gibt 1297 Fehlklassifizierungen für Klasse 0, aber 520 Fehlklassifizierungen für Klasse 1). Wie kann ich das beheben? ob Downsampling helfen kann? oder Änderung der Klassifizierungsschwelle?

Update: Klasse 0 hat 40% der Bevölkerung, während Klasse 1 60% hat. Die Drift von Klasse 0 zu Klasse 1 (1297) ist jedoch hoch, während ich möchte, dass dies niedrig wird.

Big Data-Liebhaber
quelle

Antworten:

7

Sie könnten Ihre zufällige Gesamtstruktur tatsächlich in eine Klasse einschließen, die eine predictMethode ist, die die predict_probaMethode der internen zufälligen Gesamtstruktur aufruft und Klasse 1 nur dann ausgibt, wenn sie höher als ein benutzerdefinierter Schwellenwert ist.

Alternativ können Sie den Trainingsalgorithmus beeinflussen, indem Sie sample_weightfür Stichproben aus der Minderheitsklasse einen höheren Wert übergeben.

Ogrisel
quelle
Vielen Dank. Ich dachte darüber nach, das Gewicht für die Nebenklasse zu erhöhen. Allerdings kann ich nichts in RandomForest Klassifikator sehen (es gibt in SGDclassifier)
Big Data Lover
Die Anpassungsmethode akzeptiert einen sample_weightParameter (ein Gewicht pro Parameter), der sehr flexibel ist und eine Simulation ermöglicht class_weight(ein Gewicht pro Zielklasse ).
Ogrisel
Vielen Dank. Wenn ich clf = clf.fit (X, Y, sample_weight = preprocessing.balance_weights (y) verwende, erhalte ich ValueError: Operanden konnten nicht zusammen mit Formen gesendet werden. y ist binär 0/1
Big Data Lover
Was ist die Form von y? Warum hast du anders Yund y?
Ogrisel