/* * File: OnlinePerceptronTest.java * Authors: Justin Basilico * Company: Sandia National Laboratories * Project: Cognitive Foundry Learning Core * * Copyright October 19, 2010, 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.algorithm.perceptron; import gov.sandia.cognition.learning.data.DefaultInputOutputPair; import gov.sandia.cognition.math.matrix.VectorFactory; import gov.sandia.cognition.math.matrix.mtj.SparseVectorFactoryMTJ; import gov.sandia.cognition.math.matrix.mtj.Vector2; import gov.sandia.cognition.learning.function.categorization.LinearBinaryCategorizer; import org.junit.Test; import static org.junit.Assert.*; /** * Unit tests for class OnlinePerceptron. * * @author Justin Basilico * @since 3.1 */ public class OnlinePerceptronTest extends KernelizableBinaryCategorizerOnlineLearnerTestHarness { /** * Creates a new test. */ public OnlinePerceptronTest() { } /** * Test of computeUpdate method, of class OnlinePerceptron. */ @Test public void testComputeUpdate() { assertEquals(0.0, OnlinePerceptron.computeUpdate(true, 1.0), 0.0); assertEquals(0.0, OnlinePerceptron.computeUpdate(false, -1.0), 0.0); assertEquals(1.0, OnlinePerceptron.computeUpdate(true, -0.1), 0.0); assertEquals(1.0, OnlinePerceptron.computeUpdate(false, 0.1), 0.0); } /** * Test of constructors of class OnlinePerceptron. */ @Test public void testConstructors() { VectorFactory<?> factory = VectorFactory.getDefault(); OnlinePerceptron instance = new OnlinePerceptron(); assertSame(VectorFactory.getDefault(), instance.getVectorFactory()); factory = VectorFactory.getSparseDefault(); instance = new OnlinePerceptron(factory); assertSame(factory, instance.getVectorFactory()); } /** * Test of createInitialLearnedObject method, of class OnlinePerceptron. */ @Test public void testCreateInitialLearnedObject() { OnlinePerceptron instance = new OnlinePerceptron(); LinearBinaryCategorizer result = instance.createInitialLearnedObject(); assertNull(result.getWeights()); assertEquals(0.0, result.getBias(), 0.0); assertNotSame(result, instance.createInitialLearnedObject()); } /** * Test of update method, of class OnlinePerceptron. */ @Test public void testUpdate() { OnlinePerceptron instance = new OnlinePerceptron(); LinearBinaryCategorizer result = instance.createInitialLearnedObject(); assertNull(result.getWeights()); assertEquals(0.0, result.getBias(), 0.0); instance.update(result, DefaultInputOutputPair.create(new Vector2(2.0, 3.0), true)); assertEquals(new Vector2(2.0, 3.0), result.getWeights()); assertEquals(1.0, result.getBias(), 0.0); instance.update(result, DefaultInputOutputPair.create(new Vector2(4.0, 4.0), true)); assertEquals(new Vector2(2.0, 3.0), result.getWeights()); assertEquals(1.0, result.getBias(), 0.0); instance.update(result, DefaultInputOutputPair.create(new Vector2(1.0, 1.0), false)); assertEquals(new Vector2(1.0, 2.0), result.getWeights()); assertEquals(0.0, result.getBias(), 0.0); instance.update(result, DefaultInputOutputPair.create(new Vector2(1.0, 1.0), false)); assertEquals(new Vector2(0.0, 1.0), result.getWeights()); assertEquals(-1.0, result.getBias(), 0.0); instance.update(result, DefaultInputOutputPair.create(new Vector2(2.0, 3.0), true)); assertEquals(new Vector2(0.0, 1.0), result.getWeights()); assertEquals(-1.0, result.getBias(), 0.0); } /** * Test of getVectorFactory method, of class OnlinePerceptron. */ @Test public void testGetVectorFactory() { this.testSetVectorFactory(); } /** * Test of setVectorFactory method, of class OnlinePerceptron. */ @Test public void testSetVectorFactory() { VectorFactory<?> factory = VectorFactory.getDefault(); OnlinePerceptron instance = new OnlinePerceptron(); assertSame(VectorFactory.getDefault(), instance.getVectorFactory()); factory = new SparseVectorFactoryMTJ(); instance.setVectorFactory(factory); assertSame(factory, instance.getVectorFactory()); factory = null; instance.setVectorFactory(factory); assertSame(factory, instance.getVectorFactory()); factory = VectorFactory.getDenseDefault(); instance.setVectorFactory(factory); assertSame(factory, instance.getVectorFactory()); } @Override protected KernelizableBinaryCategorizerOnlineLearner createLinearInstance() { return new OnlinePerceptron(); } }