import weka.core.Instances;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import weka.filters.Filter;
import weka.filters.unsupervised.attribute.Remove;
import weka.core.Instances;
import weka.classifiers.Evaluation;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.Writer;
public class Classifier {
static BufferedReader reader;
static Instances train;
static Instances test;
static Instances unlabeled;
public static void main(String [] args) {
System.out.println("Classifier...");
try {
reader = new BufferedReader(new FileReader(args[1]));
train = new Instances(reader);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
try {
reader = new BufferedReader(new FileReader(args[2]));
test = new Instances(reader);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
try {
String[] options = new String[3];
options[0] = "-R";
options[1] = "1";
options[2] = "2";
Remove remove = new Remove();
remove.setOptions(options);
remove.setInputFormat(train);
train = Filter.useFilter(train, remove);
test = Filter.useFilter(test, remove);
train.setClassIndex(train.numAttributes() - 1);
test.setClassIndex(test.numAttributes() - 1);
weka.classifiers.Classifier classifier = new weka.classifiers.functions.SMO();
if (args[0].equals("SMO") ) {
System.out.println("SMO");
classifier = new weka.classifiers.functions.SMO();
classifier.setOptions(weka.core.Utils.splitOptions("-C 1.0 -L 0.0010 -P 1.0E-12 -N 0 -V -1 -W 1 -K \"weka.classifiers.functions.supportVector.PolyKernel -C 250007 -E 1.0\""));
}
if (args[0].equals("logistic") ) {
System.out.println("Logistic Regression");
classifier = new weka.classifiers.functions.Logistic();
classifier.setOptions(weka.core.Utils.splitOptions("-R 1.0E-8 -M -1"));
}
classifier.buildClassifier(train);
Evaluation eval = new Evaluation(train);
eval.evaluateModel(classifier, test);
System.out.println(eval.toSummaryString("\nResults\n======\n", false));
unlabeled = new Instances(new BufferedReader(new FileReader(args[3])));
Filter.useFilter(unlabeled, remove);
unlabeled.setClassIndex(unlabeled.numAttributes() - 1);
Instances labeled = new Instances(unlabeled);
System.out.println(unlabeled.numInstances());
System.out.println(unlabeled.instance(20));
System.out.println(classifier.classifyInstance(unlabeled.instance(20)));
} catch (Exception e) {
e.printStackTrace();
}
}
}