根据列车数据帧更改测试数据帧的级别

时间:2017-08-04 06:09:48

标签: r dataframe

我使用随机森林算法训练模型。现在,我想在仅包含一条记录的数据集上使用此模型预测结果。

当我尝试执行预测命令时,它会抛出以下错误。

predict.randomForest(model,test1,type =" response")中的错误:   新数据中预测变量的类型与训练数据的类型不匹配。

注意到这是因为训练和测试数据框中因子变量的级别不同。

所以我在stakoverflow中找到了一个使用脚本修改级别的解决方案

common <- intersect(names(train), names(test1)) 
for (p in common) { if (class(train[[p]]) == "factor") { levels(test1[[p]]) <- levels(train[[p]]) } }

请参阅以下链接查询。

r random forest error - type of predictors in new data do not match

但不幸的是,它改变了大多数变量的数据值。

例如:

在test1数据框中有一个变量名称&#34;类别&#34;有价值&#34;&gt; = 100&#34;它变为&#34; 11-50&#34;

1 个答案:

答案 0 :(得分:0)

我们只需更改factor

nm1 <- names(which(sapply(train, is.factor)))
for (p in nm1) { 
    levels(test1[[p]]) <- levels(train[[p]]) 
 } 

如果它基于randomForest,我们甚至不必查找train数据。从xlevels对象获取model,并根据该列分配levels'test1'列

lvlslst <- model[["forest"]][["xlevels"]]
lvlsCols <- names(lvlslst)[sapply(lvlslst, is.character)]
for(j in lvlsCols) {
   levels(test1[[j]]) <- lvlslst[[j]]

}