วิธีการจำแนกพื้นที่ป่าแบบสุ่ม


32

นี่คือการติดตามเพื่อโพสต์ก่อนหน้านี้: เครื่องเรียนรู้ขั้นตอนวิธีสำหรับการจำแนกประเภทที่ดินปก

ดูเหมือนว่าวิธีการจำแนกแบบสุ่มฟอเรสต์ (RF) กำลังได้รับแรงผลักดันมากมายในโลกการรับรู้จากระยะไกล ฉันสนใจ RF โดยเฉพาะเนื่องจากจุดแข็งหลายประการ:

  • วิธีการแบบไม่มีพารามิเตอร์ที่เหมาะสมกับข้อมูลการสำรวจระยะไกล
  • ความถูกต้องของการจำแนกประเภทที่รายงานสูง
  • มีการรายงานความสำคัญของตัวแปร

ด้วยจุดแข็งเหล่านี้ฉันต้องการทำการจำแนกดินแดนป่าไม้แบบสุ่มโดยใช้ภาพความละเอียดสูง 4 แบนด์ มีวัสดุจำนวนมากและงานวิจัยโน้มน้าวข้อได้เปรียบของป่าสุ่ม แต่มีข้อมูลน้อยมากเกี่ยวกับวิธีการวิเคราะห์การจำแนกประเภท ฉันคุ้นเคยกับการถดถอย RF โดยใช้ R และต้องการใช้สภาพแวดล้อมนี้เพื่อเรียกใช้อัลกอริทึมการจำแนก RF

ฉันจะรวบรวมประมวลผลและป้อนข้อมูลการฝึกอบรม (เช่นจากภาพถ่ายทางอากาศ CIR ความละเอียดสูง) ลงในอัลกอริทึมRandom Forestโดยใช้ R ได้อย่างไร คำแนะนำขั้นตอนที่ชาญฉลาดเกี่ยวกับวิธีการผลิตแรสเตอร์ครอบคลุมพื้นที่ประเภทจะได้รับการชื่นชมอย่างมาก


ฉันพยายามที่จะเข้าใจการจำแนกแรสเตอร์นี้เนื่องจากฉันกำลังทำงานกับ RF-class (สำหรับการกระจายสปีชีส์) ด้วยภาพความละเอียด 10 ซม. ดังนั้นฉันคิดว่าฉันไม่สามารถป้อนรูปร่างจุด แต่มีเพียงแบบเชิงภาพ ฉันจะสามารถดำเนินการกับ * png หรือ * tif -files ได้อย่างไร
steveomb

คำตอบ:


29

ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งที่คุณหมายถึงโดยข้อมูล "รวบรวม" หากคุณอ้างถึงการทำสำเนาดิจิตอลและการกำหนดคลาสให้เป็นแบบ heads-up มีตัวเลือกฟรีมากมายที่เหมาะสม (เช่น.., QGIS, GRASS) เป็นการดีที่คุณจะมีข้อมูลภาคสนามในการฝึกอบรมการจัดหมวดหมู่ของคุณ

ขั้นตอนการจำแนกประเภทโดยใช้ป่าสุ่มนั้นค่อนข้างตรงไปตรงมา คุณสามารถอ่านข้อมูลการฝึกอบรมของคุณ (เช่นไฟล์รูปร่างจุด) โดยใช้ "rgdal" หรือ "maptools" อ่านข้อมูลสเปกตรัมของคุณโดยใช้raster::stackกำหนดค่าแรสเตอร์ให้กับคะแนนการฝึกอบรมของคุณraster:extractแล้วส่งผ่านสิ่งนี้ไปrandomForest. คุณจะต้องบีบบังคับคอลัมน์ "class" ของคุณให้เป็นปัจจัยเพื่อให้ RF รู้จักรูปแบบเป็นอินสแตนซ์การจำแนกประเภท เมื่อคุณมีโมเดลพอดีคุณสามารถใช้ฟังก์ชั่นการทำนายได้ คุณจะต้องผ่านการโต้แย้งมาตรฐานเพื่อคาดการณ์นอกเหนือไปจากฟังก์ชั่นการทำนายแบบแรสเตอร์ แพคเกจแรสเตอร์มีความสามารถในการจัดการ rasters "หน่วยความจำไม่เพียงพอ" และเช่นนี้มีความปลอดภัยของหน่วยความจำแม้จะมีแรสเตอร์ขนาดใหญ่มาก หนึ่งในข้อโต้แย้งในฟังก์ชั่นการทำนายแรสเตอร์คือ "ชื่อไฟล์" ที่อนุญาตให้แรสเตอร์เขียนลงดิสก์ สำหรับปัญหาแบบหลายคลาสคุณจะต้องตั้งค่า type = "response" และ index = 1 ซึ่งจะส่งสัญญาณออกจำนวนเต็มของคลาสของคุณ

มีข้อควรระวังบางประการที่ควรสังเกต:

  1. คุณไม่สามารถมีมากกว่า 32 ระดับในตัวแปรตอบสนองของคุณ ( Y ) หรือปัจจัยใด ๆ ที่ด้านขวาของสมการ ( x )
  2. ชั้นเรียนของคุณจะต้องมีความสมดุล กฎ 30% เป็นกฎที่ดีที่ต้องปฏิบัติตามนั่นคือถ้าคุณมีการสังเกตมากกว่า 30% ในชั้นเรียนหนึ่งกว่าปัญหาอื่น ๆ ของคุณจะไม่สมดุลและผลลัพธ์อาจมีอคติ
  3. มันเป็นชื่อเรียกที่ผิดที่ RF ไม่สามารถทนได้ หากคุณมีความสัมพันธ์กับวงดนตรีของคุณคุณสามารถปรับโมเดลให้เหมาะสม วิธีที่ดีในการหลีกเลี่ยงปัญหานี้คือการเรียกใช้ตัวแบบเบื้องต้นและวางแผนการแก้ไขข้อผิดพลาด ตามกฎของหัวแม่มือฉันเลือก 2X จำนวน bootstraps ที่ต้องการเพื่อทำให้ข้อผิดพลาดคงที่สำหรับพารามิเตอร์ ntree นี่เป็นเพราะปฏิสัมพันธ์ของตัวแปรมีความเสถียรในอัตราที่ช้ากว่าข้อผิดพลาด หากคุณไม่ได้รวมตัวแปรจำนวนมากในโมเดลคุณสามารถระมัดระวังมากกว่านี้ด้วยพารามิเตอร์นี้
  4. ห้ามใช้ความบริสุทธิ์ของโหนดเพื่อวัดความสำคัญของตัวแปร มันไม่ได้ถูกเปลี่ยนแปลงเช่นความถูกต้องเฉลี่ยลดลง

ฉันมีฟังก์ชั่นสำหรับการเลือกรุ่นความไม่สมดุลของคลาสและการตรวจสอบความถูกต้องในแพ็คเกจ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)

ฉันเห็นผลลัพธ์ที่ดีพอสมควรโดยใช้ RF และทำนาย () เพื่อระบุที่ครอบหลังคา อย่างไรก็ตามฉันไม่สามารถให้ผลลัพธ์ที่ดีกว่าอัลกอริทึม ISODATA ได้ ฉันสงสัยว่าตัวอย่างการฝึกของฉันมีอคติหรือมีการทับซ้อนสเปกตรัมมากเกินไป มีการใช้งาน RF ที่ไม่ได้รับการดูแลซึ่งอาจให้ผลลัพธ์ที่ดีกว่าหรือไม่ เป็นไปได้หรือไม่ที่จะกำหนดจำนวนคลาสให้กับเอาต์พุตตามที่คุณต้องการอัลกอริทึม ISODATA?
แอรอน

3
@Aaron เป็นไปได้ที่จะเรียกใช้ RF ที่ไม่มีป้ายกำกับ (ไม่มีการสำรองข้อมูล) แต่ผลลัพธ์นั้นยากที่จะจัดการ ฉันอยากจะแนะนำให้ดูที่วิธีการใส่ร้าย RF ที่มีอยู่ในแพคเกจ YaImpute สิ่งนี้อาจจัดการกับปัญหาอคติ / ไม่สมดุลบางอย่างที่คุณกำลังเผชิญอยู่
Jeffrey Evans

5

ฉันรู้ว่าเธรดนี้เก่าไปหน่อย แต่สำหรับใครที่ต้องการลองจัดหมวดหมู่ของข้อมูลการสำรวจระยะไกลRแพคเกจใหม่ที่มีแนวโน้มมากได้รับการเผยแพร่

install.packages("RSToolbox")

มันมาพร้อมกับฟังก์ชั่นสำหรับการจำแนกประเภทที่ไม่มีการดูแลและควบคุม (ใช้ป่าสุ่ม) ข้อมูลเพิ่มเติมสามารถดูได้ที่นี่ - http://bleutner.github.io/RStoolbox/


สิ่งนี้ดูมีแนวโน้มมากขอบคุณสำหรับการทำงานกับแพ็คเกจนี้ คำอธิบายอย่างเดียวคุณกำลังระบุฟอเรสต์แบบสุ่มผ่านคาเร็ตหรือไม่? ถ้าเป็นเช่นนั้นคุณควรทำให้ชัดเจนมากในเอกสารประกอบ แพ็คเกจคาเร็ตใช้สถิติการแยกโหนดที่แตกต่างจากข้อกำหนด Breiman (2001) ดั้งเดิม สถิติดังต่อไปนี้ Strobl et al., (2007) และสถิติที่เสนออาจใช้ได้ฉันไม่เคยซื้อเงื่อนไขการจำลองของเธอมาก่อน นอกจากนี้ความลำเอียงที่สังเกตได้นั้นขึ้นอยู่กับการเปลี่ยนแปลงในระดับปัจจัย ฉันชอบสถิติเอนโทรปีดั้งเดิมและไม่ควรใช้คาเร็ต
Jeffrey Evans

สวัสดี Jeffrey กลัวว่าฉันไม่ใช่คนเขียนแพ็คเกจ รายละเอียดของเขาสามารถพบได้ที่ลิงค์ที่ฉันให้
JPD


0

เนื่องจากปัญหาที่เกิดขึ้นจากการจำแนกภาพ CIR ที่มีความละเอียดสูงฉันขอแนะนำไม่ให้ใช้วิธีการดั้งเดิม (ใช้พิกเซล) สำหรับข้อมูลดาวเทียม แต่เพื่อทำการวิเคราะห์การแบ่งส่วนของภาพทางอากาศแล้วใช้ classier (RF)


3
ในกรณีที่วิธีการนี้เป็นวิธีที่ถูกต้องเราจะต้องไม่สันนิษฐานว่าการจำแนกประเภทโดยรวมนั้นตรงกับความต้องการของผู้ใช้ การแบ่งส่วนไม่ควรนำมาใช้เพียงเพื่อแก้ไขปัญหาความสามารถในการคำนวณ แต่เพื่อให้บรรลุเป้าหมายการวิเคราะห์ที่เฉพาะเจาะจง นี่ไม่ใช่วิธีการลบคำสั่งซื้อที่แทนที่วิธีการแบบพิกเซลโดยอัตโนมัติ หนึ่งต้องสมดุลการสูญเสียข้อมูลเนื่องจากสถิติ / เชิงพื้นที่ราบกับผลลัพธ์ที่ตั้งใจไว้ หากคุณสนใจในการแบ่งส่วนชุดรูปแบบเชิงพื้นที่อาจลบได้ ผลลัพธ์ยังขึ้นอยู่กับพารามิเตอร์การแบ่งกลุ่มอย่างมาก
Jeffrey Evans

ฉันเห็นด้วยกับคุณจริงๆแล้วแต่ละวิธีควรมุ่งไปที่เป้าหมายที่เฉพาะเจาะจง นี่คือเหตุผลที่ฉันแนะนำว่าด้วยภาพ CIR ที่มีความละเอียดสูง (ซึ่งอาจมีแถบสเปกตรัม จำกัด ) ชุดของตัวแปร GEOBIA ที่มีข้อมูลเสริมหรือค่าพื้นผิวสามารถปรับปรุงความแม่นยำขั้นสุดท้ายของการจำแนกได้อย่างมีนัยสำคัญโดยเฉพาะอย่างยิ่ง
วินเซนต์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.