我需要在java中创建混淆矩阵。数据以平面文本文件的形式提供。我有两个文本文件。一个文件的实际数据看起来像这样
Amit: PersonName
Sam St: Address
第二个文件中的预测数据看起来像这样。
val Array(a,b) = line.split("\\s+").map(_.toInt)
有没有人知道如何创建混淆矩阵并计算所需的所有误报,假阴性,真阴性和真阳性。
答案 0 :(得分:1)
所以基本上混淆矩阵是2D matrix
,大小为n*n
。其中n
代表要预测的可能类别的数量。
现在我们需要维护n个类别的索引数组。例如:
{Cat, Dog, Lion, Tiger}
假设您有预测值和实际值的列表:
Act Pred
Cat Cat
Cat Dog
Dog Lion
Lion Lion
etc etc
现在假设这个数组可以转换为与前一个数组对应的坐标列表:
A P
0 0
0 1
etc etc
现在2D array
中要更新的条目属于上述索引。
代码看起来像这样:
String[] a = new String[] {"airplanes", "butterfly", "flower", "grand_piano", "starfish", "watch"};
Category = Arrays.asList(a);
int [][] confMatrix = new int[6][6];
for (Instance inst : predictedValues ) {
String outLabel = inst.getPredictedLabel();
String actualLabel = inst.getLabel();
int outLabelIndex = Category.indexOf(outLabel);
int actualLabelIndex = Category.indexOf(actualLabel);
confMatrix[actualLabelIndex][outLabelIndex] += 1;
}
答案 1 :(得分:0)
我有类似的要求。除了自己计算之外,您还可以使用一些现有功能。我发现例如https://github.com/habernal/confusion-matrix