2 votos

Matrices de confusión para dos listas de objetos rasterizados

Tengo dos listas de objetos rasterizados. Una contiene parcelas de validación y la otra contiene los resultados de una clasificación binaria de bosque aleatorio de esas parcelas. Me gustaría recorrer ambas listas con caret::confusionMatrix para evaluar la precisión del clasificador. Sin embargo, algunos rasters sólo tienen una clase presente, y caret::confusionMatrix devuelve el

Error: debe haber al menos dos niveles en los datos.

1voto

Jay Bazuzi Puntos 194

Datos de muestra - debería hacer algo así en su pregunta para ilustrar:

> r1 = raster(matrix(sample(1:3,25,TRUE),5,5))
> r2 = raster(matrix(sample(1:3,25,TRUE),5,5))

La matriz de confusión de una trama es un error:

> confusionMatrix(r1,r2)
Error: `data` and `reference` should be factors with the same levels.

Por lo tanto, convertir a un factor con los mismos niveles :

> confusionMatrix(factor(r1[],levels=1:3),factor(r2[],levels=1:3))
Confusion Matrix and Statistics

          Reference
Prediction 1 2 3
         1 5 1 2
         2 3 5 5
         3 3 0 1

Entonces, si a uno de tus rásteres le faltan niveles, sigue funcionando:

> r3 = raster(matrix(1,5,5))
> confusionMatrix(factor(r1[],levels=1:3),factor(r3[],levels=1:3))
Confusion Matrix and Statistics

          Reference
Prediction  1  2  3
         1  8  0  0
         2 13  0  0
         3  4  0  0

La única condición en este caso es que hay que conocer de antemano todos los valores posibles. Si un "42" repentino se cuela en alguna parte, se romperá. Obtenga de antemano todos los valores únicos en sus rasters y luego cree factores con eso.

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