ผมอยากรู้เกี่ยวกับการดำเนินการในทางปฏิบัติของการแยกไบนารีในต้นไม้ตัดสินใจ - เป็นที่เกี่ยวกับระดับของเด็ดขาดทำนาย{J}
โดยเฉพาะฉันมักจะใช้รูปแบบการสุ่มตัวอย่างบางอย่าง (เช่นการบรรจุถุงการใส่ตัวอย่างมากเกินไป) เมื่อสร้างแบบจำลองการทำนายโดยใช้ต้นไม้การตัดสินใจ - เพื่อปรับปรุงความแม่นยำและความมั่นคงของการทำนาย ในระหว่างขั้นตอนการสุ่มตัวอย่างเหล่านี้เป็นไปได้ที่ตัวแปรหมวดหมู่จะถูกนำเสนอไปยังอัลกอริทึมการปรับแต่งแบบต้นไม้ที่น้อยกว่าชุดระดับที่สมบูรณ์
พูดตัวแปร X {A,B,C,D,E}
จะใช้เวลาในระดับ ในตัวอย่างอาจจะเพียงระดับ{A,B,C,D}
ที่มีอยู่ จากนั้นเมื่อมีการใช้ต้นไม้ผลลัพธ์สำหรับการทำนายอาจจะมีชุดเต็ม
ต่อจากตัวอย่างนี้พูดต้นไม้แยกบน X และส่ง{A,B}
ไปทางซ้ายและ{C,D}
ไปทางขวา ฉันคาดว่าตรรกะของการแบ่งไบนารีจะพูดเมื่อต้องเผชิญกับข้อมูลใหม่: "ถ้า X มีค่า A หรือ B ให้ส่งไปทางซ้ายมิฉะนั้นส่งกรณีนี้ไปทางขวา" สิ่งที่ดูเหมือนจะเกิดขึ้นในการนำไปใช้งานบางอย่างคือ "ถ้า X มีค่า A หรือ B ส่งไปทางซ้ายถ้า X มีค่า C หรือ D ส่งไปทางขวา" เมื่อกรณีนี้ใช้กับค่า E อัลกอริธึมจะพังลง
วิธี "ถูกต้อง" สำหรับการแยกแบบไบนารีที่จะจัดการคืออะไร? ดูเหมือนว่าจะมีการใช้วิธีที่มีประสิทธิภาพมากกว่านี้ แต่ไม่เสมอไป (ดู Rpart ด้านล่าง)
นี่คือตัวอย่างบางส่วน:
Rpart ล้มเหลวส่วนอื่น ๆ ก็โอเค
#test trees and missing values
summary(solder)
table(solder$PadType)
# create train and validation
set.seed(12345)
t_rows<-sample(1:nrow(solder),size=360, replace=FALSE)
train_solder<-solder[t_rows,]
val_solder<-solder[-t_rows,]
#look at PadType
table(train_solder$PadType)
table(val_solder$PadType)
#set a bunch to missing
levels(train_solder$PadType)[train_solder$PadType %in% c('L8','L9','W4','W9')] <- 'MISSING'
#Fit several trees, may have to play with the parameters to get them to split on the variable
####RPART
mod_rpart<-rpart(Solder~PadType,data=train_solder)
predict(mod_rpart,val_solder)
#Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = attr(object, :
#factor 'PadType' has new level(s) D6, L6, L7, L8, L9, W4
####TREE
mod_tree<-tree(Solder~PadType,data=train_solder,split="gini")
predict(mod_tree,val_solder) #works fine
####ctree
mod_ctree<-ctree(Solder~PadType,data=train_solder,control = ctree_control(mincriterion = 0.05))
predict(mod_ctree,val_solder) #works fine