【问题标题】:How can I use a machine learning model to predict on data whose features differ slightly?如何使用机器学习模型来预测特征略有不同的数据?
【发布时间】:2020-12-23 14:08:32
【问题描述】:

我有一个基于一堆 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),为什么它不起作用?

【问题讨论】:

    标签: r machine-learning nlp random-forest


    【解决方案1】:

    我认为你应该反过来。也就是将缺失的列添加到新数据中。

    当您处理词袋时,通常会有一些新数据中不存在的词。这些缺失的单词应该被编码为一列零。

    # 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
    

    然后你应该能够预测

    【讨论】:

    • 你是一个传奇,谢谢你,工作就像一个魅力。也比我想出的更简洁/优雅的代码。
    猜你喜欢
    • 2019-11-19
    • 2017-03-16
    • 2023-03-04
    • 2020-01-18
    • 2020-11-14
    • 2013-12-05
    • 2021-01-14
    • 2021-02-06
    • 2020-02-09
    相关资源
    最近更新 更多