决策树中二进制拆分的实现差异
我对决策树中二进制拆分的实际实现感到好奇-因为它与分类预测变量级别有关。XjXjX{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 …