Определите важные переменные в наивной байесовской модели - PullRequest
0 голосов
/ 11 июля 2020

Я разработал приведенную ниже модель Наивного Байеса, которая отлично работает:

set.seed(1234)
ind <- sample(2, nrow(Overall_NB_VoI), replace = T, prob = c(0.8, 0.2)) 
NBtrainer <- Overall_NB_VoI[ind == 1,] 
NBtester <- Overall_NB_VoI[ind == 2,] 
NBmodel <- naive_bayes(FTR ~ ., data = NBtrainer, usekernel = T)
NBmodel

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

library(caret)
varImp(NBmodel)

Вывод: Ошибка в UseMethod ("varImp"): нет применимого метода для 'varImp', примененного к объекту класса "naive_bayes"

library(rminer)
Importance(NBmodel, data = NBtrainer)

Вывод: Ошибка в PRED (M, data [(1: L),]): не удалось найти функцию «PRED»

В идеале, я хотел бы иметь возможность создать график различных функций

Любые советы были бы очень признательны

1 Ответ

0 голосов
/ 14 июля 2020

Чтобы использовать varImp() из caret, вам нужно обучить модель с кареткой. Вы можете проверить наивные байесовские модели доступные , а для пакета, который вы вызываете, он будет с опцией method="naivebayes".

Если вы хотите просто подогнать его без перекрестной проверки, вы можете установить для trainControl значение method="none", как показано ниже, используя пример набора данных:

Grid = data.frame(usekernel=TRUE,laplace = 0,adjust=1)

mdl = train(Class ~ .,data=Sonar,method="naive_bayes",
trControl=trainControl(method="none"),
tuneGrid=Grid)

Мы можем проверить класс, а также получить значение переменной:

class(mdl$finalModel)
[1] "naive_bayes"

varImp(mdl)
ROC curve variable importance

  only 20 most important variables shown (out of 60)

    Importance
V11     100.00
V12      86.30
V10      82.64
V49      82.12
V9       81.97
V48      73.16
V13      72.60
V51      70.68
V47      69.99
V52      66.62
V46      66.27
V45      61.13
V4       58.45
V36      58.43
V5       54.32
V1       53.82
V44      53.37
V21      51.01
V35      49.93
V8       49.78

Для rminer почти то же самое, вам нужно обучить модель, используя их функцию fit , но когда я проверил, кажется, что они используют naiveBayes из пакета e1071 для выполнения подгонки, поэтому не очень уверен, что это что вам нужно.

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