R - 为 multinomial_naive_bayes() 函数生成的模型生成混淆矩阵和 ROC

R - Generate confusion matrix and ROC for model generated by multinomial_naive_bayes() function

我有一个数据集有很多 factor/categorical/nominal columns/variables/features。我需要为此数据创建一个多项式朴素贝叶斯分类器。我尝试使用 caret 库,但我不认为那是在做多项式朴素贝叶斯,我认为它是在做高斯朴素贝叶斯,详情 。我现在发现 multinomial_naive_bayes() 似乎很完美。它似乎可以毫无抱怨地处理预测变量中的空值和只有 1 个值的变量。

问题是,我不知道如何执行 multinomial_naive_bayes() 函数生成的模型的“post processing/analysis”。我想在模型和预测输出与测试数据上获得插入符样式的混淆矩阵来评估分类器。我还想生成一条 ROC 曲线。我该怎么做?

我已经包含了下面 multinomial_naive_bayes() 文档中的 sample/reference/example,我将如何更新此代码以获得我的 confusionMatricies 和 ROC 曲线。

来自:R 包“naivebayes”,部分:multinomial_naive_bayes 第 10 页

library(naivebayes)

### Simulate the data:
cols <- 10 ; rows <- 100
M <- matrix(sample(0:5, rows * cols, TRUE, prob = c(0.95, rep(0.01, 5))), nrow = rows, ncol = cols)
y <- factor(sample(paste0("class", LETTERS[1:2]), rows, TRUE, prob = c(0.3,0.7)))
colnames(M) <- paste0("V", seq_len(ncol(M)))
laplace <- 1

### Train the Multinomial Naive Bayes
mnb <- multinomial_naive_bayes(x = M, y = y, laplace = laplace)
summary(mnb)
    
# Classification
head(predict(mnb, newdata = M, type = "class")) # head(mnb %class% M)

# Posterior probabilities
head(predict(mnb, newdata = M, type = "prob")) # head(mnb %prob% M)

# Parameter estimates
coef(mnb)

您可以使用插入符号函数 confusionMatrix:

library(caret)
pred = predict(mnb, newdata = M, type = "class")
confusionMatrix(table(pred,y))

Confusion Matrix and Statistics

        y
pred     classA classB
  classA     10      3
  classB     20     67

或者如果因子水平相同:

confusionMatrix(pred,y)

对于ROC曲线,您需要提供预测的概率:

library(pROC)
roc_ = roc(y,predict(mnb, newdata = M, type ="prob")[,2])

plot(roc_)