33 votos

¿Cómo llevar a cabo la clasificación de tierras del bosque al azar?

Esta es una continuación de un post anterior: Algoritmos de Aprendizaje automático para la Clasificación del suelo.

Parece que el Bosque Aleatorio (RF) método de clasificación está ganando mucho impulso en la teledetección mundo. Estoy particularmente interesado en RF debido a que muchos de sus puntos fuertes:

  • Un test no paramétrico de enfoque adecuado para la detección remota de datos
  • Alta informó la exactitud de la clasificación
  • Variable de importancia es reportado

Dadas estas fortalezas, me gustaría realizar Bosque Aleatorio de clasificación de la tierra con alta resolución 4 de la banda de imágenes. Hay una gran cantidad de material y de investigación, promocionando las ventajas de Bosque al Azar, sin embargo, muy poca la información que existe en cuanto a la forma de realizar el análisis de la clasificación. Estoy familiarizado con RF de regresión mediante R y prefiere el uso de este entorno para ejecutar la RF algoritmo de clasificación.

¿Cómo puedo recoger, procesar y entrada de datos de entrenamiento (es decir, basada en la alta resolución de CIR imágenes aéreas) en el Bosque Aleatorio algoritmo usando R? Cualquier paso sabios consejos sobre cómo producir un clasificado de cobertura de la tierra trama sería muy apreciada.

30voto

Dan Puntos 16

No estoy seguro de que entiendo lo que quieres decir por "recoger datos". Si te refieres a la de heads-up de la digitalización y la asignación de las clases, esto se hace mejor en un SIG. Hay muchas opciones gratuitas que sería adecuado (i..e, QGIS, HIERBA). Lo ideal sería tener los datos de campo para entrenar a su clasificación.

El procedimiento para la clasificación de uso de Bosques Aleatorios es bastante recta hacia adelante. Se puede leer en los datos de entrenamiento (es decir, un punto de shapefile), usando "rgdal" o "maptools", leído en sus datos espectrales utilizando raster::pila, asignar el ráster de valores para su capacitación en el uso de puntos de trama:extraer y, a continuación, pasar esto a randomForest. Usted tendrá que obligar a su "clase" de la columna en un factor a tener RF reconocer el modelo como una instancia de clasificación. Una vez que usted tiene un modelo de ajuste se puede utilizar la función de predicción, lo que pasa es que usted trama de la pila. Usted tendrá que pasar el estándar de argumentos para predecir además de aquellos específicos de la trama predecir la función. La trama paquete tiene la capacidad de manejar los rásteres de "out of memory" y, como tal, es la memoria de seguro, incluso con muy grande rásteres. Uno de los argumentos de la trama predecir la función es "nombre de archivo" que permite una trama escrita en el disco. Para un multiclase problema será necesario establecer el tipo="respuesta" y el índice=1, que es la salida de un interger trama de las clases.

Hay algunas advertencias que deben tenerse en cuenta: 1) no Se puede tener más de 32 nivel en la variable de respuesta o de cualquier factor en el lado derecho de la ecuación 2) las clases debe ser equilibrado. Un 30% de la regla es una buena para seguir, es que si se tiene más de un 30% más de las observaciones de una clase de cualquier otro problema que se desequilibrará y los resultados pueden estar basadas 3) es un nombre poco apropiado que la RF no overfit. Si más de correlacionar su conjunto puede overfit el modelo. Una buena manera de evitar esto es ejecutar un modelo preliminar y trazar el error de estabilización. Como regla general, puedo elegir 2 veces el número de los medios necesarios para estabilizar el error para el ntree parámetro. Esto es debido a que la variable de interacción se estabiliza a un ritmo más lento que un error. Si no están incluidas muchas variables en el modelo, puede ser mucho más conservador con este parámetro. 4) no utilizar nodo pureza como una medida de importancia variable. No es permutada como la media de la disminución en la precisión.

He de código disponibles para la selección del modelo y de la clase de desequilibrio en binario modelos en mi sitio web en la sección herramientas.

Aquí es el código sencillo para empezar.

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))
  sdata@data = data.frame(sdata@data, v[match(rownames(sdata@data), rownames(v)),])

# RUN RF MODEL
rf.mdl <- randomForest(x=sdata@data[,3:ncol(sdata@data)], y=as.factor(sdata@data[,"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)

7voto

Sé que este hilo es un poco viejo, pero para cualquiera que desee probar la clasificación de datos de sensores remotos en R , ha lanzado un nuevo paquete muy prometedor.

install.packages("RSToolbox")

Viene con funciones de clasificación no supervisada y supervisada (con bosques al azar). Más información se puede encontrar aquí - http://bleutner.github.io/RStoolbox/

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