我正在使用以下R代码生成混淆矩阵,将一些数据的真实标签与神经网络的输出进行比较。
t <- table(as.factor(test.labels), as.factor(nnetpredict))
然而,有时神经网络不会预测某个特定类别的任何结果,因此表格就不是正方形的(例如,在测试标签要素中有5个级别,但在nnetpredict要素中只有3个级别)。 我想通过添加必要的任何要素级别并将它们的计数设置为零来使表格成为正方形。
我应该如何做呢?
示例:
> table(as.factor(a), as.factor(b))
1 2 3 4 5 6 7 8 9 10
1 1 0 0 0 0 0 0 1 0 0
2 0 1 0 0 0 0 0 0 1 0
3 0 0 1 0 0 0 0 0 0 1
4 0 0 0 1 0 0 0 0 0 0
5 0 0 0 0 1 0 0 0 0 0
6 0 0 0 0 0 1 0 0 0 0
7 0 0 0 0 0 0 1 0 0 0
您可以在上面的表格中看到,有7行但是10列,因为因素a只有7个水平,而因素b有10个水平。我想要做的是用零填充表格,使行标签和列标签相同,并且矩阵是正方形的。从上面的例子可以看出,这将产生以下结果:
1 2 3 4 5 6 7 8 9 10
1 1 0 0 0 0 0 0 1 0 0
2 0 1 0 0 0 0 0 0 1 0
3 0 0 1 0 0 0 0 0 0 1
4 0 0 0 1 0 0 0 0 0 0
5 0 0 0 0 1 0 0 0 0 0
6 0 0 0 0 0 1 0 0 0 0
7 0 0 0 0 0 0 1 0 0 0
8 0 0 0 0 0 0 0 0 0 0
9 0 0 0 0 0 0 0 0 0 0
10 0 0 0 0 0 0 0 0 0 0
我需要这样做的原因有两个:
- 用于向用户显示/在报告中展示
- 这样我就可以使用函数计算Kappa统计量,该函数需要按此格式格式化的表格(方形,行和列标签相同)
t
,以保留转置(t()
)函数的功能。 - Chase