Ich versuche, eine Aufgabe zu lösen, die als Fußgängererkennung bezeichnet wird, und trainiere binäre Klassen in zwei Kategorien: Positive - Personen, Negative - Hintergrund.
Ich habe Datensatz:
- Anzahl der Positiven = 3752
- Anzahl der negativen = 3800
Ich benutze train \ test split 80 \ 20% und RandomForestClassifier form scikit-learn mit folgenden Parametern:
RandomForestClassifier(n_estimators=100, max_depth=50, n_jobs= -1)
Ich bekomme Punktzahl: 95.896757%
Test auf Trainingsdaten (funktioniert einwandfrei):
true positive: 3005
false positive: 0
false negative: 0
true negative: 3036
Test auf Testdaten:
true positive: 742
false positive: 57
false negative: 5
true negative: 707
Meine Frage ist, wie man die Anzahl der falsch positiven Ergebnisse reduziert (Hintergrund als Personen klassifiziert). Auch warum habe ich mehr falsch positive Fehler als falsch negative?
Ich habe versucht, class_weight
Parameter zu verwenden , aber irgendwann verschlechtert sich die Leistung (wie Sie unter class_weight = {0: 1,1: 4} sehen können).
class_weight= {0:1,1:1}
true positive: 3005
false positive: 0
false negative: 0
true negative: 3036
true positive: 742
false positive: 55
false negative: 5
true negative: 709
score: 96.029120 %
class_weight= {0:1,1:2}
true positive: 3005
false positive: 0
false negative: 0
true negative: 3036
true positive: 741
false positive: 45
false negative: 6
true negative: 719
score: 96.624752 %
class_weight= {0:1,1:3}
true positive: 3005
false positive: 0
false negative: 0
true negative: 3036
true positive: 738
false positive: 44
false negative: 9
true negative: 720
score: 96.492389 %
class_weight= {0:1,1:4}
true positive: 3005
false positive: 13
false negative: 0
true negative: 3023
true positive: 735
false positive: 46
false negative: 12
true negative: 718
score: 96.161482 %
class_weight= {0:1,1:5}
true positive: 3005
false positive: 31
false negative: 0
true negative: 3005
true positive: 737
false positive: 48
false negative: 10
true negative: 716
score: 96.161482 %
class_weight= {0:1,1:6}
true positive: 3005
false positive: 56
false negative: 0
true negative: 2980
true positive: 736
false positive: 51
false negative: 11
true negative: 713
score: 95.896757 %
class_weight= {0:1,1:7}
true positive: 3005
false positive: 87
false negative: 0
true negative: 2949
true positive: 734
false positive: 59
false negative: 13
true negative: 705
score: 95.234944 %
Es ist auch erwähnenswert, dass RandomForest anscheinend nicht unter einem unausgeglichenen Datensatz leidet:
pos = 3752 neg = 10100
class_weight = {0: 1,1: 1} wahr positiv: 3007 falsch positiv: 0 falsch negativ: 0 wahr negativ: 8074
true positive: 729
false positive: 71
false negative: 16
true negative: 1955
score: 96.860339 %
class_weight= {0:1,1:2}
true positive: 3007
false positive: 0
false negative: 0
true negative: 8074
true positive: 728
false positive: 59
false negative: 17
true negative: 1967
score: 97.257308 %
class_weight= {0:1,1:3}
true positive: 3007
false positive: 0
false negative: 0
true negative: 8074
true positive: 727
false positive: 58
false negative: 18
true negative: 1968
score: 97.257308 %