Мне не удалось открыть ссылки, предоставленные вами для набора данных и вывода.Однако я использую ту же ссылку, которую вы указали https://cran.r -project.org / web / packages / lime / vignettes / Understanding_lime.html .Я использую text2vec, как он есть в ссылке, и пакет xgboost для классификации;и это работает для меня.Чтобы отобразить больше функций, вам может потребоваться увеличить значение n_features в функции объяснения, см. https://www.rdocumentation.org/packages/lime/versions/0.4.0/topics/explain.
library(lime)
library(xgboost) # the classifier
library(text2vec) # used to build the BoW matrix
# load data
data(train_sentences, package = "lime") # from lime
data(test_sentences, package = "lime") # from lime
# Tokenize data
get_matrix <- function(text) {
it <- text2vec::itoken(text, progressbar = FALSE)
# use the following lines if you want to prune vocabulary
# vocab <- create_vocabulary(it, c(1L, 1L)) %>%
# prune_vocabulary(term_count_min = 10, doc_proportion_max = 0.2)
# vectorizer <- vocab_vectorizer(vocab )
# there is no option to prune the vocabulary, but it is very fast for big data
vectorizer <- hash_vectorizer(hash_size = 2 ^ 10, ngram = c(1L, 1L))
text2vec::create_dtm(it,vectorizer = vectorizer) # hash_vectorizer())
}
# BoW matrix generation
# features should be the same for both dtm_train and dtm_test
dtm_train <- get_matrix(train_sentences$text)
dtm_test <- get_matrix(test_sentences$text)
# xgboost for classification
param <- list(max_depth = 7,
eta = 0.1,
objective = "binary:logistic",
eval_metric = "error",
nthread = 1)
xgb_model <-xgboost::xgb.train(
param,
xgb.DMatrix(dtm_train, label = train_sentences$class.text == "OWNX"),
nrounds = 100
)
# prediction
predictions <- predict(xgb_model, dtm_test) > 0.5
test_labels <- test_sentences$class.text == "OWNX"
# Accuracy
print(mean(predictions == test_labels))
# what are the most important words for the predictions.
n_features <- 5 # number of features to display
sentence_to_explain <- head(test_sentences[test_labels,]$text, 6)
explainer <- lime::lime(sentence_to_explain, model = xgb_model,
preprocess = get_matrix)
explanation <- lime::explain(sentence_to_explain, explainer, n_labels = 1,
n_features = n_features)
#
explanation[, 2:9]
# plot
lime::plot_features(explanation)
В вашем коде NA создаются в следующей строке при применении к набору данных train_sentences.Пожалуйста, проверьте ваш код на предмет следующего.
dataset$Liked = factor(dataset$Liked, levels = c(0, 1))
Удаление уровней или изменение уровней для меток работает для меня.
Пожалуйста, проверьте свою структуру данных и убедитесь, что ваши данные не являются нулевыми матрицами из-заэти NA, или это не слишком редко.Это также может вызвать проблему, поскольку он не может найти лучшие n функций.