2014-11-11 6 views
0

Это может показаться глупым! Но, я считаю, найти простой пример для ссылки! Может кто-нибудь, пожалуйста, привести пример печати матрицы замешательства с помощью java?Печатать матрицу смешения с 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()); 
     } 
    } 

спасибо!

+1

Я никогда не слышал о матрице «замешательства». Является ли эта стандартная терминология? ** Редактирование ** Я предполагаю, что это: [Матрица замешательства] (http://en.wikipedia.org/wiki/Confusion_matrix). –

+2

Что касается вашего решения - пожалуйста, покажите свой код, код для настройки проблемы и код, в котором вы пытаетесь его решить. –

+2

Ваша матрица замешательства слишком меня смутила. Пожалуйста, четко сформулируйте свою проблему и передайте код, который вы пробовали до сих пор. –

ответ

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(); 
} 

Я оставлю «prettying до» выхода в качестве упражнения для читателя.

+0

приятно, но в этой строке: classNames.addAll (Collections.toList (classes)); toList не принимается? он говорит: «Метод toList (String []) не определен для типа Collections« – et3rnal

+0

Я заменил его на этот классNames.addAll (Arrays.asList (classes)); Я думаю, что исправил это: D – et3rnal

+0

Хорошее пятнистое - я отредактирую по вашему исправлению. Я написал код из памяти. – Jason

1

Матрицы путаницы достаточно сложны, что стоит взглянуть на решение с открытым исходным кодом. Тот, который легко интегрируется в код без добавления ненужных дополнительных функций, - here. Другие пакеты data science/nlp также имеют реализации как часть их распространения, и даже если использование всей библиотеки слишком много, исходные файлы могут дать указания относительно того, как это сделать.

Преимущество использования одного из них заключается в том, что они также дают вам некоторые показатели бесплатно, а также являются матрицей-заполнителем, такой как мера Каппы Коэна и более базовые оценки точности/отзыва/и оценки F-меры.