如何将 tibble 传递给 caret::confusionmatrix()?
how to pass a tibble to caret::confusionmatrix()?
考虑这个简单的例子:
data_frame(truth = c(1,1,0,0),
prediction = c(1,0,1,0),
n_obs = c(100,10,90,50))
# A tibble: 4 x 3
truth prediction n_obs
<dbl> <dbl> <dbl>
1 1 1 100
2 1 0 10
3 0 1 90
4 0 0 50
我想将此 tibble
传递给 caret::confusionMatrix
以便我立即拥有我需要的所有指标(accuracy
、recall
等)。
如您所见,tibble
包含计算性能统计信息所需的所有信息。例如,您可以看到在测试数据集中(此处不可用),有 100 个观测值预测标签 1
与真实标签 1
匹配。但是,预测值为 1
的 90
个观测值实际上是误报。
我不想手动计算所有指标,而是想求助于 caret::confusionMatrix()
然而,事实证明这非常困难。在上面的 tibble
上调用 confusionMatrix(.)
不起作用。这里有什么解决办法吗?
谢谢!
您可以使用以下内容。您必须将正数 class 设置为 1,否则 0 将被视为正数 class。
confusionMatrix(xtabs(n_obs ~ prediction + truth , df), positive = "1")
Confusion Matrix and Statistics
truth
prediction 0 1
0 50 10
1 90 100
Accuracy : 0.6
95% CI : (0.5364, 0.6612)
No Information Rate : 0.56
P-Value [Acc > NIR] : 0.1128
Kappa : 0.247
Mcnemar's Test P-Value : 2.789e-15
Sensitivity : 0.9091
Specificity : 0.3571
Pos Pred Value : 0.5263
Neg Pred Value : 0.8333
Prevalence : 0.4400
Detection Rate : 0.4000
Detection Prevalence : 0.7600
Balanced Accuracy : 0.6331
'Positive' Class : 1
考虑这个简单的例子:
data_frame(truth = c(1,1,0,0),
prediction = c(1,0,1,0),
n_obs = c(100,10,90,50))
# A tibble: 4 x 3
truth prediction n_obs
<dbl> <dbl> <dbl>
1 1 1 100
2 1 0 10
3 0 1 90
4 0 0 50
我想将此 tibble
传递给 caret::confusionMatrix
以便我立即拥有我需要的所有指标(accuracy
、recall
等)。
如您所见,tibble
包含计算性能统计信息所需的所有信息。例如,您可以看到在测试数据集中(此处不可用),有 100 个观测值预测标签 1
与真实标签 1
匹配。但是,预测值为 1
的 90
个观测值实际上是误报。
我不想手动计算所有指标,而是想求助于 caret::confusionMatrix()
然而,事实证明这非常困难。在上面的 tibble
上调用 confusionMatrix(.)
不起作用。这里有什么解决办法吗?
谢谢!
您可以使用以下内容。您必须将正数 class 设置为 1,否则 0 将被视为正数 class。
confusionMatrix(xtabs(n_obs ~ prediction + truth , df), positive = "1")
Confusion Matrix and Statistics
truth
prediction 0 1
0 50 10
1 90 100
Accuracy : 0.6
95% CI : (0.5364, 0.6612)
No Information Rate : 0.56
P-Value [Acc > NIR] : 0.1128
Kappa : 0.247
Mcnemar's Test P-Value : 2.789e-15
Sensitivity : 0.9091
Specificity : 0.3571
Pos Pred Value : 0.5263
Neg Pred Value : 0.8333
Prevalence : 0.4400
Detection Rate : 0.4000
Detection Prevalence : 0.7600
Balanced Accuracy : 0.6331
'Positive' Class : 1