【发布时间】:2014-07-21 18:49:52
【问题描述】:
当尝试在因子水平少于我的训练数据的新测试数据上测试我的训练模型时,predict() 返回以下内容:
新数据中的预测变量类型与训练数据中的预测变量类型不匹配。
我的训练数据有一个具有 7 个因子水平的变量,而我的测试数据有一个具有 6 个因子水平的相同变量(所有 6 个都在训练数据中)。
当我添加一个包含“缺失”第 7 个因素的观察时,模型会运行,所以我不确定为什么会发生这种情况,甚至不知道它背后的逻辑。
我可以看到测试集是否有更多/不同的因子水平,然后 randomForest 会窒息,但为什么在训练集有“更多”数据的情况下?
【问题讨论】:
-
因为如果级别不完全匹配,它们可能会被不同地编码。因子将标签与整数相关联。因此,如果因子的创建方式不同,“男性”可能是一组中的 1 和另一组中的 2。这意味着您可能会预测到与您预期不同的事情。 R 只是确认所有级别都相同是安全的。您不需要添加观察值来使它们匹配,您只需要调整因子的
levels()。 -
感谢您的回答。当我运行levels(train$data) 和levels(test$data) 时,除了train$data 末尾有一个额外的因素之外,数字会排成一行。这是否意味着我每次都必须手动降低该级别?
-
所有级别必须匹配。您不必降低该级别,只需将该级别添加到测试数据中的因子即可。您可以在不添加观察值的情况下添加级别。你可以做
test$val <- factor(test$val, levels=levels(train$val))或类似的事情。你这里没有reproducible example,所以很难具体说明 -
这非常有效。感谢您的清晰解释。
标签: r random-forest