/* * File: AbstractConfusionMatrixTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Foundry Learning Core * * Copyright February 19, 2011, Sandia Corporation. * Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive * license for use of this work by or on behalf of the U.S. Government. Export * of this program may require a license from the United States Government. */ package gov.sandia.cognition.learning.performance.categorization; import gov.sandia.cognition.learning.performance.categorization.AbstractConfusionMatrix; import gov.sandia.cognition.learning.performance.categorization.DefaultConfusionMatrix; import org.junit.Test; import static org.junit.Assert.*; /** * Unit tests for class AbstractConfusionMatrix. * * @author Justin Basilico * @since 3.1 */ public class AbstractConfusionMatrixTest { public static final double EPSILON = 1e-10; /** * Creates a new test. */ public AbstractConfusionMatrixTest() { } protected AbstractConfusionMatrix<String> createEmptyInstance() { return new DefaultConfusionMatrix<String>(); } protected AbstractConfusionMatrix<String> createExampleInstance() { // Based on the example here: http://www.colorado.edu/geography/gcraft/notes/manerror/html/kappa.html AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); instance.add("a", "a", 2); instance.add("a", "c", 2); instance.add("b", "b", 1); instance.add("c", "a", 1); instance.add("c", "c", 1); instance.add("d", "d", 2); instance.add("d", "e", 1); instance.add("e", "e", 6); return instance; } /** * Test of add method, of class AbstractConfusionMatrix. */ @Test public void testAdd() { AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); assertEquals(0, instance.getTotalCount(), 0.0); assertEquals(0, instance.getCount("a", "a"), 0.0); assertEquals(0, instance.getCount("a", "b"), 0.0); assertEquals(0, instance.getCount("b", "a"), 0.0); assertEquals(0, instance.getCount("b", "b"), 0.0); instance.add("a", "b"); assertEquals(1, instance.getTotalCount(), 0.0); assertEquals(0, instance.getCount("a", "a"), 0.0); assertEquals(1, instance.getCount("a", "b"), 0.0); assertEquals(0, instance.getCount("b", "a"), 0.0); assertEquals(0, instance.getCount("b", "b"), 0.0); instance.add("b", "b"); assertEquals(2, instance.getTotalCount(), 0.0); assertEquals(0, instance.getCount("a", "a"), 0.0); assertEquals(1, instance.getCount("a", "b"), 0.0); assertEquals(0, instance.getCount("b", "a"), 0.0); assertEquals(1, instance.getCount("b", "b"), 0.0); instance.add("b", "a", 3); assertEquals(5, instance.getTotalCount(), 0.0); assertEquals(0, instance.getCount("a", "a"), 0.0); assertEquals(1, instance.getCount("a", "b"), 0.0); assertEquals(3, instance.getCount("b", "a"), 0.0); assertEquals(1, instance.getCount("b", "b"), 0.0); instance.add("b", "b", 4); assertEquals(9, instance.getTotalCount(), 0.0); assertEquals(0, instance.getCount("a", "a"), 0.0); assertEquals(1, instance.getCount("a", "b"), 0.0); assertEquals(3, instance.getCount("b", "a"), 0.0); assertEquals(5, instance.getCount("b", "b"), 0.0); } /** * Test of addAll method, of class AbstractConfusionMatrix. */ @Test public void testAddAll() { AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); assertTrue(instance.isEmpty()); instance.addAll(this.createEmptyInstance()); assertTrue(instance.isEmpty()); assertEquals(0, instance.getTotalCount(), 0.0); assertEquals(0, instance.getCount("a", "a"), 0.0); assertEquals(0, instance.getCount("a", "b"), 0.0); assertEquals(0, instance.getCount("b", "a"), 0.0); assertEquals(0, instance.getCount("b", "b"), 0.0); AbstractConfusionMatrix<String> other = this.createEmptyInstance(); other.add("a", "b"); instance.addAll(other); assertEquals(1, instance.getTotalCount(), 0.0); assertEquals(0, instance.getCount("a", "a"), 0.0); assertEquals(1, instance.getCount("a", "b"), 0.0); assertEquals(0, instance.getCount("b", "a"), 0.0); assertEquals(0, instance.getCount("b", "b"), 0.0); other.clear(); other.add("b", "b"); other.add("b", "a", 3); other.add("b", "b", 4); instance.addAll(other); assertEquals(9, instance.getTotalCount(), 0.0); assertEquals(0, instance.getCount("a", "a"), 0.0); assertEquals(1, instance.getCount("a", "b"), 0.0); assertEquals(3, instance.getCount("b", "a"), 0.0); assertEquals(5, instance.getCount("b", "b"), 0.0); instance = this.createExampleInstance(); instance.addAll(this.createEmptyInstance()); assertEquals(16.0, instance.getTotalCount(), 0.0); instance.addAll(instance); assertEquals(32.0, instance.getTotalCount(), 0.0); instance.addAll(this.createExampleInstance()); assertEquals(48.0, instance.getTotalCount(), 0.0); } /** * Test of isEmpty method, of class AbstractConfusionMatrix. */ @Test public void testIsEmpty() { AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); assertTrue(instance.isEmpty()); instance.add("a", "b"); assertFalse(instance.isEmpty()); instance.clear(); assertTrue(instance.isEmpty()); instance = this.createExampleInstance(); assertFalse(instance.isEmpty()); instance.clear(); assertTrue(instance.isEmpty()); } /** * Test of getTotalCount method, of class AbstractConfusionMatrix. */ @Test public void testGetTotalCount() { AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); assertEquals(0.0, instance.getTotalCount(), 0.0); instance = this.createExampleInstance(); assertEquals(16.0, instance.getTotalCount(), 0.0); } /** * Test of getTotalCorrectCount method, of class AbstractConfusionMatrix. */ @Test public void testGetTotalCorrectCount() { AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); assertEquals(0.0, instance.getTotalCorrectCount(), 0.0); instance = this.createExampleInstance(); assertEquals(12.0, instance.getTotalCorrectCount(), 0.0); } /** * Test of getTotalIncorrectCount method, of class AbstractConfusionMatrix. */ @Test public void testGetTotalIncorrectCount() { AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); assertEquals(0.0, instance.getTotalIncorrectCount(), 0.0); instance = this.createExampleInstance(); assertEquals(4.0, instance.getTotalIncorrectCount(), 0.0); } /** * Test of getActualCount method, of class AbstractConfusionMatrix. */ @Test public void testGetActualCount() { AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); assertEquals(0.0, instance.getActualCount("a"), 0.0); assertEquals(0.0, instance.getActualCount("b"), 0.0); assertEquals(0.0, instance.getActualCount("c"), 0.0); assertEquals(0.0, instance.getActualCount("d"), 0.0); assertEquals(0.0, instance.getActualCount("e"), 0.0); assertEquals(0.0, instance.getActualCount("f"), 0.0); instance = this.createExampleInstance(); assertEquals(4.0, instance.getActualCount("a"), 0.0); assertEquals(1.0, instance.getActualCount("b"), 0.0); assertEquals(2.0, instance.getActualCount("c"), 0.0); assertEquals(3.0, instance.getActualCount("d"), 0.0); assertEquals(6.0, instance.getActualCount("e"), 0.0); assertEquals(0.0, instance.getActualCount("f"), 0.0); } /** * Test of getPredictedCount method, of class AbstractConfusionMatrix. */ @Test public void testGetPredictedCount() { AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); assertEquals(0, instance.getPredictedCount("a"), 0.0); assertEquals(0, instance.getPredictedCount("b"), 0.0); assertEquals(0, instance.getPredictedCount("c"), 0.0); assertEquals(0, instance.getPredictedCount("d"), 0.0); assertEquals(0, instance.getPredictedCount("e"), 0.0); assertEquals(0, instance.getPredictedCount("f"), 0.0); instance = this.createExampleInstance(); assertEquals(3, instance.getPredictedCount("a"), 0.0); assertEquals(1, instance.getPredictedCount("b"), 0.0); assertEquals(3, instance.getPredictedCount("c"), 0.0); assertEquals(2, instance.getPredictedCount("d"), 0.0); assertEquals(7, instance.getPredictedCount("e"), 0.0); assertEquals(0, instance.getPredictedCount("f"), 0.0); } /** * Test of getAccuracy method, of class AbstractConfusionMatrix. */ @Test public void testGetAccuracy() { AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); assertTrue(Double.isNaN(instance.getAccuracy())); instance = this.createExampleInstance(); assertEquals(0.75, instance.getAccuracy(), 0.0); } /** * Test of getCategoryAccuracy method, of class AbstractConfusionMatrix. */ @Test public void testGetCategoryAccuracy() { AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); assertTrue(Double.isNaN(instance.getCategoryAccuracy("a"))); assertTrue(Double.isNaN(instance.getCategoryAccuracy("b"))); assertTrue(Double.isNaN(instance.getCategoryAccuracy("c"))); assertTrue(Double.isNaN(instance.getCategoryAccuracy("d"))); assertTrue(Double.isNaN(instance.getCategoryAccuracy("e"))); assertTrue(Double.isNaN(instance.getCategoryAccuracy("f"))); instance = this.createExampleInstance(); assertEquals(2.0 / 4.0, instance.getCategoryAccuracy("a"), 0.0); assertEquals(1.0 / 1.0, instance.getCategoryAccuracy("b"), 0.0); assertEquals(1.0 / 2.0, instance.getCategoryAccuracy("c"), 0.0); assertEquals(2.0 / 3.0, instance.getCategoryAccuracy("d"), 0.0); assertEquals(6.0 / 6.0, instance.getCategoryAccuracy("e"), 0.0); assertTrue(Double.isNaN(instance.getCategoryAccuracy("f"))); } /** * Test of getAverageCategoryAccuracy method, of class AbstractConfusionMatrix. */ @Test public void testGetAverageCategoryAccuracy() { AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); assertTrue(Double.isNaN(instance.getAverageCategoryAccuracy())); instance = this.createExampleInstance(); assertEquals((2.0 / 4.0 + 1.0 / 1.0 + 1.0 / 2.0 + 2.0 / 3.0 + 6.0 / 6.0) / 5.0, instance.getAverageCategoryAccuracy(), 0.0); } /** * Test of getErrorRate method, of class AbstractConfusionMatrix. */ @Test public void testGetErrorRate() { AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); assertTrue(Double.isNaN(instance.getErrorRate())); instance = this.createExampleInstance(); assertEquals(0.25, instance.getErrorRate(), 0.0); } /** * Test of getCategoryErrorRate method, of class AbstractConfusionMatrix. */ @Test public void testGetCategoryErrorRate() { AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); assertTrue(Double.isNaN(instance.getCategoryErrorRate("a"))); assertTrue(Double.isNaN(instance.getCategoryErrorRate("b"))); assertTrue(Double.isNaN(instance.getCategoryErrorRate("c"))); assertTrue(Double.isNaN(instance.getCategoryErrorRate("d"))); assertTrue(Double.isNaN(instance.getCategoryErrorRate("e"))); assertTrue(Double.isNaN(instance.getCategoryErrorRate("f"))); instance = this.createExampleInstance(); assertEquals(2.0 / 4.0, instance.getCategoryErrorRate("a"), EPSILON); assertEquals(0.0 / 1.0, instance.getCategoryErrorRate("b"), EPSILON); assertEquals(1.0 / 2.0, instance.getCategoryErrorRate("c"), EPSILON); assertEquals(1.0 / 3.0, instance.getCategoryErrorRate("d"), EPSILON); assertEquals(0.0 / 6.0, instance.getCategoryErrorRate("e"), EPSILON); assertTrue(Double.isNaN(instance.getCategoryErrorRate("f"))); } /** * Test of getAverageCategoryErrorRate method, of class AbstractConfusionMatrix. */ @Test public void testGetAverageCategoryErrorRate() { AbstractConfusionMatrix<String> instance = this.createEmptyInstance(); assertTrue(Double.isNaN(instance.getAverageCategoryErrorRate())); instance = this.createExampleInstance(); assertEquals((2.0 / 4.0 + 0.0 / 1.0 + 1.0 / 2.0 + 1.0 / 3.0 + 0.0 / 6.0) / 5.0, instance.getAverageCategoryErrorRate(), EPSILON); } }