我有一个在一堆NLP数据上训练的randomForest模型(每个单词的tf idf值(。我想用它来预测一个新的数据集。模型中的特征与新数据中的特征重叠,但并不完全匹配,因此当我对新数据进行预测时,我会得到:
Error in predict.randomForest(object = model, newdata = new_data) :
variables in the training data missing in newdata
我想通过排除模型中所有没有出现在新数据中的特征,以及新数据中所有没有显示在模型中的特征来避免这个错误。暂时不考虑对模型准确性的影响(这将大大减少特征的数量,但仍有很多可以预测的(,我做了这样的事情:
model$forest$xlevels <- model$forest$xlevels[colnames(new_data)]
# and vice versa
new_data <- new_data[names(model$forest$xlevels)]
只要names(model$forest$xlevels) == colnames(new_data)
为每个特征名称返回TRUE
,这就起到了作用。
然而,当我试图预测得到的new_data
时,我仍然得到variables in the training data missing in newdata
误差。我很确定我正在修改模型的正确部分(model$forest$xlevels
(,那么为什么它不起作用呢?
我认为你应该换一种方式。也就是将缺失的列添加到新数据中。
当您使用单词包时,某些新数据批次中不存在的单词是很常见的。这些缺失的单词应该被编码为一列零。
# do something like this (also exclude the target variable, obviously)
names_missing <- names(traindata)[!names(traindata) %in% names(new_data)]
new_data[,names_missing] <- 0L
然后你应该能够预测