Repository /Debellor/debellor-1.0.jar:org.debellor.example.Main


Back

No file description

Source code

/*
 *  Debellor
 *
 *  Copyright (C) 2008-2009 by Marcin Wojnarski
 *
 *  This program 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.
 *
 *  This program 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 this program.  If not, see http://www.gnu.org/licenses/.
 */
package org.debellor.example;

import org.debellor.base.evaluator.CrossValidation;
import org.debellor.base.evaluator.EvaluatorCell;
import org.debellor.base.evaluator.TrainAndTest;
import org.debellor.core.Cell;
import org.debellor.core.Parameters;
import org.debellor.core.Version;
import org.debellor.rseslib.RseslibClassifier;
import org.debellor.weka.ArffReader;
import org.debellor.weka.WekaClassifier;
import org.debellor.weka.WekaFilter;

public class Main {

	public static void main(String[] args) throws Exception {
		try {
			run();
		}
		catch(Exception e) {
			Throwable t = e;
			System.err.println("Error occurred:");
			while(t != null) {
				if(t.getMessage() != null)
					System.err.println(" " + t.getMessage());
				t = t.getCause();
			}
			System.err.println();
			throw e;	// to additionally print stack trace
		}
	}

	private static void run() throws Exception 
	{
		System.out.println("Debellor version:  " + Version.VERSION + "\n\n");
		
		///////////////////////////////////////////////////////////////////////
		// HOWTO: read ARFF file
		//

		Cell arff = new ArffReader();
		System.out.println("Parameters available in ArffReader [default value]:");
		System.out.print(arff.getAvailableParams());
		
		arff.set("filename", "data/glass.arff");
		arff.set("decisionAttr", "last");		// instead of "last" you can give attribute index, like "0", "1", ...
		
		System.out.println("\nFirst 3 samples from ARFF file:");		
		arff.open();
		System.out.println(arff.next());
		System.out.println(arff.next());
		System.out.println(arff.next());
		arff.close();		

		
		///////////////////////////////////////////////////////////////////////
		// HOWTO: train and use Rseslib classifier
		//

		Cell learner = new RseslibClassifier("C45");
		learner.set("pruning", "true");
		learner.setSource(arff);
		learner.learn();

		System.out.println("\nFirst sample classified by C45 from Rseslib:");
		learner.open();
		System.out.println(learner.next());
		learner.close();		


		///////////////////////////////////////////////////////////////////////
		// HOWTO: train and use Weka classifier
		//

		learner = new WekaClassifier("J48");
		System.out.println("\nParameters available in J48 from Weka [default value]:");
		System.out.print(learner.getAvailableParams());

		learner.set("minNumObj", "2");
		learner.setSource(arff);
		learner.learn();

		System.out.println("\nFirst sample classified by J48:");
		learner.open();
		System.out.println(learner.next());
		learner.close();		

		
		///////////////////////////////////////////////////////////////////////
		// HOWTO: apply Weka filter
		//

		Cell filter = new WekaFilter("attribute.Remove");
		filter.set("attributeIndices", "2-6");
		filter.setSource(arff);

		System.out.println("\nFirst 3 samples from ARFF file after filtering:");
		filter.open();
		System.out.println(filter.next());
		System.out.println(filter.next());
		System.out.println(filter.next());
		filter.close();		

		
		///////////////////////////////////////////////////////////////////////
		// HOWTO: set and get parameters (2 methods)
		//

		// 1st method:
		arff.set("filename", "data/glass.arff");
		arff.set("decisionAttr", "last");

		// 2nd method:
		Parameters par = new Parameters();
		par.set("filename", "data/glass.arff");
		par.set("decisionAttr", "last");
		arff.setParameters(par);
		System.out.println("\nParameters of the ARFF reader:");
		System.out.println(arff.getParameters());
		
		
		///////////////////////////////////////////////////////////////////////
		// HOWTO: evaluate a classifier through train & test
		//

		learner = new WekaClassifier("J48");
		learner.set("confidenceFactor", "0.45");

		EvaluatorCell tt = new TrainAndTest(learner);
		tt.setSource(filter);
		tt.set("repetitions", "10");	// run 10 independent trials of train & test
		tt.set("trainPercent", "70");	// in each trial, use randomly selected 70% of data for training
		tt.setRandomSeed(123);			// fix random seed to use the same data splits in every run of tt.learn()
		tt.learn();						// go!
		System.out.println("\nResult of Train+Test:\n" + tt.report());
		
		
		///////////////////////////////////////////////////////////////////////
		// HOWTO: run cross-validation for a regression problem
		//

		// already done:   Cell arff = new ArffReader();
		arff.set("filename", "data/cloud.arff");	// decision attribute in cloud.arff is real-valued
		arff.set("decisionAttr", "last");
		learner = new WekaClassifier("SMOreg");

		EvaluatorCell cv = new CrossValidation(learner);
		cv.setSource(arff);
		cv.set("folds", "5");			// 5-fold cross-validation
		cv.set("score", "RMSE");		// use Root Mean Squared Error to measure quality
		cv.learn();
		System.out.println("\nResult of Cross-Validation:     RMSE = " + cv.result()[0]);
		
		
		///////////////////////////////////////////////////////////////////////

		System.out.print("\nPress ENTER... ");
		System.in.read();
	}

}

Copyright © 2008-2011 by TunedIT
Design by luksite