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

21

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

En mi propio trabajo, los falsos negativos (por ejemplo, fallar por error que una persona puede tener una enfermedad) son mucho más costosos que los falsos positivos. El paquete rpart permite al usuario controlar los costos de clasificación errónea al especificar una matriz de pérdida para clasificar las clasificaciones erróneas de manera diferente. ¿Existe algo similar para randomForest? ¿Debo, por ejemplo, usar la classwtopción para controlar el criterio de Gini?

usuario5944
fuente

Respuestas:

8

En realidad no, si no haciendo clon RF manualmente haciendo embolsado de rpartmodelos.

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 nítida, es decir, la fracción de árboles que votaron en alguna clase. Se puede extraer predict(rf_model,type="prob")y utilizar para crear, por ejemplo, una curva ROC que revelará un umbral mejor que .5 (que luego se puede incorporar en el entrenamiento de RF con cutoffparámetro).

classwt El enfoque 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 aguda para ser utilizable.


fuente
MBQ. Muchas gracias. (i) Curva ROC: en este caso no necesito la curva ROC ya que tengo mis propios antecedentes sobre cuál debería ser la ponderación de costos. (ii) classwt: Sí, he descubierto que, en la práctica, y en línea con otros usuarios, los resultados no son los esperados. (iii) cutoff: No tengo claro cómo utilizar cutoffen este caso y agradecería cualquier consejo adicional.
user5944
3

Hay varias formas de incluir los costos.
(1) El muestreo más / menos para cada árbol embolsado (muestreo estratificado) es el método más común para introducir costos. Desequilibra intencionalmente el conjunto de datos.
(2) Ponderación. Nunca funciona Creo que esto se enfatiza en la documentación. Algunos afirman que solo necesita pesar en todas las etapas, incluida la división de Gini y la votación final. Si va a funcionar, 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. Me gusta menos esta opción. Probablemente debido a mi falta de conocimiento, pero aunque el algoritmo puede generar probabilidades no tiene sentido para mí tratarlas como si fuera un modelo probabilístico.

Pero estoy seguro de que hay enfoques adicionales.

Charles
fuente
3

Se recomienda que si la variable que está intentando predecir no es del 50% class 1y del 50% class 2(como la mayoría de los casos), ajuste el cutoffparámetro para representar el real OOBen 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 1es .96tener un valor de class 2es .04.

De lo contrario, los bosques aleatorios usan un umbral de 0.5.

pablo_sci
fuente
1

Uno puede incorporar costMatrixen randomForestexplícitamente a través de parmsparámetro:

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

Puede incorporar sensibilidad de costos utilizando la sampsizefunción en el randomForestpaquete.

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

Varíe las cifras (100,20)según los datos que tenga y las suposiciones / reglas comerciales con las que está trabajando.

Se necesita un enfoque de prueba y error para obtener una matriz de confusión que refleje los costos del error de clasificación. Eche un vistazo a los pronósticos de riesgo penal de Richard Berk : un enfoque de aprendizaje automático , pág. 82)

MH TING
fuente