Saya tidak yakin bahwa saya mengerti apa yang Anda maksud dengan "mengumpulkan" data. Jika Anda mengacu pada digitalisasi kepala-kepala dan penugasan kelas, ini paling baik dilakukan dalam GIS. Ada banyak opsi gratis yang cocok (i..e, QGIS, GRASS). Idealnya Anda akan memiliki data lapangan untuk melatih klasifikasi Anda.
Prosedur untuk klasifikasi menggunakan Hutan Acak cukup mudah. Anda dapat membaca data pelatihan Anda (yaitu, pembentukan titik) menggunakan "rgdal" atau "maptools", membaca dalam data spektral Anda menggunakan raster::stack
, menetapkan nilai raster ke poin pelatihan Anda menggunakan raster:extract
dan kemudian meneruskannya kerandomForest
. Anda harus memaksa kolom "class" menjadi faktor agar RF mengenali model sebagai contoh klasifikasi. Setelah Anda memiliki model yang pas, Anda dapat menggunakan fungsi prediksi, melewati itu Anda raster tumpukan. Anda harus melewati argumen standar untuk memprediksi selain yang khusus untuk fungsi prediksi raster. Paket raster memiliki kemampuan untuk menangani raster "kehabisan memori" dan karena itu aman memori, bahkan dengan raster yang sangat besar. Salah satu argumen dalam fungsi prediksi raster adalah "nama file" yang memungkinkan raster ditulis ke disk. Untuk masalah multikelas, Anda perlu mengatur type = "response" dan index = 1 yang akan menghasilkan raster integer dari kelas Anda.
Ada beberapa peringatan yang harus diperhatikan:
- Anda tidak dapat memiliki lebih dari 32 level dalam variabel respons Anda ( y ) atau faktor apa pun di sisi kanan persamaan ( x )
- Kelas Anda harus seimbang. Aturan 30% adalah aturan yang baik untuk diikuti, yaitu jika Anda memiliki lebih dari 30% pengamatan lebih dari satu kelas daripada yang lain masalah Anda menjadi tidak seimbang dan hasilnya bisa menjadi bias
- Ini adalah istilah yang salah bahwa RF tidak bisa berpakaian berlebihan. Jika Anda terlalu mengaitkan ansambel Anda, Anda bisa mengenakan pakaian model tersebut. Cara yang baik untuk menghindari ini adalah dengan menjalankan model pendahuluan dan merencanakan stabilisasi kesalahan. Sebagai aturan praktis, saya memilih 2X jumlah bootstraps yang diperlukan untuk menstabilkan kesalahan untuk parameter ntree. Ini karena interaksi variabel stabil pada tingkat yang lebih lambat daripada kesalahan. Jika Anda tidak menyertakan banyak variabel dalam model, Anda bisa jauh lebih konservatif dengan parameter ini.
- Jangan gunakan kemurnian simpul sebagai ukuran variabel penting. Itu tidak diijinkan seperti penurunan rata-rata dalam akurasi.
Saya memiliki fungsi untuk pemilihan model, ketidakseimbangan kelas, dan validasi dalam paket rfUtilities yang tersedia di CRAN.
Berikut ini beberapa kode sederhana untuk membantu Anda memulai.
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)