【问题标题】:R - Random Forest - Delete New factor levels not present in the training dataR - 随机森林 - 删除训练数据中不存在的新因子水平
【发布时间】:2017-02-22 06:21:38
【问题描述】:

我正在使用 Random Forest 包调试代码,之前几乎没有 R 经验。

我已经到了执行predict.randomForest 时出现错误的地步:

训练数据中不存在新的因子水平。

搜索这个网站我找到了原因并明白我需要删除导致问题的记录。

如何隔离(找出)导致问题的列/行?

【问题讨论】:

  • 首先检查预测变量矩阵中的哪些列是因子。您可以运行str(X),其中X 是您的训练数据中的预测变量矩阵。然后在您的测试数据中执行相同的操作,并查看输出以查看哪些具有不同的数量或级别集。
  • 谢谢! RF 对象上有很多东西......你指的是哪个预测矩阵?以及如何检查每列是否是一个因素?

标签: r machine-learning random-forest categorical-data r-factor


【解决方案1】:

假设您有用于构建模型的 train.data、您现在想要对其进行预测的 test.data 以及您的因子变量 factor.var1,那么您可以这样做:

levels(test.data$factor.var1) %in% levels(train.data$factor.var1)

这将生成与 test.data 中的因子级别对应的逻辑向量,其中“FALSE”条目是您的 train.data 中不存在的因子级别。

【讨论】:

  • 如果你想同时处理一堆变量,你可以使用lapply(c([names of variables that are factors in quotes separated by commas]), levels(test.data[,x]) %in% levels(train.data[,x])
  • 两辆坦克!!!我已经有了预测变量的每个因素的水平。但至于训练中的那个……它在一个复杂的 RandomForest 对象中……我怎么知道如何获取实际数据?
  • 如果您无权访问训练数据,我不确定您将如何获得该信息 - R randomForest documentation 可以向您显示 RF 对象返回的内容,我看不到任何有助于获得关卡的东西。如果可以的话,我建议您获取训练数据。
  • 我有培训的输入......但它可能有一些事先处理(我不知道,因为我没有做到)。所以我想我会检查培训输出。此输出是包含此对象的 .RData 文件。这个对象不是在某处包含这些级别吗?我的意思是:“process.randomforest”方法如何知道训练中不存在级别?谢谢!
【解决方案2】:

对此的简单解决方案是 rbind 测试数据与训练数据并预测,然后子集您想要预测的行。这对我有用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-20
    • 2021-07-06
    • 2015-10-20
    • 2013-06-25
    • 2016-11-05
    • 2018-06-13
    • 2017-01-22
    • 2021-03-21
    相关资源
    最近更新 更多