我正在尝试找出一种方法来绘制 R 中具有多个相关结果变量的多元随机森林模型的形状值。
为了预测多元随机森林模型,我使用 R 包 randomforestSRC 的 rfsrc 函数。
这里是预测两个结果变量 mpg 和 wt 的示例。
library(randomForestSRC)
mod1 <- rfsrc(Multivar(mpg, wt )~., data = mtcars, importance=T)
randomForestSRC::print.rfsrc(mod1, outcome.target = "mpg")
randomForestSRC::print.rfsrc(mod1, outcome.target = "wt")
有没有办法绘制上述模型的形状值?
或者是否有另一个 R 包允许预测具有多个相关结果变量的多元随机森林模型,然后允许绘制 shap 值?
预先感谢任何愿意提供帮助的人!
PS:我找到了关于如何使用单个结果变量绘制随机森林模型的形状值的很好的说明(例如,请参见随机森林模型的形状图)。这些说明基于随机森林 R 包,据我所知,该包不允许运行具有多个结果变量的模型。
(我的){kernelshap} 和 {shapviz} 可以处理多输出模型,但是在
rfsrc::predict()
的结果中找到预测并不是那么容易......
library(randomForestSRC)
library(kernelshap)
library(shapviz)
mod1 <- rfsrc(Multivar(mpg, wt ) ~ ., data = mtcars, importance = TRUE)
x <- c("cyl", "disp", "hp", "drat", "qsec", "vs", "am", "gear", "carb")
pred_fun <- function(m, x) {
pred <- predict(m, newdata=x)$regrOutput
sapply(pred, `[[`, "predicted")
}
pred_fun(mod1, head(mtcars))
shap_values <- kernelshap(
mod1,
X = mtcars[x],
bg_X = mtcars, # Usually small random sample
pred_fun = pred_fun
)
sv <- shapviz(shap_values)
names(sv) <- c("mpg", "wt") # Not yet automatically
sv_importance(sv)
sv_dependence(sv, "cyl")