1

大家下午好——提前感谢您的帮助!我对 R 有点陌生,所以如果这是一个微不足道或不恰当的问题,我深表歉意。

TL; DR:我正在尝试使用内置的随机森林模型 RandomForestSRC 确定因子变量的变量重要性 (VIM),这不是该包的内置功能。使用 LIME 和 DALEX 包,我遇到了同样的错误:cannot coerce class 'c("rfsrc, "predict", "class")' to a data.frame. 任何解决此错误的帮助或替代方法将不胜感激!

我有一个使用 RandomForestSRC 包在 R 中构建的随机森林模型。该模型似乎工作得很好——训练和测试都很顺利,得到了我需要的预测输出,结果似乎符合我的预期。不幸的是,其中一个要求是我需要能够说明模型是如何得出结论的(例如,我还需要将变量重要性作为输出的一部分),包括连续变量和因子变量。

这似乎不是 RandomForestSRC 包的内置功能,所以我研究了 LIME 和 DALEX 包,它们都应该能够从现有的 RF 模型中分离出 VIM。不幸的是,它们都没有对 RFSRC 包的原生支持,这意味着我需要自己构建预测函数,正如这个小插图所推荐的那样:https ://uc-r.github.io/dalex

model_type.rfsrc <- function (x, ...) {
    return ('classification')
}

predict_model.rfsrc <- function (x, newdata, type, ...) {
    as.data.frame(predict(x, newdata, ...)
}

不幸的是,在运行模型的 VIM 部分(在 LIME 和 DALEX 中)时,我被要求传递预测输出和创建该输出的模型。在这样做时,它会遇到上述predict_model函数的错误:

error in as.data.frame.default(predict(model, (newdata))):
cannot coerce class 'c("rfsrc, "predict", "class")' to a data.frame

而且,就像……当然,它不能;它试图将模型本身变成一个数据框。不幸的是,虽然我认为我理解为什么 R 会给我这个错误,但这是我自己能够弄清楚的。

此外,我使用 RandomForestSRC 包有两个原因:它不限制因子变量的数量,并且它可以处理不平衡的数据。我正在处理医疗数据,所以这两个都是必要的(例如,有大约 100,000 个不同的医疗代码可以编码在一个数据变量中,以及“没有这个的人”的比率-condition”与“people-who-do-have-this-condition”通常是 100 比 1)。但是,如果有人对处理这些问题的替代软件包有任何建议,并且具有内置的 VIM 功能(或与 DALEX / LIME 集成),那也很棒。

非常感谢大家的帮助!

4

0 回答 0