如何构建多类变量的混淆矩阵

6
假设我有一个因素变量 y,它有n个级别,我既有预测值又有实际结果。如何构建混淆矩阵?
set.seed(12345)
y_actual = as.factor(sample(c('A','B', 'C', 'D', 'E'), 100, replace = TRUE))
set.seed(12346)
y_predict = as.factor(sample(c('A','B', 'C', 'D', 'E'), 100, replace = TRUE))

这个问题针对n=2的情况已经得到了答案,请参见R: how to make a confusion matrix for a predictive model?我的尝试 这是我目前为止的进展。
ones = data.frame(total = rep(1,100));
confusion = aggregate(ones, list(Prediction = predict, Reality = real), sum, a.action=0)
confusion

  Prediction Reality total
1          A       A    12
2          B       A     5
3          C       A    15
4          A       B    15
5          B       B     7
6          C       B     8
7          A       C    12
8          B       C    16
9          C       C    10

现在需要将其转化为矩阵形式。

背景

混淆矩阵的水平标签是“真实类别”,垂直标签是“预测类别”。矩阵元素仅仅是如下计数:

元素(1,1) = 真实类别为A且预测类别也为A的数量

元素(1,2) = 真实类别为A但预测类别为B的数量

等等


table(y_actual, y_predict)? - A5C1D2H2I1M1N2O1R2T1
@AnandaMahto,没问题,这很完美。为什么不回答这个问题呢? - sjdh
2个回答

11

你应该能够按照自己的想法使用 table

table(y_actual, y_predict)
#         y_predict
# y_actual A B C D E
#        A 4 3 4 2 8
#        B 7 1 3 6 2
#        C 3 7 1 0 4
#        D 3 6 6 4 6
#        E 6 5 5 1 3

9

只需使用来自caret包的confusionMatrix函数。

require(caret)
confusionMatrix(y_actual, y_predict)



          Reference
Prediction  A  B  C
         A 12  5 15
         B 15  7  8
         C 12 16 10

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接