【发布时间】:2011-04-05 21:27:35
【问题描述】:
我正在使用以下 R 代码生成混淆矩阵,将某些数据的真实标签与神经网络的输出进行比较。
t <- table(as.factor(test.labels), as.factor(nnetpredict))
但是,有时神经网络无法预测某个类别中的任何一个,因此表格不是正方形的(例如,test.labels 因子中有 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()) 函数的功能。 -
谢谢 - 没想到!
-
明白了——我明白你现在需要做什么了,这比我最初想象的要复杂一些。我稍后会考虑这个。你总是有重叠水平的因素吗?因子的顺序是否总是相同的?
-
谢谢 - 太好了。在这种情况下,我将有一个因素始终包含数字 0-9,而另一个因素将始终是其中的某个子集(大多数情况下它也将是完整的 0-9,但它是当不是我需要整理它时)。它们应该始终按升序排列,至少 table 命令似乎是这样做的。
标签: r machine-learning