RandomForest - การตีความการแปลง MDS


14

ฉันใช้ randomForest เพื่อจำแนกพฤติกรรมสัตว์ 6 อย่าง (เช่นการยืนการเดินการว่ายน้ำ ฯลฯ ) โดยใช้ตัวแปร 8 ตัว (ท่าทางการเคลื่อนไหวและการเคลื่อนไหวที่แตกต่างกัน)

MDSplot ในแพ็คเกจ randomForest ให้ผลลัพธ์นี้กับฉันและฉันมีปัญหาในการตีความผลลัพธ์ ฉันทำ PCA ด้วยข้อมูลเดียวกันและได้รับการแยกที่ดีระหว่างคลาสทั้งหมดใน PC1 และ PC2 แล้ว แต่ที่นี่ Dim1 และ Dim2 ดูเหมือนจะแยกพฤติกรรม 3 อย่างเท่านั้น สิ่งนี้หมายความว่าพฤติกรรมทั้งสามนี้มีความแตกต่างมากกว่าพฤติกรรมอื่น ๆ ทั้งหมด (ดังนั้น MDS จึงพยายามค้นหาความแตกต่างที่ยิ่งใหญ่ที่สุดระหว่างตัวแปร แต่ไม่จำเป็นต้องเป็นตัวแปรทั้งหมดในขั้นตอนแรก) การจัดตำแหน่งของทั้งสามคลัสเตอร์ (เช่นใน Dim1 และ Dim2) บ่งชี้ว่าอย่างไร เนื่องจากฉันค่อนข้างใหม่สำหรับ RI ก็มีปัญหาในการพล็อตเรื่องนี้ (แต่ฉันมีความคิดว่าสีที่ต่างกันหมายถึงอะไร) แต่บางทีใครบางคนอาจช่วยได้? ขอบคุณมาก!!

MDS แบบสุ่มป่าไม้จาก 6 พฤติกรรมสัตว์ที่แตกต่างกัน

ฉันเพิ่มพล็อตที่สร้างด้วยฟังก์ชัน ClassCenter ใน RandomForest ฟังก์ชันนี้ยังใช้เมทริกซ์ความใกล้ชิด (เช่นเดียวกับใน MDS Plot) สำหรับการพล็อตต้นแบบ แต่จากการดูดาต้าพอยน์สำหรับพฤติกรรมหกอย่างที่แตกต่างกันฉันไม่สามารถเข้าใจได้ว่าทำไมเมทริกซ์ความใกล้ชิดจะพล็อตต้นแบบของฉันอย่างที่มันเป็น ฉันยังลองใช้ฟังก์ชั่น classcenter ด้วยข้อมูล iris และใช้งานได้ แต่ดูเหมือนว่ามันใช้ไม่ได้กับข้อมูลของฉัน ...

นี่คือรหัสที่ฉันใช้สำหรับพล็อตนี้

be.rf <- randomForest(Behaviour~., data=be, prox=TRUE, importance=TRUE)
class1 <- classCenter(be[,-1], be[,1], be.rf$prox)
Protoplot <- plot(be[,4], be[,7], pch=21, xlab=names(be)[4], ylab=names(be)[7], bg=c("red", "green", "blue", "yellow", "turquoise", "orange") [as.numeric(factor(be$Behaviour))])
points(class1[,4], class1[,7], pch=21, cex=2, bg=c("red", "green", "blue", "yellow", "turquoise", "orange"))

คอลัมน์คลาสของฉันเป็นคอลัมน์แรกตามด้วยตัวทำนาย 8 ตัว ฉันได้วางแผนตัวแปรตัวทำนายที่ดีที่สุดสองตัวคือ x และ y

แผนพล็อต ClassForest RandomForest สำหรับ 6 พฤติกรรมสัตว์ที่แตกต่างกัน

คำตอบ:


10

ฟังก์ชั่น MDS แปลงพล็อต (PCA ของ) เมทริกซ์ความใกล้ชิด จากเอกสารสำหรับ randomForest เมทริกซ์ความใกล้เคียงคือ:

เมทริกซ์ของการวัดความใกล้ชิดระหว่างอินพุต (ตามความถี่ที่คู่ของจุดข้อมูลอยู่ในเทอร์มินัลโหนดเดียวกัน)

จากคำอธิบายนี้เราสามารถเดาได้ว่าความหมายที่แตกต่างกันคืออะไร คุณดูเหมือนจะระบุ k = 4 ซึ่งหมายถึงการสลายตัวของเมทริกซ์ความใกล้ชิดใน 4 องค์ประกอบ สำหรับแต่ละรายการ (i, j) ในเมทริกซ์ของพล็อตนี้สิ่งที่ถูกพล็อตคือการย่อยสลาย PCA ตามมิติ i กับการสลายตัว PCA ตามมิติ j

ฉันทำ PCA จากข้อมูลเดียวกันและได้รับการแยกที่ดีระหว่างคลาสทั้งหมดใน PC1 และ PC2 แล้ว แต่ที่นี่ Dim1 และ Dim2 ดูเหมือนจะแยกพฤติกรรม 3 อย่างเท่านั้น สิ่งนี้หมายความว่าพฤติกรรมทั้งสามนี้มีความแตกต่างมากกว่าพฤติกรรมอื่น ๆ ทั้งหมด (ดังนั้น MDS จึงพยายามค้นหาความแตกต่างที่ยิ่งใหญ่ที่สุดระหว่างตัวแปร แต่ไม่จำเป็นต้องเป็นตัวแปรทั้งหมดในขั้นตอนแรก)

MDS สามารถวิเคราะห์โดยอิงจากผลลัพธ์ของป่าสุ่มของคุณเท่านั้น หากคุณคาดหวังว่าจะมีการแยกจากกันดีกว่าคุณอาจต้องการตรวจสอบประสิทธิภาพการจำแนกประเภทของป่าสุ่มของคุณ สิ่งที่ควรทราบอีกอย่างคือ PCA ของคุณกำลังทำการแมปข้อมูล 9 มิติถึง 2 มิติ แต่ MDS คือการแมปจากเมทริกซ์ความใกล้เคียงมิติ NxN ไปเป็น 2 มิติโดยที่ N คือจำนวนดาต้าพอยน์

การจัดตำแหน่งของทั้งสามกลุ่ม (เช่นใน Dim1 และ Dim2) บ่งชี้ว่าอย่างไร

มันแค่บอกคุณว่ากระจุก (เหล่านี้) ห่างกันมากแค่ไหน มันเป็นเครื่องมือสร้างภาพข้อมูลดังนั้นฉันจะไม่ตีความมากไป

เนื่องจากฉันค่อนข้างใหม่สำหรับ RI ก็มีปัญหาในการพล็อตเรื่องนี้ (แต่ฉันมีความคิดว่าสีที่ต่างกันหมายถึงอะไร) แต่บางทีใครบางคนอาจช่วยได้?

วิธีการทำงานของ R ไม่มีทางที่จะพล็อตตามตำนานได้ (เหมือน Matlab ที่ซึ่งข้อมูลนี้ถูกเก็บไว้ในวัตถุรูป) อย่างไรก็ตามการดูรหัสสำหรับ MDSplot เราเห็นว่าการบล็อกรหัสที่เกี่ยวข้องคือ:

palette <- if (require(RColorBrewer) && nlevs < 12) brewer.pal(nlevs, "Set1")

...

plot(rf.mds$points, col = palette[as.numeric(fac)], pch = pch, ...)

ดังนั้นสีจะถูกพรากไปจากจานสีนั้นและถูกจับคู่กับระดับ (พฤติกรรม) ตามลำดับที่คุณได้รับ ดังนั้นหากคุณต้องการพล็อตตำนาน:

legend(x,y,levels(fac),col=brewer.pal(nlevs, 'Set1'), pch=pch)

อาจจะทำงาน


ขอบคุณมากสำหรับคำตอบของคุณนี่เป็นประโยชน์จริงๆ !! ประสิทธิภาพการจำแนกประเภทของโมเดลฟอเรสต์แบบสุ่มของฉันค่อนข้างดี (อัตราความผิดพลาด OOB 4.94% และความแม่นยำ 95% ด้วย CV) นั่นเป็นสาเหตุที่ฉันคาดว่าจะมีการแยกส่วนที่ดีขึ้นในพล็อต MDS ฉันพยายามพล็อตร่างด้วย function classCenter สำหรับต้นแบบของคลาส (ฉันทำตามตัวอย่างม่านตาในคู่มือ RF) แต่เมื่อฟังก์ชั่นใช้เมทริกซ์ความใกล้ชิดต้นแบบก็ดูเหมือนจะไม่สมเหตุสมผล แต่ในพล็อตนี้มันชัดเจนว่าคลาสแยกจากกันอย่างชัดเจน แต่ต้นแบบไม่ได้
Pat

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