package org.encog.util.simple;
import org.encog.engine.util.EngineArray;
import org.encog.engine.util.ObjectPair;
import org.encog.neural.data.Indexable;
import org.encog.neural.data.NeuralData;
import org.encog.neural.data.NeuralDataPair;
import org.encog.neural.data.NeuralDataSet;
import org.encog.neural.data.basic.BasicNeuralData;
import org.encog.neural.data.basic.BasicNeuralDataPair;
import org.encog.neural.data.basic.BasicNeuralDataSet;
import org.encog.util.csv.CSVFormat;
import org.encog.util.csv.ReadCSV;
public class TrainingSetUtil {
/**
* Load a CSV file into a memory dataset.
* @param format The CSV format to use.
* @param filename The filename to load.
* @param headers True if there is a header line.
* @param inputSize The input size. Input always comes first in a file.
* @param idealSize The ideal size, 0 for unsupervised.
* @return A NeuralDataSet that holds the contents of the CSV file.
*/
public static NeuralDataSet loadCSVTOMemory(CSVFormat format,
String filename, boolean headers, int inputSize, int idealSize) {
NeuralDataSet result = new BasicNeuralDataSet();
ReadCSV csv = new ReadCSV(filename, headers, format);
while (csv.next()) {
NeuralData input = null;
NeuralData ideal = null;
int index = 0;
input = new BasicNeuralData(inputSize);
for (int i = 0; i < inputSize; i++) {
double d = csv.getDouble(index++);
input.setData(i, d);
}
if (inputSize > 0) {
ideal = new BasicNeuralData(inputSize);
for (int i = 0; i < idealSize; i++) {
double d = csv.getDouble(index++);
ideal.setData(i, d);
}
}
NeuralDataPair pair = new BasicNeuralDataPair(input, ideal);
result.add(pair);
}
return result;
}
public static ObjectPair<double[][], double[][]> trainingToArray(
NeuralDataSet training) {
int length = trainingSetSize(training);
double[][] a = new double[length][training.getInputSize()];
double[][] b = new double[length][training.getIdealSize()];
int index = 0;
for (NeuralDataPair pair : training) {
EngineArray.arrayCopy(pair.getInputArray(), a[index]);
EngineArray.arrayCopy(pair.getIdealArray(), b[index]);
index++;
}
return new ObjectPair<double[][], double[][]>(a, b);
}
public static int trainingSetSize(NeuralDataSet training) {
if (training instanceof Indexable) {
return (int) ((Indexable) training).getRecordCount();
} else {
int length = 0;
for (NeuralDataPair pair : training) {
length++;
}
return length;
}
}
}