r - 有没有人尝试过使用带有游侠回归模型的 iml 包中的 Shapley 函数?
问题描述
我正在尝试使用 iml 包来构建 Shapely 图。根据包和这篇文章中给出的文档,如果使用的模型不是来自受支持的包(如插入符号),则必须定义自定义预测函数。当我尝试使用用于回归的游侠模型尝试 Shapely 绘图时,出现错误。
我正在执行的代码:
featuresData <- as.data.frame(AAads[, c(numVars,factVars, "noiseInformation")])
responseData <- as.numeric(as.vector(AAads[,depVar]))
predFunction <- function(model, newData) {
results <- predict(object = model, data = newData)
results <- as.numeric(as.vector(results$predictions))
return(results)
}
predictorRf <- Predictor$new(model = rfModel, data = featuresData, y = responseData, predict.fun = predFunction)
到目前为止没有错误,当我为数据实例的 Shapely plot 执行以下代码时,出现错误:
shapley = Shapley$new(predictor = predictorRf, x.interest = trainingData[1,])
(函数(模型,newData)中的错误:未使用的参数(newdata = list(30、6063047、523433、51、36、8、6、5、3、1、2、4、3、2、42、0.226619379129261))
错误显示的值列表是第一行值 trainingData[1,]
在这里,“AAads”是一个数据框,其中包含用于训练和测试模型的所有数据,“trainingData”是它的一个子集。“rfModel”是一个游侠回归模型。“numVars”和“factVars”是数值和因子自变量列表,“noiseInformation”是用作自变量的随机数据,用于检查变量重要性、PDP 和 Shapely 图的健全性。
注意:我可以使用替代解决方案,例如通过插入符号的训练功能构建游侠模型或使用支持的 randomForest,但我有兴趣了解我目前的方法缺少什么。一种猜测是,我在自变量中有分类数据,即使存在分类数据,Shapely 也可能只获取数值数据。我认为是这样,因为当我查看错误时,我只看到分类数据也应该存在的整数。
解决方案
错误消息说您的 custom 有问题predFunction
。我尝试了您的定义predFunction
并以同样的错误告终。当我过去使用ranger
foriml
时,我predFunction
以简单的方式定义如下
predFunction <- function(object, newdata) predict(object, data = newdata)$predictions
这对我来说很好。我相信这也应该对你有用。
推荐阅读
- matlab - 如何使用 Matlab APP DESIGNER 在用户界面中同时显示两个单独的图像?
- r - 反转翻转的 x 轴
- pandas - 使用多索引按时间段对数据帧进行分组
- python - 向 Celery eta 任务发送 2 个参数
- javascript - 如何让多个提供者或状态仅可用于部分布局
- wpf - 按钮未占用全部空间
- pandas - 相同键行的平均值,不包括 pandas 中的某些列
- flutter - Flutter:如何动态创建水平时间线小部件
- c# - 将 Azure KeyVault 机密转换为 RSACng 或 RSACryptoServiceProvider
- python - 如何获得 keras 中每个类的准确性?