Wie kann die Anzahl der Fehlalarme verringert werden?

12

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_weightParameter 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 %
mrgloom
quelle

Antworten:

7

Ich bin kein Experte, wenn es um zufällige Wälder geht, ich habe sie erst kürzlich gelesen. Aber wie es für mich aussieht, passen Sie den zufälligen Wald über. Was ich tun würde, ist die Technik zu verwenden, bei der Sie die Out-Of-Bag-Beobachtungen verwenden, um Vorhersagen zu treffen. Das Verfahren finden Sie auf diesen Folien: https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/trees.pdf

Eine andere Sache, die ich vorschlagen würde, wird auch in diesen Folien erwähnt, die als Gradientenverstärkungsmaschine (GBM) bezeichnet werden und ebenfalls in diesem Abschnitt erwähnt werden. Ich bin der Meinung, dass GBM intuitiver ist als zufällige Gesamtstrukturen.

Edit1 : Ich habe es erneut überprüft und es scheint, dass Bootstrapping der allererste Schritt von GBM ist. Außerdem habe ich keine Probleme mit Bootstrapping an sich, es ist schön und gut. Das einzige Problem dabei ist, dass es sehr schlecht verwendet werden kann.

Nitin Aggarwal
quelle