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