Package org.encog.app.analyst

Source Code of org.encog.app.analyst.AnalystTestingUtility

/*
* Encog(tm) Core v3.3 - Java Version
* http://www.heatonresearch.com/encog/
* https://github.com/encog/encog-java-core
* Copyright 2008-2014 Heaton Research, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*  
* For more information on Heaton Research copyrights, licenses
* and trademarks visit:
* http://www.heatonresearch.com/copyright
*/
package org.encog.app.analyst;

import java.io.File;

import junit.framework.Assert;

import org.encog.app.analyst.report.AnalystReport;
import org.encog.app.analyst.script.DataField;
import org.encog.app.analyst.script.normalize.AnalystField;
import org.encog.app.analyst.script.prop.ScriptProperties;
import org.encog.app.analyst.wizard.AnalystWizard;
import org.encog.app.analyst.wizard.WizardMethodType;
import org.encog.ml.MLError;
import org.encog.ml.MLMethod;
import org.encog.ml.data.MLDataSet;
import org.encog.persist.EncogDirectoryPersistence;
import org.encog.util.Format;
import org.encog.util.TempDir;
import org.encog.util.file.FileUtil;
import org.encog.util.simple.EncogUtility;

public class AnalystTestingUtility {
  public static final boolean CONSOLE_OUTPUT = false;
  public static final int MAX_ITERATIONS = 100000;
  public static final int MAX_CYCLES = 10;
  private String baseDataFile;
  private final TempDir tempDir = new TempDir();
  private File rawFile;
  private File analystFile;
  private EncogAnalyst encogAnalyst;
  private AnalystFileFormat format = AnalystFileFormat.DECPNT_COMMA;
 
 
  public AnalystTestingUtility(String theBaseDataFile)
  {
    System.gc();
    tempDir.clearContents();
    this.baseDataFile = theBaseDataFile;
    this.rawFile = tempDir.createFile("test.csv");
    FileUtil.copyResource(theBaseDataFile, rawFile);
    this.analystFile = tempDir.createFile("test.ega");
    this.encogAnalyst = new EncogAnalyst();
  }
 
  public void wizard(AnalystGoal goal, WizardMethodType methodType, boolean headers) {
    this.encogAnalyst.setMaxIteration(AnalystTestingUtility.MAX_ITERATIONS);
    AnalystWizard wiz = new AnalystWizard(this.encogAnalyst);   
    wiz.setGoal(goal);
    wiz.setMethodType(methodType);
    wiz.setEvidenceSegements(3);
    wiz.wizard(rawFile, headers, format);
   
    this.encogAnalyst.save(analystFile);
    this.encogAnalyst.load(analystFile);
  }
 
  public void process(double maxError) {
    int cycles = 0;
    double e;
   
    if( AnalystTestingUtility.CONSOLE_OUTPUT ) {
      this.encogAnalyst.addAnalystListener(new ConsoleAnalystListener())
    }
   
    do {   
      this.encogAnalyst.executeTask("task-full");
      e = calculateError();
      cycles++;
    } while( cycles<=MAX_CYCLES && e>maxError );
   
    Assert.assertTrue("Too many cycles to perform successful train.", cycles<=MAX_CYCLES);
   
  }
 
  public void report() {
    AnalystReport report = new AnalystReport(this.encogAnalyst);
    report.produceReport(tempDir.createFile("report.html"));
  }

  public void validateDataField(
      int i,
      double max,
      double mean,
      double min,
      double sd,
      String name,
      boolean isClass,
      boolean isComplete,
      boolean isInteger,
      boolean isReal) {
    DataField df = this.encogAnalyst.getScript().getFields()[i];
    Assert.assertEquals(max, df.getMax(),0.001);
    Assert.assertEquals(mean, df.getMean(),0.001);
    Assert.assertEquals(min, df.getMin(),0.001);
    Assert.assertEquals(sd, df.getStandardDeviation(),0.001);
    Assert.assertEquals(name, df.getName() );
    Assert.assertEquals(isClass, df.isClass() );
    Assert.assertEquals(isComplete, df.isComplete() );
    Assert.assertEquals(isInteger, df.isInteger() );
    Assert.assertEquals(isReal, df.isReal() );   
  }
 
  public void dumpDataField(int i) {
    DataField df = this.encogAnalyst.getScript().getFields()[i];
    System.out.print(Format.formatDouble(df.getMax(),6));
    System.out.print(";");
    System.out.print(Format.formatDouble(df.getMean(),6));
    System.out.print(";");
    System.out.print(Format.formatDouble(df.getMin(),6));
    System.out.print(";");
    System.out.print(Format.formatDouble(df.getStandardDeviation(),6));
    System.out.print(";");
    System.out.print(df.getName());
    System.out.print(";");
    System.out.print(df.isClass()?'1':'0');
    System.out.print(";");
    System.out.print(df.isComplete()?'1':'0');
    System.out.print(";");
    System.out.print(df.isInteger()?'1':'0');
    System.out.print(";");
    System.out.println(df.isReal()?'1':'0');
  }

  public void validateDataClass(int i, String... args) {
    DataField df = this.encogAnalyst.getScript().getFields()[i];
    Assert.assertEquals(args.length, df.getClassMembers().size());
    for(int j=0;j<df.getClassMembers().size();j++) {
      Assert.assertEquals(args[j], df.getClassMembers().get(j).getName());
    }   
  }
 
  /**
   * Obtain the ML method.
   * @return The method.
   */
  public MLMethod obtainMethod() {
    final ScriptProperties prop = this.encogAnalyst.getScript().getProperties();
    final String resourceID = prop.getPropertyString(
        ScriptProperties.ML_CONFIG_MACHINE_LEARNING_FILE);
    final File resourceFile = this.encogAnalyst.getScript().resolveFilename(resourceID);

    final MLMethod method = (MLMethod) EncogDirectoryPersistence
        .loadObject(resourceFile);

    if (!(method instanceof MLMethod)) {
      throw new AnalystError(
          "The object to be trained must be an instance of MLMethod. "
              + method.getClass().getSimpleName());
    }

    return method;
  }
 
  /**
   * Obtain the training set.
   * @return The training set.
   */
  private MLDataSet obtainTrainingSet() {
    final ScriptProperties prop = this.encogAnalyst.getScript().getProperties();
    final String trainingID = prop.getPropertyString(
        ScriptProperties.ML_CONFIG_TRAINING_FILE);

    final File trainingFile = this.encogAnalyst.getScript().resolveFilename(trainingID);

    MLDataSet trainingSet = EncogUtility.loadEGB2Memory(trainingFile);
    return trainingSet;
  }

  public void validateMethodError(double targetError) {
    double e = calculateError();
    Assert.assertTrue(e<targetError);
  }
 
  public double calculateError() {
    MLMethod method = obtainMethod();
    MLDataSet data = obtainTrainingSet();
    return ((MLError)method).calculateError(data);
  }

  public void dumpAnalystField(int i) {
    AnalystField af = this.encogAnalyst.getScript().getNormalize().getNormalizedFields().get(i);
   
    System.out.print(Format.formatDouble(af.getActualHigh(),6));
    System.out.print(";");
    System.out.print(Format.formatDouble(af.getActualLow(),6));
    System.out.print(";");
    System.out.print(Format.formatDouble(af.getNormalizedHigh(),6));
    System.out.print(";");
    System.out.print(Format.formatDouble(af.getNormalizedLow(),6));
    System.out.print(";");
    System.out.print(af.getName());
    System.out.print(";");
    System.out.print(af.getTimeSlice());
    System.out.print(";");
    System.out.println(af.getAction().toString());
   
  }

  public void validateAnalystField(int i, double high, double low, double normHigh, double normLow,
      String name, int timeSlice, String action) {
    AnalystField af = this.encogAnalyst.getScript().getNormalize().getNormalizedFields().get(i);
    Assert.assertEquals(high, af.getActualHigh(),0.001);
    Assert.assertEquals(low, af.getActualLow(),0.001);
    Assert.assertEquals(normHigh, af.getNormalizedHigh(),0.001);
    Assert.assertEquals(normLow, af.getNormalizedLow(),0.001);
    Assert.assertEquals(name, af.getName() );
    Assert.assertEquals(timeSlice, af.getTimeSlice() );
    Assert.assertEquals(action, af.getAction().toString() );
  }

  /**
   * @return the format
   */
  public AnalystFileFormat getFormat() {
    return format;
  }

  /**
   * @param format the format to set
   */
  public void setFormat(AnalystFileFormat format) {
    this.format = format;
  }
 
 
 
}
TOP

Related Classes of org.encog.app.analyst.AnalystTestingUtility

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.