Come eseguire la classificazione della copertura del suolo nella foresta casuale?


32

Questo è il seguito di un post precedente: Algoritmi di Machine Learning per la classificazione della copertura del suolo .

Sembra che il metodo di classificazione Random Forest (RF) stia guadagnando molto slancio nel mondo del telerilevamento. Sono particolarmente interessato alla RF grazie a molti dei suoi punti di forza:

  • Un approccio non parametrico adatto ai dati di telerilevamento
  • Alta precisione di classificazione riportata
  • È stata rilevata un'importanza variabile

Alla luce di questi punti di forza, mi piacerebbe eseguire la classificazione dei terreni della foresta casuale utilizzando immagini a 4 bande ad alta risoluzione. Ci sono molti materiali e ricerche che sostengono i vantaggi di Random Forest, ma esistono pochissime informazioni su come eseguire effettivamente l'analisi di classificazione. Conosco la regressione RF usando R e preferirei usare questo ambiente per eseguire l'algoritmo di classificazione RF.

Come posso raccogliere, elaborare e inserire i dati di addestramento (cioè basati su immagini aeree CIR ad alta risoluzione) nell'algoritmo Foresta casuale usando R? Qualsiasi consiglio graduale su come produrre un raster di copertura del suolo classificato sarebbe molto apprezzato.


Sto cercando di capire questa classificazione raster, dal momento che sto lavorando su una classe RF (per la distribuzione delle specie) con immagini con risoluzione di 10 cm. Quindi penso di non poter inserire forme puntiformi, ma solo raster. Come posso procedere con * png o * tif -files?
steveomb,

Risposte:


29

Non sono sicuro di aver capito cosa intendi per "raccogliere" dati. Se ti riferisci alla digitalizzazione diretta e all'assegnazione delle lezioni, è meglio farlo in un GIS. Ci sono molte opzioni gratuite che sarebbero adatte (es. QGIS, GRASS). Idealmente, avresti dati sul campo per allenare la tua classificazione.

La procedura per la classificazione usando le foreste casuali è abbastanza semplice. Puoi leggere i tuoi dati di allenamento (ad es. Uno shapefile di punti) usando "rgdal" o "maptools", leggere i tuoi dati spettrali usando raster::stack, assegnare i valori raster ai tuoi punti di allenamento usando raster:extracte poi passarli arandomForest. Dovrai forzare la colonna "class" in un fattore affinché RF riconosca il modello come istanza di classificazione. Una volta che hai un modello adatto, puoi utilizzare la funzione di previsione, passando lo stack raster. Sarà necessario passare gli argomenti standard per prevedere oltre a quelli specifici della funzione di previsione raster. Il pacchetto raster ha la capacità di gestire i raster "senza memoria" e come tale è sicuro per la memoria, anche con raster molto grandi. Uno degli argomenti della funzione di previsione raster è "nome file" che consente a un raster di essere scritto su disco. Per un problema multiclasse dovrai impostare type = "response" e index = 1 che genererà un raster intero delle tue classi.

Ci sono alcuni avvertimenti che dovrebbero essere notati:

  1. Non è possibile avere più di 32 livelli nella variabile di risposta ( y ) o qualsiasi fattore sul lato destro dell'equazione ( x )
  2. Le tue classi devono essere bilanciate. Una regola del 30% è buona da seguire, cioè se hai più del 30% di osservazioni in più su una classe rispetto a qualsiasi altra, il tuo problema diventa sbilanciato e i risultati possono essere distorti
  3. È un termine improprio che RF non può esagerare. Se si mette in correlazione eccessiva il proprio ensemble, è possibile equipaggiare eccessivamente il modello. Un buon modo per evitare ciò è eseguire un modello preliminare e tracciare la stabilizzazione dell'errore. Come regola generale, scelgo 2 volte il numero di bootstrap necessari per stabilizzare l'errore per il parametro ntree. Questo perché l'interazione variabile si stabilizza a una velocità inferiore rispetto all'errore. Se non includi molte variabili nel modello, puoi essere molto più prudente con questo parametro.
  4. Non utilizzare la purezza del nodo come misura di importanza variabile. Non è ammesso come la diminuzione media della precisione.

Ho funzioni per la selezione del modello, lo squilibrio di classe e la validazione nel pacchetto rfUtilities disponibile su CRAN.

Ecco un semplice codice per iniziare.

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)

Ho visto risultati abbastanza buoni usando RF e predict () per identificare la copertura del baldacchino. Tuttavia, non riesco a produrre risultati migliori rispetto all'algoritmo ISODATA. Sospetto che i miei campioni di allenamento siano distorti o che vi sia troppa sovrapposizione spettrale. Esiste un'implementazione senza supervisione della RF che può produrre risultati migliori? È possibile assegnare il numero di classi all'output, come si farebbe con l'algoritmo ISODATA?
Aaron

3
@Aaron, è possibile eseguire una RF senza etichetta (senza supervisione) ma i risultati sono difficili da gestire. Suggerirei di esaminare il metodo di imputazione RF disponibile nel pacchetto YaImpute. Questo potrebbe riguardare alcuni dei problemi di distorsione / squilibrio che stai riscontrando.
Jeffrey Evans,

5

So che questo thread è un po 'vecchio, ma per chiunque voglia provare la classificazione dei dati di telerilevamento R, è stato rilasciato un nuovo pacchetto molto promettente.

install.packages("RSToolbox")

Viene fornito con funzioni sia per la classificazione senza supervisione che per la supervisione (usando foreste casuali). Ulteriori informazioni sono disponibili qui: http://bleutner.github.io/RStoolbox/


Sembra molto promettente, grazie per il tuo lavoro su questo pacchetto. Un chiarimento, stai specificando foreste casuali attraverso il cursore? In tal caso, dovresti renderlo MOLTO chiaro nella documentazione. Il pacchetto caret utilizza una statistica di suddivisione del nodo diversa rispetto alla definizione originale di Breiman (2001). La statistica segue Strobl et al., (2007) e dove la statistica proposta può essere valida non ho mai acquistato le sue condizioni di simulazione. Inoltre, la distorsione osservata si basa sulla variazione dei livelli fattoriali. Preferisco la statistica entropia originale e come tale non uso il cursore.
Jeffrey Evans,

Ciao Jeffrey, temo di non essere l'autore del pacchetto. I suoi dettagli sono disponibili al link che ho fornito.
JPD

2

Qui e qui sono tutorial sulla classificazione / regressione supervisionata con R, che include esempi di RandomForest.


0

Poiché il problema qui era la classificazione di un'immagine CIR ad alta risoluzione, suggerisco di non utilizzare l'approccio tradizionale (basato sui pixel) utilizzato per i dati satellitari, ma di produrre un'analisi di segmentazione dell'immagine aerea e quindi di utilizzare il classier (RF).


3
Laddove si tratta di un approccio abbastanza valido, non si deve supporre che una classificazione basata sull'aggregazione soddisfi le esigenze dell'utente. La segmentazione non dovrebbe essere applicata solo per affrontare la trattabilità computazionale, ma piuttosto per raggiungere specifici obiettivi analitici. Questo non è un metodo blanch cart che sostituisce automaticamente i metodi basati su pixel. Bisogna bilanciare la perdita di informazioni, dovuta al livellamento statistico / spaziale, con il risultato previsto. Se sei interessato alla segmentazione delle variazioni spaziali, puoi rimuoverla. I risultati possono anche dipendere fortemente dai parametri di segmentazione.
Jeffrey Evans,

Sono totalmente d'accordo con te, infatti ogni metodo dovrebbe essere orientato verso obiettivi specifici. Questo è il motivo per cui ho suggerito che con le immagini CIR ad alta risoluzione (che probabilmente hanno bande spettrali limitate) un insieme di variabili GEOBIA che includono dati accessori o valori di trama, potrebbe migliorare significativamente l'accuratezza finale della classificazione, specialmente se abbinata a classificatori come RF.
vincent,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.