package ml.humaning.algorithm;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import weka.attributeSelection.PrincipalComponents;
import weka.classifiers.functions.MultilayerPerceptron;
import weka.core.Instances;
import weka.core.converters.LibSVMLoader;
import weka.core.converters.LibSVMSaver;
import weka.filters.Filter;
import weka.filters.unsupervised.attribute.NumericToNominal;
public class ANN {
private Instances data;
private MultilayerPerceptron multilayerPerceptron;
public ANN() {
}
public void train(String trainFile) throws Exception{
LibSVMLoader libsvmLoader = new LibSVMLoader();
libsvmLoader.setSource(new File(trainFile));
data = libsvmLoader.getDataSet();
NumericToNominal filter = new NumericToNominal();
filter.setInputFormat(data);
data = Filter.useFilter(data, filter);
System.out.println("1");
PrincipalComponents pca = new PrincipalComponents();
pca.setMaximumAttributeNames(25);
pca.buildEvaluator(data);
data = pca.transformedData(data);
System.out.println("after pca");
LibSVMSaver libsvmSaver = new LibSVMSaver();
libsvmSaver.setInstances(data);
libsvmSaver.setFile(new File("pca.dat"));
libsvmSaver.writeBatch();
// multilayerPerceptron = new MultilayerPerceptron();
// multilayerPerceptron.setTrainingTime(1000);
// multilayerPerceptron.buildClassifier(data);
//
// System.out.println("after ann");
//
}
public void predict(String testFile, String outputFile) throws Exception{
LibSVMLoader libsvmLoader = new LibSVMLoader();
libsvmLoader.setSource(new File(testFile));
Instances test = libsvmLoader.getDataSet();
BufferedWriter bw = new BufferedWriter(new FileWriter(outputFile));
System.out.println("before predict");
for (int i = 0; i < test.numInstances(); i++) {
double pred = multilayerPerceptron.classifyInstance(test.instance(i));
bw.write(data.classAttribute().value((int) pred)+"\n");
//System.out.println(data.classAttribute().value((int) pred));
}
bw.close();
}
}