/* * 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 2 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, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* * LPBRMethodsExamples.java * Copyright (C) 2009-2010 Aristotle University of Thessaloniki, Thessaloniki, Greece */ package mulan.examples; import java.util.Arrays; import java.util.List; import mulan.classifier.MultiLabelLearner; import mulan.classifier.meta.EnsembleOfSubsetLearners; import mulan.classifier.meta.SubsetLearner; import mulan.classifier.transformation.LabelPowerset; import mulan.data.ConditionalDependenceIdentifier; import mulan.data.GreedyLabelClustering; import mulan.data.LabelsPair; import mulan.data.MultiLabelInstances; import mulan.data.UnconditionalChiSquareIdentifier; import mulan.evaluation.Evaluation; import mulan.evaluation.Evaluator; import weka.classifiers.trees.J48; import weka.core.Utils; /** * A main class with examples for SubsetLearner, GreedyLabelClustering and EnsembleOfSubsetLearners methods usage. */ public class SubsetLearnerExamples { public static void main(String[] args) throws Exception { String path = Utils.getOption("path", args); // e.g. -path dataset/ String filestem = Utils.getOption("filestem", args); // e.g. -filestem emotions System.out.println("Loading the training set"); MultiLabelInstances train = new MultiLabelInstances(path + filestem + "-train.arff", path + filestem + ".xml"); System.out.println("Loading the test set"); MultiLabelInstances test = new MultiLabelInstances(path + filestem + "-test.arff", path + filestem + ".xml"); /* * The usage of the following methods is demonstrated: "GreedyLabelClustering-U" - an example for * running SubsetLearner using GreedyLabelClustering algorithm along with Unconditional labels dependence identification. * "EnsembleOfSubsetLearners-U" - an example for running EnsembleOfSubsetLearners algorithm using Unconditional * labels dependence identification. "GreedyLabelClustering-C" - an example for running * SubsetLearner using GreedyLabelClustering algorithm along with Conditional labels dependence identification. * "EnsembleOfSubsetLearners-C" - an example for running EnsembleOfSubsetLearners algorithm using Conditional * labels dependence identification. "SubsetLearner" - an example for running SubsetLearner * algorithm "UnconditionalLDI" - an example for running the algorithm for Unconditional * labels dependence identification. "ConditionalLDI" - an example for running the algorithm * for Conditional labels dependence identification. */ String[] methodsToCompare = { "GreedyLabelClustering-U", "EnsembleOfSubsetLearners-U", "GreedyLabelClustering-C", "EnsembleOfSubsetLearners-C", "SubsetLearner", "UnconditionalLDI", "ConditionalLDI" }; Evaluator eval = new Evaluator(); Evaluation results; long s1, s2, s3; long trainTime, testTime; for (String aMethodsToCompare : methodsToCompare) { if (aMethodsToCompare.equals("GreedyLabelClustering-U")) { System.out .println("\nStarting GreedyLabelClustering algorithm using Unconditional labels dependence identification"); UnconditionalChiSquareIdentifier uncond = new UnconditionalChiSquareIdentifier(); MultiLabelLearner lp = new LabelPowerset(new J48()); GreedyLabelClustering clusterer = new GreedyLabelClustering(lp, new J48(), uncond); SubsetLearner learner = new SubsetLearner(clusterer, lp, new J48()); learner.setUseCache(true); // use caching mechanism learner.setDebug(true); s1 = System.currentTimeMillis(); learner.build(train); s2 = System.currentTimeMillis(); results = eval.evaluate(learner, test); s3 = System.currentTimeMillis(); trainTime = s2 - s1; testTime = s3 - s2; System.out.println(results.toCSV()); System.out.println("Train time: " + trainTime + " Test time: " + testTime); } if (aMethodsToCompare.equals("GreedyLabelClustering-C")) { System.out .println("\nStarting GreedyLabelClustering algorithm using Conditional labels dependence identification"); ConditionalDependenceIdentifier cond = new ConditionalDependenceIdentifier( new J48()); MultiLabelLearner lp = new LabelPowerset(new J48()); GreedyLabelClustering clusterer = new GreedyLabelClustering(lp, new J48(), cond); SubsetLearner learner = new SubsetLearner(clusterer, lp, new J48()); learner.setUseCache(true); // use caching mechanism learner.setDebug(true); s1 = System.currentTimeMillis(); learner.build(train); s2 = System.currentTimeMillis(); results = eval.evaluate(learner, test); s3 = System.currentTimeMillis(); trainTime = s2 - s1; testTime = s3 - s2; System.out.println(results.toCSV()); System.out.println("Train time: " + trainTime + " Test time: " + testTime); } if (aMethodsToCompare.equals("EnsembleOfSubsetLearners-U")) { System.out .println("\nStarting EnsembleOfSubsetLearners algorithm using Unconditional labels dependence identification"); UnconditionalChiSquareIdentifier uncond = new UnconditionalChiSquareIdentifier(); MultiLabelLearner lp = new LabelPowerset(new J48()); EnsembleOfSubsetLearners learner = new EnsembleOfSubsetLearners(lp, new J48(), uncond, 10); learner.setDebug(true); learner.setUseSubsetLearnerCache(true); s1 = System.currentTimeMillis(); learner.build(train); s2 = System.currentTimeMillis(); results = eval.evaluate(learner, test); s3 = System.currentTimeMillis(); trainTime = s2 - s1; testTime = s3 - s2; System.out.println(results.toCSV()); System.out.println("Train time: " + trainTime + " Test time: " + testTime); } if (aMethodsToCompare.equals("EnsembleOfSubsetLearners-C")) { System.out .println("\nStarting EnsembleOfSubsetLearners algorithm using Conditional labels dependence identification"); ConditionalDependenceIdentifier cond = new ConditionalDependenceIdentifier( new J48()); MultiLabelLearner lp = new LabelPowerset(new J48()); EnsembleOfSubsetLearners learner = new EnsembleOfSubsetLearners(lp, new J48(), cond, 10); learner.setDebug(true); learner.setUseSubsetLearnerCache(true); learner.setSelectDiverseModels(false); // use strategy for selecting highly weighted ensemble partitions (without seeking // for diverse models) s1 = System.currentTimeMillis(); learner.build(train); s2 = System.currentTimeMillis(); System.out.println("Evaluation started. "); results = eval.evaluate(learner, test); s3 = System.currentTimeMillis(); trainTime = s2 - s1; testTime = s3 - s2; System.out.println(results.toCSV()); System.out.println("Train time: " + trainTime + " Test time: " + testTime); } if (aMethodsToCompare.equals("SubsetLearner")) { System.out .println("\nStarting SubsetLearner algorithm with random label set partition."); EnsembleOfSubsetLearners ensemble = new EnsembleOfSubsetLearners(); List<int[][]> randomSet = ensemble.createRandomSets(train.getNumLabels(), 1); int[][] partition = randomSet.get(0); System.out.println("Random partition: " + EnsembleOfSubsetLearners.partitionToString(partition)); SubsetLearner learner = new SubsetLearner(partition, new J48()); learner.setDebug(true); s1 = System.currentTimeMillis(); learner.build(train); s2 = System.currentTimeMillis(); results = eval.evaluate(learner, test); s3 = System.currentTimeMillis(); trainTime = s2 - s1; testTime = s3 - s2; System.out.println(results.toCSV()); System.out.println("Train time: " + trainTime + " Test time: " + testTime); } if (aMethodsToCompare.equals("UnconditionalLDI")) { System.out .println("\nStarting algorithm for Unconditional labels dependence identification."); UnconditionalChiSquareIdentifier uncond = new UnconditionalChiSquareIdentifier(); s1 = System.currentTimeMillis(); LabelsPair[] pairs = uncond.calculateDependence(train); s2 = System.currentTimeMillis(); testTime = s2 - s1; System.out.println("Identified dependency scores of label pairs: \n" + Arrays.toString(pairs)); System.out.println("Computation time: " + testTime); } if (aMethodsToCompare.equals("ConditionalLDI")) { System.out .println("\nStarting algorithm for Conditional labels dependence identification."); ConditionalDependenceIdentifier cond = new ConditionalDependenceIdentifier( new J48()); s1 = System.currentTimeMillis(); LabelsPair[] pairs = cond.calculateDependence(train); s2 = System.currentTimeMillis(); testTime = s2 - s1; System.out.println("Identified dependency scores of label pairs: \n" + Arrays.toString(pairs)); System.out.println("Computation time: " + testTime); } } } }