使用LIME预测R中的logit模型?

时间:2018-08-14 13:59:29

标签: r glm lime

因此,我正在尝试使用LIME来理解R中logit模型的预测。我知道我“不需要”,但是我试图说明该模型可以简单地理解为一个模型的作用。演示的起点。

但是我很难使它正常工作。我确信这是由于model.predict方面造成的,但是我的一些解决方案没有用。

基本上,这就是我想做的:

model.logit <- glm(formula = formula, data = build.dat, family = binomial(link = "logit"))


train.x <- build.dat[ , all.vars(formula[[3]])] 
test.x <- reject.dat[1:100, all.vars(formula[[3]])]

explainer <- lime(train.x, as_classifier(model.logit ), n_bins = 20, quantile_bins = TRUE)

explain.me <- lime::explain(test.x[2 , ], explainer, n_labels = 1, n_features = 8, n_permutations = 5000, 
                        feature_select = "forward_selection", type = "response" )

现在我得到了错误

Error in match.arg(type) :'arg' should be one of “link”, “response”, “terms”

但是在“石灰”代码中移动我的“类型=“响应””并不能解决问题。

并且我尝试创建一个函数“ predict_model.glm”,由于我在使用randomForest并使其正常工作时所发生的事情,因此我认为可以纠正此问题:

predict_model.glm <- function(x, newdata, type = "response" ) {
res <- as.data.frame(c(predict(x, newdata = newdata, type = type), 1-predict(x, newdata = newdata, type = type)))

}

但这似乎只会增加错误。

我确信这是由于我缺少“石灰”方面正在寻找的内容(因此我无法使用“ predict_model.glm”函数进行更正),但是我似乎在任何地方都找不到澄清之处。

任何帮助都会很棒,谢谢!

1 个答案:

答案 0 :(得分:0)

您必须在predict_model.glm中转换预测的输出。第一步,我建议打印type和调用predict的结果的第一行。取决于传入的类型,对glm的调用和返回的结果将有所不同-?predict_model对此进行了提示:对于'raw',它是一个res,对于'prob',它是几率(或者对于线性而言型号:数值结果。)

总体而言,据我(希望)了解您的情况,类似于该功能的功能可能会让您迈出一步:

predict_model.glm <- function(x, newdata, type, ...) { 
  print(type)
  res <- predict(x, newdata);
  print(res[1])
  data.frame(Response = res)
}