/*
* This file is part of ALOE.
*
* ALOE is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
* ALOE is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with ALOE. If not, see <http://www.gnu.org/licenses/>.
*
* Copyright (c) 2012 SCCL, University of Washington (http://depts.washington.edu/sccl)
*/
package etc.aloe.cscw2013;
import etc.aloe.data.ExampleSet;
import etc.aloe.data.Predictions;
import java.util.ArrayList;
import java.util.List;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
import weka.core.Attribute;
import weka.core.DenseInstance;
import weka.core.Instances;
/**
*
* @author Michael Brooks <mjbrooks@uw.edu>
*/
public class TrainingImplTest {
private Instances testInstances;
private Instances instances;
public TrainingImplTest() {
}
@BeforeClass
public static void setUpClass() {
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() {
ArrayList<Attribute> attributes = new ArrayList<Attribute>();
attributes.add(new Attribute("id"));
ArrayList<String> classValues = new ArrayList<String>();
classValues.add("false");
classValues.add("true");
attributes.add(new Attribute("class", classValues));
this.instances = new Instances("TrainInstances", attributes, 12);
this.instances.setClassIndex(1);
this.instances.add(new DenseInstance(1.0, new double[]{1.0, 1.0}));
this.instances.add(new DenseInstance(1.0, new double[]{2.0, 1.0}));
this.instances.add(new DenseInstance(1.0, new double[]{3.0, 1.0}));
this.instances.add(new DenseInstance(1.0, new double[]{4.0, 1.0}));
this.instances.add(new DenseInstance(1.0, new double[]{5.0, 1.0}));
this.instances.add(new DenseInstance(1.0, new double[]{6.0, 1.0}));
this.instances.add(new DenseInstance(1.0, new double[]{7.0, 0.0}));
this.instances.add(new DenseInstance(1.0, new double[]{8.0, 0.0}));
this.instances.add(new DenseInstance(1.0, new double[]{9.0, 0.0}));
this.instances.add(new DenseInstance(1.0, new double[]{10.0, 0.0}));
this.instances.add(new DenseInstance(1.0, new double[]{11.0, 0.0}));
this.instances.add(new DenseInstance(1.0, new double[]{12.0, 0.0}));
this.testInstances = new Instances("TestInstances", attributes, 4);
this.testInstances.setClassIndex(1);
this.testInstances.add(new DenseInstance(1.0, new double[]{1.0, 1.0}));
this.testInstances.add(new DenseInstance(1.0, new double[]{6.0, 1.0}));
this.testInstances.add(new DenseInstance(1.0, new double[]{7.0, 0.0}));
this.testInstances.add(new DenseInstance(1.0, new double[]{12.0, 0.0}));
}
@After
public void tearDown() {
}
/**
* Test of train method, of class TrainingImpl.
*/
@Test
public void testTrain() {
System.out.println("train");
TrainingImpl instance = new TrainingImpl();
WekaModel model = instance.train(new ExampleSet(instances));
//The test here is whether the model works
Boolean[] expResult = new Boolean[]{true, true, false, false};
Double[] expConfidence = new Double[]{1.0, 1.0, 0.0, 0.0};
ExampleSet examples = new ExampleSet(testInstances);
Predictions predictions = model.getPredictions(examples);
assertEquals(expResult.length, predictions.size());
for (int i = 0; i < expResult.length; i++) {
assertEquals(expResult[i], predictions.getPredictedLabel(i));
assertEquals(expConfidence[i], predictions.getPredictionConfidence(i));
assertEquals(testInstances.get(i).classValue(), predictions.getTrueLabel(i) ? 1.0 : 0.0, 0.0);
}
}
}