Bagaimana cara melakukan klasifikasi tutupan lahan Acak Hutan?

32

Ini adalah tindak lanjut dari posting sebelumnya: Algoritma Pembelajaran Mesin untuk Klasifikasi Penutupan Lahan .

Tampaknya metode klasifikasi Random Forest (RF) mendapatkan banyak momentum di dunia penginderaan jauh. Saya khususnya tertarik pada RF karena banyak kelebihannya:

  • Pendekatan nonparametrik cocok untuk data penginderaan jauh
  • Akurasi klasifikasi yang dilaporkan tinggi
  • Pentingnya variabel dilaporkan

Dengan kekuatan ini, saya ingin melakukan klasifikasi lahan Acak Hutan menggunakan citra 4 band beresolusi tinggi. Ada banyak bahan dan penelitian yang menggembar-gemborkan keunggulan Random Forest, namun sangat sedikit informasi yang ada tentang bagaimana sebenarnya melakukan analisis klasifikasi. Saya kenal dengan regresi RF menggunakan R dan lebih suka menggunakan lingkungan ini untuk menjalankan algoritma klasifikasi RF.

Bagaimana cara saya mengumpulkan, memproses, dan memasukkan data pelatihan (yaitu berdasarkan citra udara CIR resolusi tinggi) ke dalam algoritma Hutan Acak menggunakan R? Saran langkah-bijaksana tentang bagaimana menghasilkan raster tutupan lahan yang diklasifikasikan akan sangat dihargai.

Harun
sumber
Saya mencoba memahami klasifikasi raster ini, karena saya sedang mengerjakan kelas RF (untuk distribusi spesies) dengan gambar resolusi 10cm. Jadi saya pikir saya tidak bisa memasukkan bentuk titik, tetapi hanya raster. Bagaimana saya bisa melanjutkan dengan * png atau * tif -files?
steveomb

Jawaban:

29

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:extractdan 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:

  1. Anda tidak dapat memiliki lebih dari 32 level dalam variabel respons Anda ( y ) atau faktor apa pun di sisi kanan persamaan ( x )
  2. 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
  3. 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.
  4. 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)
Jeffrey Evans
sumber
Saya telah melihat hasil yang cukup baik menggunakan RF dan memprediksi () untuk mengidentifikasi tutupan kanopi. Namun, saya sepertinya tidak dapat menghasilkan hasil yang lebih baik daripada dengan algoritma ISODATA. Saya menduga sampel pelatihan saya bias, atau ada terlalu banyak tumpang tindih spektral. Apakah ada implementasi RF tanpa pengawasan yang dapat menghasilkan hasil yang lebih baik? Apakah mungkin untuk menetapkan jumlah kelas ke output, seperti yang Anda lakukan pada algoritma ISODATA?
Aaron
3
@ Harun, dimungkinkan untuk menjalankan RF yang tidak berlabel (tidak diawasi) tetapi hasilnya sulit ditangani. Saya akan menyarankan melihat metode RF imputasi yang tersedia dalam paket YaImpute. Ini mungkin berurusan dengan beberapa masalah bias / ketidakseimbangan yang Anda temui.
Jeffrey Evans
5

Saya tahu bahwa utas ini agak lama, tetapi bagi siapa pun yang ingin mencoba klasifikasi data penginderaan jauh R, paket baru yang sangat menjanjikan telah dirilis.

install.packages("RSToolbox")

Muncul dengan fungsi untuk klasifikasi tanpa pengawasan dan diawasi (menggunakan hutan acak). Informasi lebih lanjut dapat ditemukan di sini - http://bleutner.github.io/RStoolbox/

JPD
sumber
Ini terlihat sangat menjanjikan, terima kasih untuk pekerjaan Anda pada paket ini. Satu klarifikasi, apakah Anda menentukan hutan acak melalui tanda sisipan? Jika demikian, Anda harus membuat ini SANGAT jelas dalam dokumentasi. Paket caret menggunakan statistik pemisahan simpul yang berbeda dari definisi Breiman (2001) yang asli. Statistik mengikuti Strobl et al., (2007) dan di mana statistik yang diusulkan mungkin valid saya belum pernah membeli kondisi simulasi nya. Selain itu, bias yang diamati didasarkan pada variasi tingkat faktorial. Saya lebih suka statistik entropi asli dan karena itu tidak menggunakan tanda sisipan.
Jeffrey Evans
Hai Jeffrey, takut aku bukan penulis paket itu. Detailnya dapat ditemukan di tautan yang saya berikan.
JPD
2

Di sini dan di sini ada tutorial tentang klasifikasi / regresi terawasi dengan R, yang mencakup contoh RandomForest.

Robert Hijmans
sumber
0

Karena masalah di sini adalah dengan mengklasifikasikan gambar CIR resolusi tinggi, saya sarankan untuk tidak menggunakan pendekatan tradisional (berbasis pixel) yang digunakan untuk data satelit, tetapi untuk menghasilkan analisis segmentasi dari gambar udara dan kemudian menggunakan classier (RF).

vincent
sumber
3
Di mana ini adalah pendekatan yang cukup valid seseorang tidak boleh membuat asumsi bahwa klasifikasi berdasarkan agregasi memenuhi kebutuhan pengguna. Segmentasi tidak harus diterapkan hanya untuk mengatasi keterlacakan komputasional tetapi, untuk memenuhi tujuan analitis tertentu. Ini bukan metode keranjang blanch yang secara otomatis menggantikan metode berbasis piksel. Seseorang harus menyeimbangkan kehilangan informasi, karena perataan statistik / spasial, terhadap hasil yang diharapkan. Jika Anda tertarik pada segmentasi variasi spasial dapat menghapusnya. Hasil juga dapat sangat bergantung pada parameter segmentasi.
Jeffrey Evans
Saya sangat setuju dengan Anda, memang setiap metode harus berorientasi pada tujuan tertentu. Inilah sebabnya saya menyarankan bahwa dengan gambar CIR resolusi tinggi (yang mungkin memiliki pita spektral terbatas) serangkaian variabel GEOBIA yang mencakup data tambahan, atau nilai tekstur, dapat secara signifikan meningkatkan akurasi akhir klasifikasi terutama ketika digabungkan dengan pengklasifikasi seperti RF.
vincent