R直觉中的'lime'包

问题描述 投票:1回答:1

我正在研究以下示例:这是一个二进制分类示例。我想确保这里的一些直觉是正确的,因为关于lime软件包的文件相对较少,因此没有太多文档。

示例输出

library(xgboost)
library(dplyr)
library(caret)
library(insuranceData) # example dataset https://cran.r-project.org/web/packages/insuranceData/insuranceData.pdf
library(lime) # Local Interpretable Model-Agnostic Explanations
set.seed(123)
data(dataCar)
mydb <- dataCar %>% select(clm, exposure, veh_value, veh_body,
                           veh_age, gender, area, agecat)

label_var <- "clm"  
offset_var <- "exposure"
feature_vars <- mydb %>% 
  select(-one_of(c(label_var, offset_var))) %>% 
  colnames()

#preparing data for xgboost (one hot encoding of categorical (factor) data
myformula <- paste0( "~", paste0( feature_vars, collapse = " + ") ) %>% as.formula()
dummyFier <- caret::dummyVars(myformula, data=mydb, fullRank = TRUE)
dummyVars.df <- predict(dummyFier,newdata = mydb)
mydb_dummy <- cbind(mydb %>% select(one_of(c(label_var, offset_var))), 
                    dummyVars.df)
rm(myformula, dummyFier, dummyVars.df)


feature_vars_dummy <-  mydb_dummy  %>% select(-one_of(c(label_var, offset_var))) %>% colnames()

xgbMatrix <- xgb.DMatrix(
  data = mydb_dummy %>% select(feature_vars_dummy) %>% as.matrix, 
  label = mydb_dummy %>% pull(label_var),
  missing = "NAN")


#model 2 : this works
myParam2 <- list(max.depth = 2,
                 eta = .01,
                 gamma = 0.001,
                 objective = 'binary:logistic',
                 eval_metric = "logloss")


booster2 <- xgb.train(
  params = myParam2, 
  data = xgbMatrix, 
  nround = 50)

explainer <- lime(mydb_dummy %>% select(feature_vars_dummy), 
                  model = booster2)

explanation <- explain(mydb_dummy %>% select(feature_vars_dummy) %>% head,
                       explainer,
                       n_labels = 2, ###### NOTE: I added this value, not sure if it should be '=1' or '=2' for binary classification.
                       n_features = 2)


plot_features(explanation)

以上代码讨论了属于分类问题的保险索赔,是索赔还是非索赔。

问题:

n_labels的功能是什么-我对自己的问题有一个二进制分类,因此n_lables对应于01吗?

在示例here中,作者讨论了malignantbenignlabels。但是,当我针对自己的分类问题(我确保为0绘制的数据中存在1plot_features(explanation)观测值运行代码,但labels与该观察结果的真实价值...

对于我自己的问题,我有以下plot

我设置了n_labels = 1(此图与上面的代码不同(但仍然是分类问题)。)>

case 2中,在labels header下有一个1的结果-我可以假定是二进制分类预测?但是,当我输出二进制输出的实际true结果时,我得到以下1 0 1 0 1 0,即我正在读取模型预测case 1被归类为0,实际上它是1case 2预测为1,实际上为0case 3预测为0,实际上它为1case 4预测为0,实际上是0等...这是不正确的吗?顺便说一句,我使用了xgb模型进行预测。

第二;图中的所有0情况(因此,情况1、3、4、5、6)都具有相似的特征...而情况2是不同的,并且它具有影响模型的其他变量/特征(我仅是图4模型中的变量(同样,我不知道它们是随机绘制还是由某些importance score绘制)。

[我引用Understading lime here的分析

在此概述中,很清楚看到案例195和416的行为相似,而第三例良性病例(7)有一个异常大的裸核,在不影响最终效果的情况下降低了其良性状态预测(表明其其他特征的值是弥补这一奇数)。毫不奇怪,显然高测量值表明恶性肿瘤。

[如果有人可以给我一些关于上图的直觉/分析,这对我来说是朝正确方向迈出的重要一步。

我正在研究以下示例:这是一个二进制分类示例。我要确保我的一些直觉在这里是正确的,因为关于石灰包的文档不多...

r xgboost lime
1个回答
0
投票

为了获得对该方法及其解释的一些直觉,我写了一篇博客文章,其中我使用类似的方法(带有完整的文档代码)重建LIME:Explainable AI (XAI)… Explained! Or: How to whiten any Black Box with LIME

© www.soinside.com 2019 - 2024. All rights reserved.