ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งที่คุณหมายถึงโดยข้อมูล "รวบรวม" หากคุณอ้างถึงการทำสำเนาดิจิตอลและการกำหนดคลาสให้เป็นแบบ heads-up มีตัวเลือกฟรีมากมายที่เหมาะสม (เช่น.., QGIS, GRASS) เป็นการดีที่คุณจะมีข้อมูลภาคสนามในการฝึกอบรมการจัดหมวดหมู่ของคุณ
ขั้นตอนการจำแนกประเภทโดยใช้ป่าสุ่มนั้นค่อนข้างตรงไปตรงมา คุณสามารถอ่านข้อมูลการฝึกอบรมของคุณ (เช่นไฟล์รูปร่างจุด) โดยใช้ "rgdal" หรือ "maptools" อ่านข้อมูลสเปกตรัมของคุณโดยใช้raster::stack
กำหนดค่าแรสเตอร์ให้กับคะแนนการฝึกอบรมของคุณraster:extract
แล้วส่งผ่านสิ่งนี้ไปrandomForest
. คุณจะต้องบีบบังคับคอลัมน์ "class" ของคุณให้เป็นปัจจัยเพื่อให้ RF รู้จักรูปแบบเป็นอินสแตนซ์การจำแนกประเภท เมื่อคุณมีโมเดลพอดีคุณสามารถใช้ฟังก์ชั่นการทำนายได้ คุณจะต้องผ่านการโต้แย้งมาตรฐานเพื่อคาดการณ์นอกเหนือไปจากฟังก์ชั่นการทำนายแบบแรสเตอร์ แพคเกจแรสเตอร์มีความสามารถในการจัดการ rasters "หน่วยความจำไม่เพียงพอ" และเช่นนี้มีความปลอดภัยของหน่วยความจำแม้จะมีแรสเตอร์ขนาดใหญ่มาก หนึ่งในข้อโต้แย้งในฟังก์ชั่นการทำนายแรสเตอร์คือ "ชื่อไฟล์" ที่อนุญาตให้แรสเตอร์เขียนลงดิสก์ สำหรับปัญหาแบบหลายคลาสคุณจะต้องตั้งค่า type = "response" และ index = 1 ซึ่งจะส่งสัญญาณออกจำนวนเต็มของคลาสของคุณ
มีข้อควรระวังบางประการที่ควรสังเกต:
- คุณไม่สามารถมีมากกว่า 32 ระดับในตัวแปรตอบสนองของคุณ ( Y ) หรือปัจจัยใด ๆ ที่ด้านขวาของสมการ ( x )
- ชั้นเรียนของคุณจะต้องมีความสมดุล กฎ 30% เป็นกฎที่ดีที่ต้องปฏิบัติตามนั่นคือถ้าคุณมีการสังเกตมากกว่า 30% ในชั้นเรียนหนึ่งกว่าปัญหาอื่น ๆ ของคุณจะไม่สมดุลและผลลัพธ์อาจมีอคติ
- มันเป็นชื่อเรียกที่ผิดที่ RF ไม่สามารถทนได้ หากคุณมีความสัมพันธ์กับวงดนตรีของคุณคุณสามารถปรับโมเดลให้เหมาะสม วิธีที่ดีในการหลีกเลี่ยงปัญหานี้คือการเรียกใช้ตัวแบบเบื้องต้นและวางแผนการแก้ไขข้อผิดพลาด ตามกฎของหัวแม่มือฉันเลือก 2X จำนวน bootstraps ที่ต้องการเพื่อทำให้ข้อผิดพลาดคงที่สำหรับพารามิเตอร์ ntree นี่เป็นเพราะปฏิสัมพันธ์ของตัวแปรมีความเสถียรในอัตราที่ช้ากว่าข้อผิดพลาด หากคุณไม่ได้รวมตัวแปรจำนวนมากในโมเดลคุณสามารถระมัดระวังมากกว่านี้ด้วยพารามิเตอร์นี้
- ห้ามใช้ความบริสุทธิ์ของโหนดเพื่อวัดความสำคัญของตัวแปร มันไม่ได้ถูกเปลี่ยนแปลงเช่นความถูกต้องเฉลี่ยลดลง
ฉันมีฟังก์ชั่นสำหรับการเลือกรุ่นความไม่สมดุลของคลาสและการตรวจสอบความถูกต้องในแพ็คเกจrfUtilities ที่มีอยู่ใน CRAN
นี่คือรหัสง่ายๆที่จะช่วยให้คุณเริ่มต้นได้
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)