如何使用机器学习模型预测特征稍有不同的数据?

问题描述

我有一个基于大量NLP数据(每个单词的tf-idf值)训练的randomForest模型。我想用它来预测新的数据集。模型中的特征与新数据中的特征重叠但不完全匹配,因此当我预测新数据时,我得到:

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

然后您应该可以预测