微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有 RandomForestSRC 包的因子变量重要性 (VIMP):无法强制转换为 data.frame 错误

如何解决带有 RandomForestSRC 包的因子变量重要性 (VIMP):无法强制转换为 data.frame 错误

大家下午好——提前感谢您的帮助!我对 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,...)
}

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

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

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

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

非常感谢大家的帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。