Come ridurre il numero di falsi positivi?


12

Sto cercando di risolvere un compito chiamato rilevamento dei pedoni e alleno il clasifer binario su due categorie di aspetti positivi: persone, aspetti negativi, sfondo.

Ho un set di dati:

  • numero di positivi = 3752
  • numero di negativi = 3800

Uso train \ test split 80 \ 20% e RandomForestClassifier da scikit-learn con parametri:

RandomForestClassifier(n_estimators=100, max_depth=50, n_jobs= -1)

Ottengo punteggio: 95.896757%

test sui dati di allenamento (funziona perfettamente):

true positive:  3005
false positive:  0
false negative:  0
true negative:  3036

test sui dati di test:

true positive:  742
false positive:  57
false negative:  5
true negative:  707

La mia domanda è: come ridurre il numero di falsi positivi (background classificati come persone)? Anche perché ho più errori falsi positivi che falsi negativi?

Ho provato a utilizzare il class_weightparametro, ma a un certo punto le prestazioni peggiorano (come puoi vedere in class_weight = {0: 1,1: 4}).

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 %

Inoltre, vale la pena notare che RandomForest sembra non soffrire di set di dati non bilanciati:

pos = 3752 neg = 10100

class_weight = {0: 1,1: 1} vero positivo: 3007 falso positivo: 0 falso negativo: 0 vero negativo: 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 %

Risposte:


7

Non sono un esperto di foreste casuali, le ho lette abbastanza di recente. Ma da come mi sembra che stai superando la foresta casuale. Quello che vorrei fare è usare la tecnica in cui usi le osservazioni Out-Of-Bag per fare previsioni. Puoi trovare la procedura in queste diapositive: https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/trees.pdf

Un'altra cosa che suggerirei è menzionata anche in queste diapositive denominate Gradient Boosting Machine (GBM) menzionate anche in questa sezione. Sento che GBM è più intuitivo della foresta casuale.

Edit1 : l'ho verificato di nuovo e sembra che il bootstrap sia il primo passo di GBM. Inoltre, non ho problemi con il bootstrap di per sé, è bello e buono. L'unico problema è che può essere usato molto male.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.