23 votos

¿Cómo controlar el coste de la clasificación errónea en los bosques aleatorios?

¿Es posible controlar el coste de la clasificación errónea en el paquete R randomForest ?

En mi propio trabajo, los falsos negativos (por ejemplo, omitir por error que una persona puede tener una enfermedad) son mucho más costosos que los falsos positivos. El paquete rparte permite al usuario controlar los costes de clasificación errónea especificando una matriz de pérdidas para ponderar las clasificaciones erróneas de forma diferente. ¿Existe algo similar para randomForest ? ¿Debo, por ejemplo, utilizar el classwt para controlar el criterio de Gini?

8voto

No realmente, si no haciendo manualmente clon de RF haciendo embolsado de rpart modelos.

Alguna opción proviene del hecho de que la salida de RF es en realidad una puntuación continua en lugar de una decisión crujiente, es decir, la fracción de árboles que votaron en alguna clase. Puede extraerse con predict(rf_model,type="prob") y se utiliza para hacer, por ejemplo, una curva ROC que revelará un umbral mejor que .5 (que puede incorporarse posteriormente en el entrenamiento de RF con cutoff parámetro).

classwt también parece válido, pero no funciona muy bien en la práctica: la transición entre la predicción equilibrada y el reparto trivial de la misma clase independientemente de los atributos tiende a ser demasiado brusca para ser utilizable.

3voto

sd2k9 Puntos 21

Hay varias formas de incluir los costes.
(1) El muestreo por exceso/defecto de cada árbol embolsado (muestreo estratificado) es el método más habitual para introducir costes. desequilibra intencionadamente el conjunto de datos.
(2) Ponderación. Nunca funciona. Creo que esto se enfatiza en la documentación. Algunos afirman que basta con ponderar en todas las etapas, incluida la división de Gini y la votación final. Si va a funcionar, va a ser una implementación complicada.
(3) Función Metacost en Weka.
(4) Tratar un bosque aleatorio como un clasificador probabilístico y cambiar el umbral. Esta opción es la que menos me gusta. Probablemente debido a mi falta de conocimiento, pero a pesar de que el algoritmo puede salida probabilidades no tiene sentido para mí para tratarlos como si se tratara de un modelo probabilístico.

Pero estoy seguro de que hay enfoques adicionales.

3voto

pablo_sci Puntos 11

Se recomienda que si la variable que se intenta predecir no es del 50% para class 1 y el 50% para class 2 (como en la mayoría de los casos), se ajusta el cutoff para representar el OOB en resumen.

Por ejemplo,

randomForest(data=my_data, formula, ntree = 501, cutoff=c(.96,.04))

En este caso, la probabilidad de tener un valor de uno class 1 es .96 mientras que tiene un valor de class 2 es .04 .

En caso contrario, los bosques aleatorios utilizan un umbral de 0.5 .

1voto

Spandankeshav Puntos 11

Se puede incorporar costMatrix en randomForest explícitamente a través de parms parámetro:

library(randomForest)
costMatrix <- matrix(c(0,10,1,0), nrow=2)
mod_rf <- randomForest(outcome ~ ., data = train, ntree = 1000, parms = list(loss=costMatrix))

0voto

guanglei Puntos 125

Puede incorporar la sensibilidad a los costes utilizando la función sampsize en la función randomForest paquete.

model1=randomForest(DependentVariable~., data=my_data, sampsize=c(100,20))

Variar las cifras (100,20) en función de los datos de que disponga y de las suposiciones/reglas empresariales con las que trabaje.

Para obtener una matriz de confusión que refleje los costes de los errores de clasificación, hay que recurrir un poco al método de ensayo y error. Eche un vistazo al Previsiones delictivas del riesgo: un enfoque de aprendizaje automático , p. 82.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X