"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:extract
ve 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:
- Yanıt değişkeninizde ( y ) veya denklemin ( x ) sağ tarafındaki herhangi bir faktörde 32'den fazla seviyeye sahip olamazsınız
- 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
- 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.
- 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)