确定朴素贝叶斯模型中重要性的变量

时间:2020-07-11 12:16:15

标签: r r-caret naivebayes

我开发了下面的Naive Bayes模型,该模型运行良好:

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”)中的错误: 没有适用于“ naive_bayes”类对象的“ varImp”适用方法

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

输出:PRED(M,data [(1:L),])中的错误:找不到函数“ PRED”

理想情况下,我希望能够创建不同功能的图形

任何建议将不胜感激

1 个答案:

答案 0 :(得分:0)

要使用varImp()中的caret,您需要使用插入符号训练模型。您可以检查朴素贝叶斯模型available,对于要调用的包,可以选择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函数来训练模型,但是当我检查时,似乎他们使用软件包e1071中的naiveBayes执行拟合,所以不是非常确定这是否是您所需要的。