From: <jen...@us...> - 2011-08-31 09:24:33
|
Revision: 3181 http://dl-learner.svn.sourceforge.net/dl-learner/?rev=3181&view=rev Author: jenslehmann Date: 2011-08-31 09:24:25 +0000 (Wed, 31 Aug 2011) Log Message: ----------- prepared class learning problem for new architecture Modified Paths: -------------- trunk/components-core/src/main/java/org/dllearner/learningproblems/ClassLearningProblem.java trunk/components-core/src/test/java/org/dllearner/test/junit/HeuristicTests.java trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EnrichmentEvaluation.java trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EvaluationComputingScript.java trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/OntologyEngineering.java Modified: trunk/components-core/src/main/java/org/dllearner/learningproblems/ClassLearningProblem.java =================================================================== --- trunk/components-core/src/main/java/org/dllearner/learningproblems/ClassLearningProblem.java 2011-08-31 08:52:24 UTC (rev 3180) +++ trunk/components-core/src/main/java/org/dllearner/learningproblems/ClassLearningProblem.java 2011-08-31 09:24:25 UTC (rev 3181) @@ -65,11 +65,13 @@ private long nanoStartTime; private static int maxExecutionTimeInSeconds = 10; + // TODO: config option private NamedClass classToDescribe; + private List<Individual> classInstances; private TreeSet<Individual> classInstancesSet; private boolean equivalence = true; - private ClassLearningProblemConfigurator configurator; +// private ClassLearningProblemConfigurator configurator; // approximation of accuracy private double approxDelta = 0.05; @@ -78,6 +80,9 @@ // factor for higher weight on recall (needed for subclass learning) private double coverageFactor; + private double betaSC = 3.0; + private double betaEq = 1.0; + // instances of super classes excluding instances of the class itself private List<Individual> superClassInstances; // instances of super classes including instances of the class itself @@ -87,13 +92,19 @@ private HeuristicType heuristic = HeuristicType.AMEASURE; - public ClassLearningProblemConfigurator getConfigurator(){ - return configurator; - } + private boolean checkConsistency = true; + public ClassLearningProblem() { + + } + +// public ClassLearningProblemConfigurator getConfigurator(){ +// return configurator; +// } + public ClassLearningProblem(AbstractReasonerComponent reasoner) { super(reasoner); - configurator = new ClassLearningProblemConfigurator(this); +// configurator = new ClassLearningProblemConfigurator(this); } public static Collection<ConfigOption<?>> createConfigOptions() { @@ -127,35 +138,35 @@ @Override public void init() throws ComponentInitException { - classToDescribe = new NamedClass(configurator.getClassToDescribe().toString()); - useApproximations = configurator.getUseApproximations(); +// classToDescribe = new NamedClass(configurator.getClassToDescribe().toString()); +// useApproximations = configurator.getUseApproximations(); - String accM = configurator.getAccuracyMethod(); - if(accM.equals("standard")) { - heuristic = HeuristicType.AMEASURE; - } else if(accM.equals("fmeasure")) { - heuristic = HeuristicType.FMEASURE; - } else if(accM.equals("generalised_fmeasure")) { - heuristic = HeuristicType.GEN_FMEASURE; - } else if(accM.equals("jaccard")) { - heuristic = HeuristicType.JACCARD; - } else if(accM.equals("pred_acc")) { - heuristic = HeuristicType.PRED_ACC; - } +// String accM = configurator.getAccuracyMethod(); +// if(accM.equals("standard")) { +// heuristic = HeuristicType.AMEASURE; +// } else if(accM.equals("fmeasure")) { +// heuristic = HeuristicType.FMEASURE; +// } else if(accM.equals("generalised_fmeasure")) { +// heuristic = HeuristicType.GEN_FMEASURE; +// } else if(accM.equals("jaccard")) { +// heuristic = HeuristicType.JACCARD; +// } else if(accM.equals("pred_acc")) { +// heuristic = HeuristicType.PRED_ACC; +// } if(useApproximations && heuristic.equals(HeuristicType.PRED_ACC)) { System.err.println("Approximating predictive accuracy is an experimental feature. USE IT AT YOUR OWN RISK. If you consider to use it for anything serious, please extend the unit tests at org.dllearner.test.junit.HeuristicTests first to verify that it works."); } if(useApproximations && !(heuristic.equals(HeuristicType.PRED_ACC) || heuristic.equals(HeuristicType.AMEASURE) || heuristic.equals(HeuristicType.FMEASURE))) { - throw new ComponentInitException("Approximations only supported for F-Measure or Standard-Measure. It is unsupported for \"" + accM + ".\""); + throw new ComponentInitException("Approximations only supported for F-Measure or Standard-Measure. It is unsupported for \"" + heuristic + ".\""); } // useFMeasure = configurator.getAccuracyMethod().equals("fmeasure"); - approxDelta = configurator.getApproxAccuracy(); +// approxDelta = configurator.getApproxAccuracy(); if(!getReasoner().getNamedClasses().contains(classToDescribe)) { - throw new ComponentInitException("The class \"" + configurator.getClassToDescribe() + "\" does not exist. Make sure you spelled it correctly."); + throw new ComponentInitException("The class \"" + classToDescribe + "\" does not exist. Make sure you spelled it correctly."); } classInstances = new LinkedList<Individual>(getReasoner().getIndividuals(classToDescribe)); @@ -165,13 +176,13 @@ } classInstancesSet = new TreeSet<Individual>(classInstances); - equivalence = (configurator.getType().equals("equivalence")); - maxExecutionTimeInSeconds = configurator.getMaxExecutionTimeInSeconds(); +// equivalence = (configurator.getType().equals("equivalence")); +// maxExecutionTimeInSeconds = configurator.getMaxExecutionTimeInSeconds(); if(equivalence) { - coverageFactor = configurator.getBetaEq(); + coverageFactor = betaEq; } else { - coverageFactor = configurator.getBetaSC(); + coverageFactor = betaSC; } // we compute the instances of the super class to perform @@ -244,7 +255,7 @@ acc = getAccuracyOrTooWeakExact(description, 1); } - if(configurator.getCheckConsistency()) { + if(checkConsistency) { // we check whether the axiom already follows from the knowledge base // boolean followsFromKB = reasoner.isSuperClassOf(description, classToDescribe); @@ -846,4 +857,68 @@ public boolean followsFromKB(Description description) { return equivalence ? getReasoner().isEquivalentClass(description, classToDescribe) : getReasoner().isSuperClassOf(description, classToDescribe); } + + public static int getMaxExecutionTimeInSeconds() { + return maxExecutionTimeInSeconds; + } + + public static void setMaxExecutionTimeInSeconds(int maxExecutionTimeInSeconds) { + ClassLearningProblem.maxExecutionTimeInSeconds = maxExecutionTimeInSeconds; + } + + public boolean isEquivalence() { + return equivalence; + } + + public void setEquivalence(boolean equivalence) { + this.equivalence = equivalence; + } + + public boolean isUseApproximations() { + return useApproximations; + } + + public void setUseApproximations(boolean useApproximations) { + this.useApproximations = useApproximations; + } + + public HeuristicType getHeuristic() { + return heuristic; + } + + public void setHeuristic(HeuristicType heuristic) { + this.heuristic = heuristic; + } + + public double getApproxDelta() { + return approxDelta; + } + + public void setApproxDelta(double approxDelta) { + this.approxDelta = approxDelta; + } + + public double getBetaSC() { + return betaSC; + } + + public void setBetaSC(double betaSC) { + this.betaSC = betaSC; + } + + public double getBetaEq() { + return betaEq; + } + + public void setBetaEq(double betaEq) { + this.betaEq = betaEq; + } + + public boolean isCheckConsistency() { + return checkConsistency; + } + + public void setCheckConsistency(boolean checkConsistency) { + this.checkConsistency = checkConsistency; + } } Modified: trunk/components-core/src/test/java/org/dllearner/test/junit/HeuristicTests.java =================================================================== --- trunk/components-core/src/test/java/org/dllearner/test/junit/HeuristicTests.java 2011-08-31 08:52:24 UTC (rev 3180) +++ trunk/components-core/src/test/java/org/dllearner/test/junit/HeuristicTests.java 2011-08-31 09:24:25 UTC (rev 3181) @@ -40,6 +40,7 @@ import org.dllearner.kb.KBFile; import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.learningproblems.Heuristics; +import org.dllearner.learningproblems.Heuristics.HeuristicType; import org.dllearner.learningproblems.PosNegLPStandard; import org.dllearner.reasoning.OWLAPIReasoner; import org.dllearner.utilities.Helper; @@ -106,21 +107,21 @@ //// equivalent classes, no noise, no approximations //// // evaluate A2 wrt. A1 using Jaccard - HeuristicTests.configureClassLP(problem, nc[0], "jaccard"); + HeuristicTests.configureClassLP(problem, nc[0], HeuristicType.JACCARD); // the value should be 10 (i10-i19) divided by 30 (i0-i29) assertEqualsClassLP(problem, nc[1], 1/(double)3); assertEqualsClassLP(problem, nc[2], 1/(double)5); - HeuristicTests.configureClassLP(problem, nc[0], "pred_acc"); + HeuristicTests.configureClassLP(problem, nc[0], HeuristicType.PRED_ACC); // the value should be the sum of 10 (correct positives) and 970 (correct negatives) divided by 1000 assertEqualsClassLP(problem, nc[1], (10+70)/(double)100); assertEqualsClassLP(problem, nc[2], (10+50)/(double)100); - HeuristicTests.configureClassLP(problem, nc[0], "standard"); + HeuristicTests.configureClassLP(problem, nc[0], HeuristicType.AMEASURE); assertEqualsClassLP(problem, nc[1], 0.5); assertEqualsClassLP(problem, nc[2], 0.375); - HeuristicTests.configureClassLP(problem, nc[0], "fmeasure"); + HeuristicTests.configureClassLP(problem, nc[0], HeuristicType.FMEASURE); // recall = precision = F1-score = 0.5 assertEqualsClassLP(problem, nc[1], 0.5); // recall = 0.5, precision = 0.25, F1-score = 0.33... @@ -131,20 +132,20 @@ //// super class learning //// // Jaccard - HeuristicTests.configureClassLP(problem, nc[0], "jaccard", false, false, 0.05); + HeuristicTests.configureClassLP(problem, nc[0], HeuristicType.JACCARD, false, false, 0.05); // the value should be 10 (i10-i19) divided by 30 (i0-i29) assertEqualsClassLP(problem, nc[1], 1/(double)3); assertEqualsClassLP(problem, nc[2], 1/(double)5); - HeuristicTests.configureClassLP(problem, nc[0], "pred_acc", false, false, 0.05); + HeuristicTests.configureClassLP(problem, nc[0], HeuristicType.PRED_ACC, false, false, 0.05); assertEqualsClassLP(problem, nc[1], 5/(double)7); assertEqualsClassLP(problem, nc[2], 4/(double)7); - HeuristicTests.configureClassLP(problem, nc[0], "standard"); + HeuristicTests.configureClassLP(problem, nc[0], HeuristicType.AMEASURE); assertEqualsClassLP(problem, nc[1], 0.5); assertEqualsClassLP(problem, nc[2], 0.4375); - HeuristicTests.configureClassLP(problem, nc[0], "fmeasure", false, false, 0.05); + HeuristicTests.configureClassLP(problem, nc[0], HeuristicType.FMEASURE, false, false, 0.05); // recall = precision = F1-score = 0.5 assertEqualsClassLP(problem, nc[1], 0.5); // recall = 0.5, precision = 0.25, F1-score = 0.33... @@ -154,7 +155,7 @@ //// noise tests //// - HeuristicTests.configureClassLP(problem, nc[0], "fmeasure", false, true, 0.05); + HeuristicTests.configureClassLP(problem, nc[0], HeuristicType.FMEASURE, false, true, 0.05); assertEquals(problem.getAccuracyOrTooWeak(nc[3], 0.5),-1,delta); // TODO: test approximations @@ -269,28 +270,22 @@ } // convencience method to set the learning problem to a desired configuration (approximations disabled) - private static void configureClassLP(ClassLearningProblem problem, NamedClass classToDescribe, String accuracyMethod) throws ComponentInitException { - try { - problem.getConfigurator().setClassToDescribe(new URL(classToDescribe.getName())); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - problem.getConfigurator().setAccuracyMethod(accuracyMethod); - problem.getConfigurator().setUseApproximations(false); - problem.init(); + private static void configureClassLP(ClassLearningProblem problem, NamedClass classToDescribe, HeuristicType accuracyMethod) throws ComponentInitException { + problem.setClassToDescribe(classToDescribe); + problem.setHeuristic(accuracyMethod); + problem.setUseApproximations(false); + problem.init(); + } // convencience method to set the learning problem to a desired configuration - private static void configureClassLP(ClassLearningProblem problem, NamedClass classToDescribe, String accuracyMethod, boolean equivalenceLearning, boolean useApproximations, double approxAccuracy) throws ComponentInitException { - try { - problem.getConfigurator().setClassToDescribe(new URL(classToDescribe.getName())); - } catch (MalformedURLException e) { - e.printStackTrace(); - } - problem.getConfigurator().setType("superClass"); - problem.getConfigurator().setAccuracyMethod(accuracyMethod); - problem.getConfigurator().setUseApproximations(useApproximations); - problem.getConfigurator().setApproxAccuracy(approxAccuracy); + private static void configureClassLP(ClassLearningProblem problem, NamedClass classToDescribe, HeuristicType accuracyMethod, boolean equivalenceLearning, boolean useApproximations, double approxAccuracy) throws ComponentInitException { + problem.setClassToDescribe(classToDescribe); +// problem.getConfigurator().setType("superClass"); + problem.setEquivalence(false); + problem.setHeuristic(accuracyMethod); + problem.setUseApproximations(useApproximations); + problem.setApproxDelta(approxAccuracy); problem.init(); } Modified: trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java =================================================================== --- trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java 2011-08-31 08:52:24 UTC (rev 3180) +++ trunk/interfaces/src/main/java/org/dllearner/cli/Enrichment.java 2011-08-31 09:24:25 UTC (rev 3181) @@ -99,6 +99,7 @@ import org.dllearner.kb.sparql.SparqlKnowledgeSource; import org.dllearner.kb.sparql.SparqlQuery; import org.dllearner.learningproblems.ClassLearningProblem; +import org.dllearner.learningproblems.Heuristics.HeuristicType; import org.dllearner.reasoning.FastInstanceChecker; import org.dllearner.reasoning.SPARQLReasoner; import org.dllearner.utilities.CommonPrefixMap; @@ -350,15 +351,17 @@ ClassLearningProblem lp = cm.learningProblem(ClassLearningProblem.class, rc); // lp.setPositiveExamples(posExamples); // lp.setNegativeExamples(negExamples); - try { - lp.getConfigurator().setClassToDescribe(nc.getURI().toURL()); - } catch (MalformedURLException e1) { - e1.printStackTrace(); - } - lp.getConfigurator().setType("equivalence"); - lp.getConfigurator().setAccuracyMethod("fmeasure"); - lp.getConfigurator().setUseApproximations(false); - lp.getConfigurator().setMaxExecutionTimeInSeconds(10); +// try { + lp.setClassToDescribe(nc); +// } catch (MalformedURLException e1) { +// e1.printStackTrace(); +// } +// lp.setType("equivalence"); + lp.setEquivalence(true); +// lp.setAccuracyMethod("fmeasure"); + lp.setHeuristic(HeuristicType.FMEASURE); + lp.setUseApproximations(false); + lp.setMaxExecutionTimeInSeconds(10); lp.init(); CELOE la = null; Modified: trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EnrichmentEvaluation.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EnrichmentEvaluation.java 2011-08-31 08:52:24 UTC (rev 3180) +++ trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EnrichmentEvaluation.java 2011-08-31 09:24:25 UTC (rev 3181) @@ -109,6 +109,7 @@ import org.dllearner.kb.sparql.SparqlEndpoint; import org.dllearner.kb.sparql.SparqlKnowledgeSource; import org.dllearner.learningproblems.ClassLearningProblem; +import org.dllearner.learningproblems.Heuristics.HeuristicType; import org.dllearner.reasoning.FastInstanceChecker; import org.dllearner.reasoning.SPARQLReasoner; import org.dllearner.utilities.CommonPrefixMap; @@ -598,15 +599,17 @@ ClassLearningProblem lp = cm.learningProblem(ClassLearningProblem.class, rc); // lp.setPositiveExamples(posExamples); // lp.setNegativeExamples(negExamples); - try { - lp.getConfigurator().setClassToDescribe(nc.getURI().toURL()); - } catch (MalformedURLException e1) { - e1.printStackTrace(); - } - lp.getConfigurator().setType("equivalence"); - lp.getConfigurator().setAccuracyMethod("fmeasure"); - lp.getConfigurator().setUseApproximations(false); - lp.getConfigurator().setMaxExecutionTimeInSeconds(10); +// try { + lp.setClassToDescribe(nc); +// } catch (MalformedURLException e1) { +// e1.printStackTrace(); +// } +// lp.setType("equivalence"); + lp.setEquivalence(true); +// lp.setAccuracyMethod("fmeasure"); + lp.setHeuristic(HeuristicType.FMEASURE); + lp.setUseApproximations(false); + lp.setMaxExecutionTimeInSeconds(10); lp.init(); CELOE la = null; Modified: trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EvaluationComputingScript.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EvaluationComputingScript.java 2011-08-31 08:52:24 UTC (rev 3180) +++ trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/EvaluationComputingScript.java 2011-08-31 09:24:25 UTC (rev 3181) @@ -33,6 +33,7 @@ import org.dllearner.kb.OWLFile; import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.dllearner.learningproblems.Heuristics.HeuristicType; import org.dllearner.reasoning.FastInstanceChecker; import org.dllearner.reasoning.OWLAPIReasoner; import org.dllearner.refinementoperators.RhoDRDown; @@ -251,27 +252,33 @@ // lp.getConfigurator().setClassToDescribe(nc.getURI().toURL()); for (int k = 0; k <= 3; k++) { lp = cm.learningProblem(ClassLearningProblem.class, reasoner); - lp.getConfigurator().setClassToDescribe(nc.getURI().toURL()); - lp.getConfigurator().setCheckConsistency(false); - lp.getConfigurator().setType("equivalence"); + lp.setClassToDescribe(nc); + lp.setCheckConsistency(false); + lp.setEquivalence(true); +// lp.setType("equivalence"); System.out.println("Learning equivalentClass expressions"); if (k == 0) { - lp.getConfigurator().setAccuracyMethod("standard"); +// lp.getConfigurator().setAccuracyMethod("standard"); + lp.setHeuristic(HeuristicType.AMEASURE); System.out.println("Using accuracy method: standard"); } else if (k == 1) { - lp.getConfigurator().setAccuracyMethod("fmeasure"); +// lp.getConfigurator().setAccuracyMethod("fmeasure"); + lp.setHeuristic(HeuristicType.AMEASURE); System.out.println("Using accuracy method: F-Measure"); } else if (k == 2) { - lp.getConfigurator().setAccuracyMethod("pred_acc"); +// lp.getConfigurator().setAccuracyMethod("pred_acc"); + lp.setHeuristic(HeuristicType.PRED_ACC); System.out.println("Using accuracy method: Predictive accuracy"); } else if (k == 3) { - lp.getConfigurator().setAccuracyMethod("jaccard"); +// lp.getConfigurator().setAccuracyMethod("jaccard"); + lp.setHeuristic(HeuristicType.JACCARD); System.out.println("Using accuracy method: Jaccard"); } else { - lp.getConfigurator().setAccuracyMethod("generalised_fmeasure"); +// lp.getConfigurator().setAccuracyMethod("generalised_fmeasure"); + lp.setHeuristic(HeuristicType.GEN_FMEASURE); System.out.println("Using accuracy method: Generalised F-Measure"); } - lp.getConfigurator().setUseApproximations(useApproximations); + lp.setUseApproximations(useApproximations); lp.init(); celoe = cm.learningAlgorithm(CELOE.class, lp, reasoner); // cf = celoe.getConfigurator(); @@ -377,13 +384,15 @@ System.out.println("\nlearning axioms for class " + nc.toManchesterSyntaxString(baseURI, prefixes)); lp = cm.learningProblem(ClassLearningProblem.class, reasoner); - lp.getConfigurator().setClassToDescribe(nc.getURI().toURL()); - lp.getConfigurator().setCheckConsistency(false); - lp.getConfigurator().setType("equivalence"); + lp.setClassToDescribe(nc); + lp.setCheckConsistency(false); +// lp.getConfigurator().setType("equivalence"); + lp.setEquivalence(true); System.out.println("Learning equivalentClass expressions"); - lp.getConfigurator().setAccuracyMethod("generalised_fmeasure"); +// lp.getConfigurator().setAccuracyMethod("generalised_fmeasure"); + lp.setHeuristic(HeuristicType.GEN_FMEASURE); System.out.println("Using accuracy method: Generalised F-Measure"); - lp.getConfigurator().setUseApproximations(useApproximations); + lp.setUseApproximations(useApproximations); lp.init(); celoe = cm.learningAlgorithm(CELOE.class, lp, reasoner); RhoDRDown op = (RhoDRDown) celoe.getOperator(); @@ -459,11 +468,13 @@ + " with " + instanceCount + " instances"); lp = cm.learningProblem(ClassLearningProblem.class, reasoner); - lp.getConfigurator().setClassToDescribe(nc.getURI().toURL()); - lp.getConfigurator().setCheckConsistency(false); - lp.getConfigurator().setType("equivalence"); + lp.setClassToDescribe(nc); + lp.setCheckConsistency(false); +// lp.getConfigurator().setType("equivalence"); + lp.setEquivalence(true); System.out.println("Learning equivalentClass expressions"); - lp.getConfigurator().setUseApproximations(true); +// lp.getConfigurator().setUseApproximations(true); + lp.setUseApproximations(true); lp.init(); celoe = cm.learningAlgorithm(CELOE.class, lp, reasoner); RhoDRDown op = (RhoDRDown) celoe.getOperator(); Modified: trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/OntologyEngineering.java =================================================================== --- trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/OntologyEngineering.java 2011-08-31 08:52:24 UTC (rev 3180) +++ trunk/scripts/src/main/java/org/dllearner/scripts/evaluation/OntologyEngineering.java 2011-08-31 09:24:25 UTC (rev 3181) @@ -49,6 +49,7 @@ import org.dllearner.kb.OWLFile; import org.dllearner.learningproblems.ClassLearningProblem; import org.dllearner.learningproblems.EvaluatedDescriptionClass; +import org.dllearner.learningproblems.Heuristics.HeuristicType; import org.dllearner.reasoning.FastInstanceChecker; import org.dllearner.reasoning.OWLAPIReasoner; import org.dllearner.refinementoperators.RhoDRDown; @@ -204,20 +205,23 @@ // learn equivalence axiom ClassLearningProblem lp = cm.learningProblem(ClassLearningProblem.class, reasoner); - lp.getConfigurator().setClassToDescribe(nc.getURI().toURL()); + lp.setClassToDescribe(nc); if (i == 0) { System.out .println("generating suggestions for equivalent class (please wait " + algorithmRuntimeInSeconds + " seconds)"); - lp.getConfigurator().setType("equivalence"); +// lp.getConfigurator().setType("equivalence"); + lp.setEquivalence(true); } else { System.out.println("suggestions for super class (please wait " + algorithmRuntimeInSeconds + " seconds)"); - lp.getConfigurator().setType("superClass"); +// lp.getConfigurator().setType("superClass"); + lp.setEquivalence(false); } - lp.getConfigurator().setUseApproximations(useApproximations); + lp.setUseApproximations(useApproximations); if(useFMeasure) { - lp.getConfigurator().setAccuracyMethod("fmeasure"); +// lp.getConfigurator().setAccuracyMethod("fmeasure"); + lp.setHeuristic(HeuristicType.FMEASURE); } lp.init(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |