¿Cómo reducir el número de falsos positivos?


12

Estoy tratando de resolver una tarea llamada detección de peatones y entreno clasifer binario en dos categorías positivas - personas, negativas - antecedentes.

Tengo un conjunto de datos:

  • cantidad de positivos = 3752
  • número de negativos = 3800

Uso train \ test split 80 \ 20% y RandomForestClassifier de scikit-learn con parámetros:

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

Obtengo puntaje: 95.896757%

prueba de datos de entrenamiento (funciona perfectamente):

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

prueba en datos de prueba:

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

Mi pregunta es cómo reducir el número de falsos positivos (antecedentes clasificados como personas). Además, ¿por qué tengo más errores positivos falsos que falsos negativos?

Intenté usar el class_weightparámetro, pero en algún momento el rendimiento se degrada (como puede ver en 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 %

También vale la pena señalar que RandomForest parece no sufrir un conjunto de datos desequilibrado:

pos = 3752 neg = 10100

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

Respuestas:


7

No soy un experto cuando se trata de bosques aleatorios, los leí hace poco. Pero por lo que me parece, estás sobreajustando el bosque al azar. Lo que haría es utilizar la técnica en la que utiliza las observaciones Fuera de la bolsa para hacer predicciones. Puede encontrar el procedimiento en estas diapositivas: https://lagunita.stanford.edu/c4x/HumanitiesScience/StatLearning/asset/trees.pdf

Otra cosa que sugeriría también se menciona en estas diapositivas llamadas la máquina de aumento de gradiente (GBM) también mencionada en esta sección. Siento que GBM es más intuitivo que el bosque aleatorio.

Edit1 : lo revisé de nuevo y parece que bootstrapping es el primer paso de GBM. Además, no tengo problemas con bootstrapping per se, es bueno y bueno. El único problema es que puede usarse muy mal.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.