আমি একটা সিদ্ধান্ত গাছ একটি বাইনারি বিভক্ত ব্যবহারিক বাস্তবায়ন সম্পর্কে জানতে আগ্রহী am - যেমন একটি শ্রেণীগত predictor মাত্রা সম্পর্কিত ।
বিশেষত, আমি প্রায়শই সিদ্ধান্ত গাছ ব্যবহার করে ভবিষ্যদ্বাণীমূলক মডেল তৈরি করার সময় কিছু ধরণের স্যাম্পলিং স্কিম (যেমন ব্যাগিং, ওভারসাম্পলিং ইত্যাদি) ব্যবহার করব - এর ভবিষ্যদ্বাণীমূলক নির্ভুলতা এবং স্থায়িত্বের উন্নতির জন্য। এই স্যাম্পলিং রুটিনগুলির সময়, একটি শ্রেণিবদ্ধ ভেরিয়েবলের জন্য সম্পূর্ণ স্তরের সেটের চেয়ে কম গাছের সাথে মানানসই অ্যালগরিদমকে উপস্থাপন করা সম্ভব হয়।
বলুন একটি পরিবর্তনশীল এক্স স্তর গ্রহণ করে {A,B,C,D,E}
। একটি নমুনায়, সম্ভবত কেবলমাত্র স্তর {A,B,C,D}
উপস্থিত রয়েছে। তারপরে, যখন ফলস্বরূপ গাছ পূর্বাভাসের জন্য ব্যবহার করা হয়, সম্পূর্ণ সেট উপস্থিত থাকতে পারে।
এই উদাহরণ থেকে অব্যাহত রেখে বলুন যে একটি গাছ এক্স-এ বিভক্ত হয় এবং {A,B}
বামে এবং ডানে প্রেরণ করে {C,D}
। আমি তখন বাইনারি বিভক্তির যুক্তিটি তখন নতুন ডেটার মুখোমুখি হওয়ার জন্য আশা করব: "যদি এক্স এর মান A বা B থাকে তবে বামদিকে প্রেরণ করুন, অন্যথায়, এই কেসটি ডানদিকে প্রেরণ করুন"। কিছু বাস্তবায়নে যা ঘটবে বলে মনে হচ্ছে তা হল "যদি এক্স এর মান A বা B থাকে তবে বামদিকে প্রেরণ করুন, যদি X এর মান C বা D ডানদিকে প্রেরণ থাকে"। যখন এই কেসটি E এর মান নেয়, তবে অ্যালগরিদমটি ভেঙে যায়।
বাইনারি বিভাজন পরিচালনার জন্য "সঠিক" উপায় কী? দেখে মনে হচ্ছে অনেক বেশি শক্তিশালী উপায়ে প্রায়শই প্রয়োগ করা হয়, তবে সবসময় নয় (নীচে আরপার্ট দেখুন)।
এখানে কয়েকটি উদাহরণ দেওয়া হল:
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