Rastgele Orman arazi örtüsü sınıflandırması nasıl yapılır?


32

Bu önceki bir yazıya yapılan bir takiptir: Arazi Örtüsü Sınıflandırması için Makine Öğrenmesi Algoritmaları .

Görünüşe göre Rastgele Orman (RF) sınıflandırma metodu, uzaktan algılama dünyasında çok fazla ivme kazanıyor gibi görünüyor . Özellikle güçlü yönlerinden dolayı RF ile ilgileniyorum:

  • Uzaktan algılama verilerine uygun parametrik olmayan bir yaklaşım
  • Yüksek rapor edilen sınıflandırma doğruluğu
  • Değişken önem bildirildi

Bu güçler göz önüne alındığında, yüksek çözünürlüklü 4 bantlı görüntüler kullanarak Random Forest arazi sınıflandırması yapmak istiyorum. Random Forest'ın avantajlarını belirleyen çok fazla materyal ve araştırma var, ancak sınıflandırma analizinin nasıl gerçekleştirileceği hakkında çok az bilgi var. R kullanarak RF regresyonuna aşinayım ve bu ortamı RF sınıflandırma algoritmasını çalıştırmak için kullanmayı tercih ediyorum.

Eğitim verilerini (örneğin, yüksek çözünürlüklü CIR hava görüntülerine dayanarak) R kullanarak Rastgele Orman algoritmasına nasıl toplar, işler ve girerim ? Sınıflandırılmış bir arazi örtüsü taramasının nasıl üretileceğine dair adım adım tavsiyelerde bulunmak büyük memnuniyet duyacaktır.


Bu raster sınıflandırmayı anlamaya çalışıyorum, çünkü 10 cm çözünürlüklü görüntülerle RF sınıfı (türlerin dağıtımı için) üzerinde çalışıyorum. Sanırım nokta şekillerini giremiyorum, ancak sadece raster giriyorum. * Png veya * tif -files ile nasıl devam edebilirim?
steveomb

Yanıtlar:


29

"Topla" verileri ile ne demek istediğinizi anladığımdan emin değilim. Heads-up dijitalleştirme ve sınıfların tahsisine atıfta bulunuyorsanız, bu en iyi şekilde bir CBS'de yapılır. Uygun olabilecek birçok ücretsiz seçenek vardır (yani, QGIS, GRASS). İdeal olarak, sınıflandırmanızı geliştirmek için saha verileriniz olacaktır.

Rastgele Ormanları kullanarak sınıflandırma prosedürü oldukça yalındır. "Rgdal" veya "maptools" kullanarak antrenman verilerinde okuyabilirsin (yani, bir nokta şekli dosyası), kullanarak spektral verilerinde okuyabilir raster::stack, raster değerlerini kullanarak antrenman noktalarına atayabilir raster:extractve sonra bunurandomForest. RF'nin modeli bir sınıflandırma örneği olarak tanımasını sağlamak için "sınıf" sütununuzu bir faktöre zorlamanız gerekir. Uygun bir modeliniz olduğunda, tahmin işlevini kullanarak raster yığınınıza geçirirsiniz. Raster tahmin işlevine özgü olanlara ek olarak tahmin etmek için standart argümanları geçmeniz gerekir. Raster paketi, rasterleri "bellekten yetersiz" işleme yeteneğine sahiptir ve bu nedenle, çok büyük rasterlerde bile hafızada güvenlidir. Raster tahmin işlevindeki bağımsız değişkenlerden biri, bir rasterin diske yazılmasına izin veren "dosya adı" dır. Çok sınıflı bir problem için, sınıflarınızın tamsayı rasterini verecek şekilde type = "response" ve index = 1 olarak ayarlamanız gerekir.

Dikkat edilmesi gereken birkaç uyarı var:

  1. Yanıt değişkeninizde ( y ) veya denklemin ( x ) sağ tarafındaki herhangi bir faktörde 32'den fazla seviyeye sahip olamazsınız
  2. Sınıfların dengeli olmalı. % 30 kuralı izlenmesi iyi bir kuraldır, yani bir sınıfta diğerlerinden% 30'dan fazla gözleminiz varsa, sorununuz dengesiz hale gelir ve sonuçlar önyargılı olabilir
  3. RF'nin üstesinden gelemediği bir yanlış isimdir. Eğer grubunuzu çok fazla ilişkilendirirseniz, modelin üzerine geçebilirsiniz. Bundan kaçınmanın iyi bir yolu, bir ön model çalıştırmak ve hata dengelemeyi çizmektir. Genel bir kural olarak, ntree parametresindeki hatayı dengelemek için gereken 2 kat önyükleme sayısını seçiyorum. Bunun nedeni değişken etkileşiminin hataya göre daha yavaş bir hızda sabitlenmesidir. Modele pek çok değişken dahil etmiyorsanız, bu parametre ile daha muhafazakar olabilirsiniz.
  4. Düğüm saflığını değişken öneme sahip bir ölçü olarak kullanmayın. Doğruluktaki ortalama düşüş gibi izin verilmez.

CRAN'da bulunan rfUtilities paketinde model seçimi, sınıf dengesizliği ve doğrulama işlevlerine sahibim .

İşte başlamanız için bazı basit kodlar.

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)

Kanopi örtüsünü tanımlamak için RF ve predict () yöntemlerini kullanarak oldukça iyi sonuçlar gördüm. Ancak, ISODATA algoritmasından daha iyi sonuçlar veremiyorum. Eğitim numunelerimin önyargılı olduğundan veya çok fazla spektral örtüşme olduğundan şüpheleniyorum. Daha iyi sonuçlar üretebilecek denetimsiz bir RF uygulaması var mı? ISODATA algoritması gibi sınıf sayısını çıkışa atamak mümkün müdür?
Aaron

3
@Aaron, etiketlenmemiş (denetimsiz) bir RF çalıştırmak mümkündür ancak sonuçların ele alınması zordur. YaImpute paketinde mevcut olan RF değerlendirme yöntemine bakmanızı öneririm. Bu, karşılaştığınız bazı önyargı / dengesizlik sorunlarıyla ilgilenebilir.
Jeffrey Evans,

5

Bu iş parçacığının biraz eski olduğunu biliyorum, ancak uzaktan algılama verilerinin sınıflandırılmasını denemek isteyen herkes Riçin çok umut verici yeni bir paket yayınlandı.

install.packages("RSToolbox")

Hem denetlenmeyen hem de denetlenen sınıflandırma (rastgele ormanlar kullanılarak) işlevleriyle birlikte gelir. Daha fazla bilgiyi burada bulabilirsiniz - http://bleutner.github.io/RStoolbox/


Bu çok umut verici görünüyor, bu paketteki çalışmalarınız için teşekkürler. Bir açıklama, rasgele ormanları caret yoluyla mı belirliyorsunuz? Öyleyse, belgelerde ÇOK açıkça belirtmelisiniz. Şapka paketi, orijinal Breiman (2001) tanımından farklı bir düğüm bölme istatistiği kullanır. İstatistikler Strobl ve arkadaşları, (2007) 'yi izler ve önerilen istatistiğin geçerli olabileceği yerlerde, simülasyon koşullarını asla almadım. Ek olarak, gözlenen önyargı faktoring seviyelerindeki değişkenliğe dayanmaktadır. Özgün entropi istatistiklerini tercih ediyorum ve bu yüzden şapka kullanmıyor.
Jeffrey Evans,

Selam Jeffrey, korkarım paketin yazarı değilim. Ayrıntılarını verdiğim bağlantıda bulabilirsiniz.
JPD


0

Buradaki sorun, yüksek çözünürlüklü bir CIR görüntüsünün sınıflandırılması ile ilgili olduğu için, uydu verileri için kullanılan geleneksel yaklaşımı (piksel tabanlı) kullanmayı değil, havadan görüntünün segmentasyon analizini ve ardından sınıflandırıcıyı (RF) kullanmasını öneririm.


3
Bunun oldukça geçerli bir yaklaşım olduğu durumlarda, bir topluluğa dayalı sınıflandırmanın kullanıcının gereksinimlerini karşıladığı varsayımı yapılmamalıdır. Segmentasyon yalnızca hesaplanabilir izlenebilirliği ele almak için değil, belirli analitik hedeflere ulaşmak için uygulanmalıdır. Bu, otomatik olarak piksel tabanlı yöntemlerin yerini alan bir sepet açma yöntemi değildir. Kişi, istatistiksel / mekansal düzleme nedeniyle bilgi kaybını amaçlanan sonuca göre dengelemelidir. Mekansal çeşitlemeyle ilgileniyorsanız segmentasyon onu kaldırabilir. Sonuçlar ayrıca segmentasyon parametrelerine de bağlı olabilir.
Jeffrey Evans

Size tamamen katılıyorum, aslında her yöntem belirli hedeflere yönelik olmalıdır. Bu nedenle, yüksek çözünürlüklü CIR görüntülerle (muhtemelen sınırlı spektral bantlara sahip), yardımcı verileri veya doku değerlerini içeren bir GEOBIA değişken setinin, özellikle RF gibi sınıflandırıcılarla birleştiğinde sınıflandırma son doğruluğunu önemli ölçüde artırabileceğini önerdim.
vincent
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.