Номер дела эквивалентен номеру строки данных в Lime? - PullRequest
0 голосов
/ 30 января 2019

Только что обнаружил пакет Lime в R и все еще пытаюсь полностью понять пакет.Я зашла в тупик, хотя визуализация с использованием plot_features

Пожалуйста, извините за мою наивность.

У меня такой вопрос, является ли номер случая для каждой строки последовательным?Другими словами, является ли случай 416 эквивалентным строке 416 в данных?Если нет, то как узнать строку, к которой относится каждый номер дела?Plot of feature weights

Пример кода для воспроизведения изображения выше:

library(MASS)
library(lime)
data(biopsy)
biopsy$ID <- NULL
biopsy <- na.omit(biopsy)
biopsy2 = data.frame(ID = 1:nrow(biopsy), biopsy)
names(biopsy2) <- c('ID','clump thickness', 'uniformity of cell size', 
                   'uniformity of cell shape', 'marginal adhesion',
                   'single epithelial cell size', 'bare nuclei', 
                   'bland chromatin', 'normal nucleoli', 'mitoses',
                   'class')
# Now we'll fit a linear discriminant model on all but 4 cases
set.seed(4)
test_set <- sample(seq_len(nrow(biopsy2)), 4)
prediction <- biopsy2$class
biopsy2$class <- NULL
model <- lda(biopsy2[-test_set, ], prediction[-test_set])
predict(model, biopsy2[test_set, ])
explainer <- lime(biopsy2[-test_set,], model, bin_continuous = TRUE, quantile_bins = FALSE)
explanation <- explain(biopsy2[test_set, ], explainer, n_labels = 1, n_features = 4)
plot_features(explanation, ncol = 1)

РЕДАКТИРОВАТЬ: Добавлен дополнительный столбец в таблицу биопсии под названием ID

1 Ответ

0 голосов
/ 30 января 2019

Как вы можете видеть в explanation, на графике мы идем по каждому случаю, начиная с начала:

head(explanation[, 1:5])
      model_type case  label label_prob  model_r2
1 classification  416 benign  0.9943635 0.5432439
2 classification  416 benign  0.9943635 0.5432439
3 classification  416 benign  0.9943635 0.5432439
4 classification  416 benign  0.9943635 0.5432439
5 classification    7 benign  0.9527375 0.6586789
6 classification    7 benign  0.9527375 0.6586789

Однако, поскольку каждый случай имеет несколько строк, это может быть неплохой идеей.знать, каким линиям соответствовать, делать их.Для этого вы можете использовать

which(416 == explanation$case)
# [1] 1 2 3 4

, чтобы

explanation[which(416 == explanation$case), 1:5]
#       model_type case  label label_prob model_r2
# 1 classification  416 benign  0.9949716 0.551287
# 2 classification  416 benign  0.9949716 0.551287
# 3 classification  416 benign  0.9949716 0.551287
# 4 classification  416 benign  0.9949716 0.551287
...