สร้าง "คะแนนความมั่นใจ" จากคะแนนในป่าสุ่ม?


36

ฉันกำลังมองหาในการฝึกอบรมลักษณนามที่จะแยกแยะระหว่างType AและType Bวัตถุที่มีชุดการฝึกอบรมที่มีขนาดใหญ่พอสมควรประมาณ 10,000 วัตถุประมาณครึ่งหนึ่งของที่มีและครึ่งหนึ่งของที่มีType A Type Bชุดข้อมูลประกอบด้วย 100 คุณสมบัติอย่างต่อเนื่องซึ่งมีรายละเอียดคุณสมบัติทางกายภาพของเซลล์ (ขนาด, รัศมีเฉลี่ย, ฯลฯ ) การแสดงข้อมูลในสปิตเตอร์แพล็ตฟอร์มและแผนการแปลงความหนาแน่นบอกเราว่ามีการทับซ้อนกันอย่างมีนัยสำคัญในการแจกแจงของเซลล์มะเร็งและเซลล์ปกติในคุณลักษณะหลายอย่าง

ขณะนี้ฉันกำลังสำรวจป่าสุ่มเป็นวิธีการจำแนกสำหรับชุดข้อมูลนี้และฉันได้เห็นผลลัพธ์ที่ดี การใช้ R ป่าแบบสุ่มสามารถจำแนกวัตถุได้อย่างถูกต้องประมาณ 90%

หนึ่งในสิ่งที่เราต้องการลองทำคือการสร้าง "คะแนนความเชื่อมั่น" ที่จะบอกปริมาณว่าเรามีความมั่นใจในการจำแนกประเภทของวัตถุอย่างไร เรารู้ว่าลักษณนามของเราจะไม่ถูกต้อง 100% และแม้ว่าความแม่นยำสูงในการคาดการณ์ที่จะประสบความสำเร็จเราจะต้องการเทคนิคการฝึกอบรมที่จะระบุว่าวัตถุอย่างแท้จริงและType A Type Bดังนั้นแทนที่จะให้การคาดการณ์ที่แน่วแน่ของType AหรือType Bเราต้องการที่จะนำเสนอคะแนนสำหรับแต่ละวัตถุที่จะอธิบายถึงวิธีการAหรือBวัตถุ ตัวอย่างเช่นถ้าเรากำหนดคะแนนที่มีช่วงตั้งแต่ 0 ถึง 10 คะแนน 0 อาจบ่งบอกว่าวัตถุนั้นคล้ายกับType Aวัตถุมากในขณะที่คะแนน 10 จะบ่งบอกว่าวัตถุนั้นมีลักษณะคล้ายType Bกันมาก

ฉันคิดว่าฉันสามารถใช้คะแนนภายในป่าสุ่มเพื่อคิดคะแนนเช่นนี้ เนื่องจากการจำแนกในป่าสุ่มจะกระทำโดยการโหวตส่วนใหญ่ภายในป่าของต้นไม้ที่สร้างขึ้นฉันจะสมมติว่าวัตถุที่ได้รับการโหวต 100% ของต้นไม้Type Aจะแตกต่างจากวัตถุที่ได้รับการโหวตโดยพูดว่า 51% ของต้นไม้ Type Aเป็น

ขณะนี้ผมได้พยายามตั้งค่าเกณฑ์พลสำหรับสัดส่วนของคะแนนโหวตว่าวัตถุต้องได้รับที่จะจัดเป็นType Aหรือและถ้าเกณฑ์ไม่ผ่านก็จะถูกจัดเป็นType B Uncertainตัวอย่างเช่นถ้าผมบังคับเงื่อนไขที่ว่า 80% หรือมากกว่าของต้นไม้จะต้องยอมรับในการตัดสินใจสำหรับการจำแนกประเภทที่จะผ่านผมพบว่า 99% ของการคาดการณ์ระดับถูกต้อง แต่ประมาณ 40% Uncertainของวัตถุจะเป็นขยะ

ถ้าอย่างนั้นจะใช้ความได้เปรียบจากข้อมูลการลงคะแนนเพื่อให้คะแนนความแน่นอน หรือฉันกำลังมุ่งหน้าไปในทิศทางที่ผิดกับความคิดของฉัน?


ตรวจสอบให้แน่ใจว่าคุณมีชุดข้อมูลการฝึกอบรมและการทดสอบแยกต่างหาก ตรวจสอบให้แน่ใจว่าคุณใช้ชุดการทดสอบน้อยที่สุดเท่าที่จะทำได้ (นึกคิดเพียงครั้งเดียว)
Boris Gorelik

@bgbg ฉันใช้รูปแบบการฝึกอบรม / ตรวจสอบ / ตรวจสอบในการแยก 70/20/10 ฉันกำลังฝึกอบรมโมเดลที่มีข้อมูล 70% และปรับพารามิเตอร์ตามผลลัพธ์ของชุดการตรวจสอบความถูกต้อง 20% หลังจากที่ฉันปรับพารามิเตอร์ในสองชุดนี้ฉันประเมินโมเดลในชุดทดสอบ 10% แม้ว่า Breiman อ้างว่าอัตราความผิดพลาดในตัวของ OOB นั้นสร้างชุดการทดสอบแยกต่างหากซ้ำซ้อน แต่ฉันก็ระวังการเรียกร้องของเขา
ialm

คำตอบ:


19

มันใช้งานได้อย่างสมบูรณ์แบบและการใช้งานป่าสุ่มทั้งหมดที่ฉันได้ทำงานร่วมกับ (เช่น MATLAB's) จะให้ผลลัพธ์ที่น่าจะเป็นเช่นกัน

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

แก้ไข: เพียงแค่เหลือบมองไปที่ R และทำนายโดยสุ่มป่าไม้ก็มีความน่าจะเป็นเช่นกัน


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

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

@mbq ขออภัยคุณสามารถอธิบายสิ่งที่คุณหมายถึงโดยที่? ฉันสนใจคำแนะนำของคุณและจะติดตามเรื่องนี้ในวันพรุ่งนี้!
ialm

1
นอกจากนี้ความแปรปรวนใน RF ยังอยู่ในขั้นตอนการฝึกอบรมดังนั้นการรันตัวอย่างทดสอบหลายครั้งผ่านทาง RF จะไม่เปลี่ยนแปลงผลลัพธ์ ฉันจะดู AUC เทียบกับจำนวนต้นไม้ใน RF เพื่อให้แน่ใจว่าคุณมีต้นไม้เพียงพอแล้วปรับพารามิเตอร์ใบต่ำสุดให้เหมาะสมตาม AUC
benhamner

2
@ โจนาธานฉันคิดว่า mbq หมายถึงสิ่งที่มีการสอบเทียบชื่อ (แม้ว่าอาจมีชื่ออื่น) ดูตัวอย่างคำถามนี้: ปรับเทียบลักษณนามเพิ่มหลายคลาส , “ คุณค่าที่แท้จริง” หมายถึงอะไรในการจำแนกประเภทภายใต้การดูแล?
steffen

17

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

library(caret)
library(PerformanceAnalytics)
data(iris)

#Make a yes/no dataset
Dataset <- iris
Dataset$Class <- ifelse(Dataset$Species=='versicolor','Yes','No')
Dataset$Class  <- as.factor(Dataset$Class)
Dataset$Species<- NULL
chart.Correlation(Dataset[-5], col= Dataset$Class)

#Fit an RF model
model <- train(Class~.,Dataset,
                method='rf',TuneLength=3,
                trControl=trainControl(
                    method='cv',number=10,
                    classProbs = TRUE))
model$results

#Predict class probabilities (i.e. 'certainty' scores)
pred <- predict(model,iris,"prob")
head(pred)

สิ่งที่ดีเกี่ยวกับคาเร็ตคือมันทำให้ง่ายต่อการเปรียบเทียบแบบจำลองการทำนายที่แตกต่างกัน ตัวอย่างเช่นถ้าคุณต้องการที่จะลอง SVM คุณสามารถแทนที่ข้อความmethod='rf'ด้วยmethod='svmLinear'หรือmethod='svmRadial'. คุณยังสามารถเลือกค่าปรับของคุณขึ้นอยู่กับAUCมากกว่าความถูกต้องโดยการเพิ่มเส้นไปยังพารามิเตอร์ trainControl summaryFunction=twoClassSummaryไปนี้:

มีโค้ดอยู่เล็กน้อยจากแพ็คเกจ PerformanceAnalytics chart.Correlation(Dataset[-5], col= Dataset$Class)ซึ่งไม่จำเป็นในการสร้างแบบจำลอง แต่มีการแสดงภาพชุดข้อมูลของคุณเป็นอย่างดี


คุณกำลังทำให้ฉันเป็นแฟนตัวยงของแพ็คเกจ caret ฉันคิดว่าฉันจะยังคงเปิดเธรด R ที่สองเพื่อลองวิธีการจำแนกประเภทที่แตกต่างกันและให้คาเร็ตทำ CV และการปรับพารามิเตอร์ด้วยตัวเองและดูว่าฉันได้ผลลัพธ์ที่เปรียบเทียบได้ไหม
ialm

@ โจนาธานดีใจที่ได้ยินมัน! มันเป็นแพ็คเกจที่ยอดเยี่ยม ลองmodelLookup()คำสั่งสำหรับรายการสิ่งที่เป็นไปได้
Zach

probประเภทของpredictยังมีอยู่โดยใช้randomForestในการฝึกอบรมรูปแบบของคุณ (มีหรือไม่มีการใช้แพคเกจอื่น ๆ ชอบcaretหรือPerformanceAnalytics)
Hack-R

2

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

หากคุณใช้แพคเกจนั้นอยู่แล้วบางทีคุณอาจต้องการให้มันดูใกล้ขึ้นและถ้าคุณไม่ได้ลองใช้ดู

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.