我希望有人能够帮我解决我在R中的randomForest软件包的预测函数时遇到的问题。当我尝试预测我的测试数据时,我一直遇到同样的错误:
到目前为止,这是我的代码:
extractFeatures <- function(RCdata) {
features <- c(4, 9:13, 17:20)
fea <- RCdata[, features]
fea$Week <- as.factor(fea$Week)
fea$Age_Range <- as.factor(fea$Age_Range)
fea$Race <- as.factor(fea$Race)
fea$Referral_Source <- as.factor(fea$Referral_Source)
fea$Referral_Source_Category <- as.factor(fea$Referral_Source_Category)
fea$Rehire <- as.factor(fea$Rehire)
fea$CLFPR_.HS <- as.factor(fea$CLFPR_.HS)
fea$CLFPR_HS <- as.factor(fea$CLFPR_HS)
fea$Job_Openings <- as.factor(fea$Job_Openings)
fea$Turnover <- as.factor(fea$Turnover)
return(fea)
}
gp <- runif(nrow(RCdata))
RCdata <- RCdata[order(gp), ]
train <- RCdata[1:4600, ]
test <- RCdata[4601:6149, ]
rf <- randomForest(extractFeatures(train), suppressWarnings(as.factor(train$disposition_category)), ntree=100, importance=TRUE)
testpredict <- predict(rf, extractFeatures(test))
"Error in predict.randomForest(rf, extractFeatures(test)) :
Type of predictors in new data do not match that of the training data."
我尝试在代码中添加以下行,但仍然收到相同的错误:
testpredict <- predict(rf, extractFeatures(test), type="prob")
我发现错误的来源是训练数据具有在测试数据中找不到的一级或两级的事实。因此,当我尝试另一个建议时,我发现在线将测试数据的级别调整为训练数据的级别,我在训练和测试集中使用的字段中保持NULL值。
levels(test$Referral)
NULL
然而,当我使用该功能时,我可以看到水平。
levels(as.factor(test$Referral))
然后我尝试了我在网上找到的相同建议,使用以下功能将测试级别调整为等于训练数据的级别并收到错误:
levels(as.factor(test$Referral)) -> levels(as.factor(train$Referral))
Error in `levels<-.factor`(`*tmp*`, value = c(... :
number of levels differs
我确信我缺少一些简单的东西(我仍然是R的新手),所以你能提供的任何见解都会令人难以置信。谢谢!