我一直在使用randomForest包作为分类模型,只有分类因素作为预测因子。当测试中有新级别不在训练中时,预测功能通常会失败。为了解决这个问题,我添加了以下缺失的级别:
mname<-get(model)
for ( k in 1:ncol(dataFrame))
{
col<-names(dataFrame[k])
modelLevels <- mname$forest$xlevels[[col]]
orig<-levels(dataFrame[,k])
misses <-setdiff(modelLevels,orig)
origOrdered <- orig[order(match(orig,modelLevels))] # Not sure if ordering matters
missOrdered <- misses[order(match(misses,modelLevels))] # Not sure if ordering matters
if(length(misses) > 0) { levels(dataFrame[,k]) <- as.character(c(origOrdered,missOrdered)) }
}
prediction <- data.frame(predict(mname,dataFrame,type = "prob"))$X1
此预测根据为预测提供的数据帧的大小,返回相同输入向量的不同值。
例如,如果我发送一个只有2行的数据帧,则返回0,0的值,而如果我传递一个包含相同两行的更大的数据帧,它会为相同的两行抛出0.066667的预测值?
有人可以澄清这种行为的原因是什么?我无法在此处分享数据。