用JAVA打印出混淆矩阵

时间:2014-11-11 03:18:56

标签: java matrix printing hashmap confusion-matrix

这可能听起来很愚蠢!但是,我指望找到任何简单的例子来引用! 有人可以举一个使用java打印混淆矩阵的例子吗?

类似的东西(输出):

p\a   Head    Tail
Head    1      4
Tail    4      1

假设数据存储在HashMap中,就像这样

HashMap<String,Integer>
String = "Head, Tail"
Integer = 4

更新(示例代码):

public static void main(String[] args) {

        HashMap<String,Integer> cmatrix = new HashMap<String,Integer>();

        //the string part can hold more the 2 values, all separated with comma
        cmatrix.put("tail, head", 1);
        cmatrix.put("head ,tail", 4);
        cmatrix.put("tail, tail", 1);
        cmatrix.put("head, head", 4);

        for (Map.Entry entry : cmatrix.entrySet()) {
            System.out.println(entry.getKey() +" : "+entry.getValue());
        }
    }

谢谢!

2 个答案:

答案 0 :(得分:2)

为了简化代码,我们假设源数据中没有空格:

cmatrix.put("tail,head", 1);
cmatrix.put("head,tail", 4);
cmatrix.put("tail,tail", 1);
cmatrix.put("head,head", 4);

首先,我们需要收集类的名称:

Set<String> classNames = new HashSet<String>();
for(String key : cmatrix.keySet()) {
    String[] classes = key.split(",");
    if(classes != null && classes.length > 0) {
        classNames.addAll(Arrays.asList(classes));
    }
}

接下来,对类名进行排序:

List<String> sortedClassNames = new ArrayList<String>();
sortedClassNames.addAll(classNames);
Collections.sort(sortedClassNames);

然后打印出标题行。

System.out.print("p/a");
for(String predictedClassName : sortedClassNames) {
    System.out.print("\t" + predictedClassName);
}
System.out.println();

然后打印出每一行:

for(String actualClassName : sortedClassNames) {
    System.out.print(actualClassName);
    for(String predictedClassName : sortedClassNames) {
        Integer value = cmatrix.get(actualClassName + "," + predictedClassName);
        System.out.print("\t");
        if(value != null) {
            System.out.print(value);
        }
    }
    System.out.println();
}

我会离开&#39;漂亮的&#39;输出作为读者的练习。

答案 1 :(得分:1)

混淆矩阵非常复杂,值得研究一个开源解决方案。一个很容易被集成到代码而不添加大量不必要的额外内容的是here。其他数据科学/ nlp软件包也将实现作为其分发的一部分,即使使用整个库太多,源文件也可以提供有关如何执行它的指导。

使用其中之一的好处是,它们还为您提供免费的一些指标以及作为占位符矩阵,例如Cohen的Kappa度量和更基本的精确度/召回率和F度量分数