2014-06-30 200 views
0

我正在与随机森林中的R包一个错误的位置后,我分裂使用插入符号为训练和测试,当我去预测我的数据遇到错误:随机森林从测试预测误差集

Error in predict.randomForest(randomForestFit, type = "response", newdata =testing$GEN) 
:number of variables in newdata does not match that in the training data 

我从完全相同的文件中分离列车和测试之间的文件。任何数据中都没有N/A或缺失值。以下是我的完整代码,但我认为那里没有错误。我对这个错误发生的原因感到不知所措。任何想法将不胜感激!

library(caret) 
require(foreign) 

set.seed(825) 
data <- read.spss("C:/MODEL_SAMPLE.sav",use.value.labels=TRUE, to.data.frame = TRUE) 
inTraining <- createDataPartition(data$GEN, p = 0.75, list = FALSE) 
training <- data[inTraining, ] 
testing <- data[-inTraining, ] 


library(randomForest) 
library(foreach) 

start.time <- Sys.time() 

randomForestFit <- foreach(ntree=rep(63, 8), .combine=combine, .packages='randomForest')   
        %dopar% randomForest(training[-201], 
             training$GEN, 
             mtry = 40, 
             ntree=ntree, 
             verbose = TRUE, 
             importance = TRUE, 
             keep.forest=TRUE, 
             do.trace = TRUE) 

randomForestFit 

predict = predict(randomForestFit, type="response", newdata=testing$GEN) 

stopCluster(cl) 
end.time <- Sys.time() 
time.taken <- end.time - start.time 
time.taken 

回答

0

没有这些数据,任何人都很难说出问题究竟是什么。

三点建议:

首先,检查数据杂散字符SPSS文件。

其次,从read.spss中检查选项是否设置正确:reencode = NA,use.missings = to.data.frame。您可以使用后面的选项来指定要转换为NA的非数字字符。

第三,使用str(df),summary(df,useNA =“if if”)并确保您的因子变量包括响应实际上是因子。将as.numeric(as.character())应用于数据框中的数字数据,如果在数据框中存在像VALUE !, #NA等表达式,则会生成NA值。

您也可以从SPSS导出到csv并再次执行上述操作。

+0

检查整个数据集的N/A,VALUE!并缺少任何东西。没有出现。所有变量都是数字,除了dep是2因子var(是/否)之外。 – CooperBuckeye05

+0

好吧,你是否尝试阅读csv?我以前在阅读一个非常大的SPSS文件时遇到了问题,这对我很有用。使用read.csv中的选项:stringsAsFactors = FALSE,strip.white = TRUE,na.strings = c(“NA”,“”,“n/a”,“null”),如果需要可以添加其他选项。 – RVNorman

+0

也保存到CSV,它完全导出/打开。然后扫描csv文件中的N/A和值!以及空间......什么也没有 – CooperBuckeye05