0

我正在尝试使用 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 也可能只获取数值数据。我认为是这样,因为当我查看错误时,我只看到分类数据也应该存在的整数。

4

1 回答 1

0

错误消息说您的 custom 有问题predFunction。我尝试了您的定义predFunction并以同样的错误告终。当我过去使用rangerforiml时,我predFunction以简单的方式定义如下

predFunction <- function(object, newdata) predict(object, data = newdata)$predictions

这对我来说很好。我相信这也应该对你有用。

于 2020-10-14T17:24:15.967 回答