¿Cómo se realiza la clasificación de la cobertura de la tierra de un bosque aleatorio?

30

Este es un seguimiento de una publicación anterior: Algoritmos de aprendizaje automático para la clasificación de la cobertura del suelo .

Parece que el método de clasificación Random Forest (RF) está ganando mucho impulso en El mundo de la teledetección. Estoy particularmente interesado en la RF debido a muchas de sus fortalezas:

  • Un enfoque no paramétrico adecuado para datos de detección remota
  • Alta precisión de clasificación informada
  • Se informa la importancia variable

Dadas estas fortalezas, me gustaría realizar la clasificación de tierras de bosques aleatorios utilizando imágenes de alta resolución de 4 bandas. Existe una gran cantidad de material e investigación que promociona las ventajas de Random Forest, pero existe muy poca información sobre cómo realizar realmente el análisis de clasificación. Estoy familiarizado con la regresión de RF usando R y preferiría usar este entorno para ejecutar el algoritmo de clasificación de RF.

¿Cómo puedo recopilar, procesar e ingresar datos de capacitación (es decir, basados en imágenes aéreas de alta resolución CIR) en Algoritmo de bosque aleatorio utilizando R? Cualquier consejo paso a paso sobre cómo producir un raster de cobertura de tierra clasificado sería muy apreciado.

    
pregunta Aaron 01.11.2012 - 03:52

3 respuestas

27

No estoy seguro de entender lo que quiere decir con "recopilar" datos. Si se refiere a la digitalización de mano a mano y la asignación de clases, esto se hace mejor en un SIG. Hay muchas opciones gratuitas que serían adecuadas (i..e, QGIS, GRASS). Lo ideal sería que tuvieras datos de campo para entrenar tu clasificación.

El procedimiento para la clasificación utilizando bosques aleatorios es bastante sencillo. Puede leer sus datos de entrenamiento (es decir, un shapefile de puntos) usando "rgdal" o "maptools", leer sus datos espectrales usando raster::stack , asignar los valores ráster a sus puntos de entrenamiento usando raster:extract y luego pasar esto a %código%. Deberá forzar su columna de "clase" para que RF reconozca el modelo como una instancia de clasificación. Una vez que tenga un modelo de ajuste, puede usar la función de predicción y pasarla a la pila de ráster. Deberá pasar los argumentos estándar para predecir, además de los específicos de la función de predicción de ráster. El paquete ráster tiene la capacidad de manejar rásteres "sin memoria" y, como tal, es seguro para la memoria, incluso con rásteres muy grandes. Uno de los argumentos en la función de predicción de ráster es "nombre de archivo" que permite escribir un ráster en el disco. Para un problema multiclase, deberá establecer type="response" e index = 1 que generará un ráster entero de sus clases.

Hay algunas advertencias que deben tenerse en cuenta:

  1. No puede tener más de 32 niveles en su variable de respuesta ( y ) o cualquiera factor en el lado derecho de la ecuación ( x )
  2. Tus clases deben ser equilibradas. Una regla del 30% es buena para seguir, es decir, si tiene más de un 30% más de observaciones en una clase que cualquier otro, su problema se desequilibra y los resultados pueden ser sesgado
  3. Es un nombre inapropiado que la RF no pueda saturar. Si usted correlaciona demasiado su Conjunto que puede sobretodo el modelo. Una buena manera de evitar esto es Ejecutar un modelo preliminar y trazar la estabilización del error. Como una regla De hecho, elijo 2X el número de bootstraps necesarios para estabilizar El error para el parámetro ntree. Esto es porque la variable La interacción se estabiliza a un ritmo más lento que el error. Si no eres Incluyendo muchas variables en el modelo puedes ser mucho más. conservador con este parámetro.
  4. No utilice la pureza del nodo como medida de importancia variable. Es no permutada como la disminución media en la precisión.

Tengo funciones para selección de modelo, desequilibrio de clase y validación en el paquete rfUtilities disponible en CRAN.

Aquí hay un código simple para comenzar.

require(sp)
require(rgdal)
require(raster)
require(randomForest)

# CREATE LIST OF RASTERS
rlist=list.files(getwd(), pattern="img$", full.names=TRUE) 

# CREATE RASTER STACK
xvars <- stack(rlist)      

# READ POINT SHAPEFILE TRAINING DATA
sdata <- readOGR(dsn=getwd() layer=inshape)

# ASSIGN RASTER VALUES TO TRAINING DATA
v <- as.data.frame(extract(xvars, sdata))
  [email protected] = data.frame([email protected], v[match(rownames([email protected]), rownames(v)),])

# RUN RF MODEL
rf.mdl <- randomForest([email protected][,3:ncol([email protected])], y=as.factor([email protected][,"train"]),
                       ntree=501, importance=TRUE)

# CHECK ERROR CONVERGENCE
plot(rf.mdl)

# PLOT mean decrease in accuracy VARIABLE IMPORTANCE
varImpPlot(rf.mdl, type=1)

# PREDICT MODEL
predict(xvars, rf.mdl, filename="RfClassPred.img", type="response", 
        index=1, na.rm=TRUE, progress="window", overwrite=TRUE)
    
respondido por el Jeffrey Evans 01.11.2012 - 19:02
4

Sé que este hilo es un poco antiguo, pero para cualquiera que quiera probar la clasificación de datos de detección remota en R , se ha lanzado un nuevo paquete muy prometedor.

install.packages("RSToolbox")

Viene con funciones para clasificación supervisada y no supervisada (utilizando bosques aleatorios). Puede encontrar más información aquí, enlace

    
respondido por el JPD 04.12.2015 - 12:40
2

Aquí hay un tutorial sobre la clasificación / regresión supervisada con R, que Incluye un ejemplo de RandomForest. El contexto está modelando rangos de especies individuales, pero la diferencia con el uso de múltiples clases es pequeña.

    
respondido por el Robert Hijmans 18.12.2015 - 00:12

Lea otras preguntas en las etiquetas