[jboss-svn-commits] JBL Code SVN: r20164 - in labs/jbossrules/contrib/machinelearning/4.0.x: drools-core/src/main/java/org/drools/learner/builder and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon May 26 08:34:30 EDT 2008
Author: gizil
Date: 2008-05-26 08:34:29 -0400 (Mon, 26 May 2008)
New Revision: 20164
Added:
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java
Modified:
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/DecisionTree.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/InstanceList.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/LeafNode.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/Memory.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/Schema.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/Stats.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/TreeNode.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/ID3Learner.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/Learner.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/LearnerFactory.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/Tester.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/eval/InstDistribution.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/tools/Util.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfC45Example.java
labs/jbossrules/contrib/machinelearning/4.0.x/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExample.java
Log:
builder for bagging
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/DecisionTree.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/DecisionTree.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/DecisionTree.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -3,7 +3,9 @@
import java.util.ArrayList;
import java.util.Collections;
+import org.drools.learner.tools.Util;
+
public class DecisionTree {
private Class<?> obj_clazz;
@@ -16,17 +18,24 @@
private TreeNode root;
+ // The id of the tree in the forest
+ private int id;
+
public long FACTS_READ = 0;
public DecisionTree(Schema inst_schema, String _target) {
this.obj_clazz = inst_schema.getObjectClass();
- System.out.println("The target attribute: "+ _target);
+ if (Util.DEBUG_DECISION_TREE) {
+ System.out.println("The target attribute: "+ _target);
+ }
this.target = inst_schema.getAttrDomain(_target);
this.attrsToClassify = new ArrayList<Domain>(inst_schema.getAttrNames().size()-1);
for (String attr_name : inst_schema.getAttrNames()) {
if (!attr_name.equals(_target)) {
- System.out.println("Adding the attribute: "+ attr_name);
+ if (Util.DEBUG_DECISION_TREE) {
+ System.out.println("Adding the attribute: "+ attr_name);
+ }
this.attrsToClassify.add(inst_schema.getAttrDomain(attr_name));
}
}
@@ -51,9 +60,10 @@
return obj_clazz;
}
-// public void setTarget(String _target) {
-// this.target = _target;
-// }
+ public void setID(int i) {
+ this.id = i;
+ }
+
public Domain getTargetDomain() {
return target;
}
@@ -70,8 +80,8 @@
this.root = root;
}
- public Integer test(Instance i) {
- return this.getRoot().evaluate(i);
+ public Object vote(Instance i) {
+ return this.getRoot().voteFor(i);
}
@Override
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/InstanceList.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/InstanceList.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/InstanceList.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -16,9 +16,14 @@
public InstanceList(Schema _schema) {
this.schema = _schema;
- this.instances = new ArrayList<Instance>(); // TODO should put a size?? HOW?
+ this.instances = new ArrayList<Instance>();
}
+ public InstanceList(Schema _schema, int size) {
+ this.schema = _schema;
+ this.instances = new ArrayList<Instance>(size);
+ }
+
public void addFromWorkingMemory(WorkingMemory _session, Object _obj) {
// create instance and all attributes according to the schema
Instance inst = new Instance();
@@ -59,10 +64,26 @@
return instances.size();
}
+ public Instance getInstance(int index) {
+ return instances.get(index);
+ }
+
public List<Instance> getInstances() {
return instances;
}
+ public InstanceList getInstances(int[] bag) {
+ if (bag.length > this.getSize()) {
+ System.out.println("Exception: TOO BIG to get Memory.getClassInstancesOf");
+ return null;
+ }
+ InstanceList toReturn = new InstanceList(this.getSchema(), bag.length);
+ for (int j = 0; j< bag.length ; j ++) {
+ toReturn.addAsInstance(this.getInstance(bag[j]));
+ }
+ return toReturn;
+ }
+
public Schema getSchema() {
return schema;
}
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/LeafNode.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/LeafNode.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/LeafNode.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -29,17 +29,21 @@
return this.num_intances_classified;
}
- public Integer evaluate(Instance i) {
- String targetFName = super.getDomain().getFName();
+// public Integer evaluate(Instance i) {
+// String targetFName = super.getDomain().getFName();
+//
+// Object attr_value = i.getAttrValue(targetFName);
+// Object i_category = super.getDomain().getCategoryOf(attr_value);
+// if (AttributeValueComparator.instance.compare(i_category, this.targetCategory) == 0) {
+// return Integer.valueOf(1); //correct
+// } else {
+// return Integer.valueOf(0); // mistake
+// }
+// }
+
+ public Object voteFor(Instance i) {
- Object attr_value = i.getAttrValue(targetFName);
- Object i_category = super.getDomain().getCategoryOf(attr_value);
- if (AttributeValueComparator.instance.compare(i_category, this.targetCategory) == 0) {
- return Integer.valueOf(1); //correct
- } else {
- return Integer.valueOf(0); // mistake
- }
-
+ return this.targetCategory;
}
public int hashCode() {
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/Memory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/Memory.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/Memory.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -8,7 +8,9 @@
public class Memory {
- public static Memory createFromWorkingMemory(WorkingMemory _session, Class<?> clazz, int TREE_TYPE) throws FeatureNotSupported {
+
+ // TODO pass a list of classes, and get all th eobject from that class
+ public static Memory createFromWorkingMemory(WorkingMemory _session, Class<?> clazz, int domain_type) throws FeatureNotSupported {
// if mem == null
Memory mem = new Memory();
@@ -16,7 +18,7 @@
mem.setClassToClassify(clazz);
// create schema from clazz
- Schema inst_schema = Schema.createFromClass(clazz, TREE_TYPE);
+ Schema inst_schema = Schema.createFromClass(clazz, domain_type);
// create a instance list that can hold objects from our schema
mem.instances.put(clazz, new InstanceList(inst_schema));
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/Schema.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/Schema.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/Schema.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -19,7 +19,7 @@
*/
public class Schema {
- public static Schema createFromClass(Class<?> clazz, int TREE_TYPE) throws FeatureNotSupported {
+ public static Schema createFromClass(Class<?> clazz, int domain_type) throws FeatureNotSupported {
Schema schema = new Schema(clazz);
ClassFieldExtractorCache cache = ClassFieldExtractorCache.getInstance();
@@ -55,7 +55,7 @@
throw new FeatureNotSupported("String categorization not supported");
}
boolean skip = false;
- switch (TREE_TYPE) {
+ switch (domain_type) {
case Util.ID3: //ID3
if (spec.ignore() || !spec.discrete())
skip = true;
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/Stats.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/Stats.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/Stats.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -10,6 +10,8 @@
import java.io.PrintWriter;
import java.util.ArrayList;
+import org.drools.learner.tools.Util;
+
public class Stats {
public static int INCORRECT = 0, CORRECT = 1, UNKNOWN = 2;
@@ -46,14 +48,20 @@
return total_data;
}
- public void print2file(String dataFile) {
+ public void print2file(String dataFile, int domain_type, int tree_set) {
String packageFolders = this.stat_class.getPackage().getName();
String _packageNames = packageFolders.replace('.', '/');
- String fileName = (dataFile == null || dataFile == "") ? this.stat_class.getSimpleName().toLowerCase()+ ".stats": dataFile;
+ String fileName = (dataFile == null || dataFile == "") ? this.stat_class.getSimpleName().toLowerCase() : dataFile;
+
+ String suffix = Util.getFileSuffix(domain_type, tree_set);
+ fileName += "_"+suffix + ".stats";
+
+
+
String dataFileName = "src/main/rules/"+_packageNames+"/"+ fileName;
try {
StatsPrinter.print(this, new FileOutputStream(dataFileName));
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/TreeNode.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/TreeNode.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/TreeNode.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -57,7 +57,7 @@
return children.get(attr_key);
}
- public Integer evaluate(Instance i) {
+ public Object voteFor(Instance i) {
Object attr_value = i.getAttrValue(this.domain.getFName());
Object category = domain.getCategoryOf(attr_value);
@@ -81,7 +81,7 @@
System.out.print(" @mynode:"+my_node+ "\n");
}
- return my_node.evaluate(i);
+ return my_node.voteFor(i);
}
public int hashCode() {
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -1,86 +1,29 @@
package org.drools.learner.builder;
-import java.io.Reader;
-import java.io.StringReader;
-import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import org.drools.learner.DecisionTree;
import org.drools.learner.Domain;
-import org.drools.learner.Instance;
-import org.drools.learner.InstanceList;
import org.drools.learner.LeafNode;
-import org.drools.learner.Memory;
-import org.drools.learner.Stats;
import org.drools.learner.TreeNode;
import org.drools.learner.eval.Entropy;
import org.drools.learner.eval.InformationContainer;
import org.drools.learner.eval.InstDistribution;
import org.drools.learner.tools.FeatureNotSupported;
-import org.drools.learner.tools.RulePrinter;
import org.drools.learner.tools.Util;
-public class C45Learner implements Learner{
+public class C45Learner extends Learner{
- private int data_size;
- private DecisionTree c45;
- private InstanceList input_data;
- protected ArrayList<Instance> missclassified_data;
public C45Learner() {
- this.data_size = 0;
+ super();
+ super.setDomainType(Util.C45);
}
- public void setDataSize(int num) {
- this.data_size = num;
-
- missclassified_data = new ArrayList<Instance>();
- }
- public int getDataSize() {
- return this.data_size;
- }
-
- public void build(Memory wm) {
+ protected TreeNode train(DecisionTree dt, InstDistribution data_stats) {//List<Instance> data) {
- InstanceList class_instances = wm.getClassInstances();
- input_data = class_instances;
- if (class_instances.getTargets().size()>1) {
- //throw new FeatureNotSupported("There is more than 1 target candidates");
- System.out.println("There is more than 1 target candidates");
- System.exit(0);
- // TODO put the feature not supported exception || implement it
- }
-
- if (Util.DEBUG_LEARNER)
- for (Instance inst: class_instances.getInstances()) {
- System.out.println("Inst: "+ inst);
- }
-
- this.setDataSize(class_instances.getSize());
- DecisionTree dt = null;
- for (String target: class_instances.getTargets()) {
- dt = new DecisionTree(class_instances.getSchema(), target);;
- if (Util.DEBUG_LEARNER) {
- System.out.println("Num of attributes: "+ dt.getAttrDomains().size());
- }
- //System.exit(0);
- InstDistribution stats_by_class = new InstDistribution(dt.getTargetDomain());
- stats_by_class.calculateDistribution(class_instances.getInstances());
- dt.FACTS_READ += class_instances.getSize();
-
- TreeNode root = train(dt, stats_by_class);
- dt.setRoot(root);
- if (Util.DEBUG_LEARNER) {
- System.out.println("Result tree\n" + dt);
- }
- }
- this.c45 = dt;
- }
-
- public TreeNode train(DecisionTree dt, InstDistribution data_stats) {//List<Instance> data) {
-
if (data_stats.getSum() == 0) {
throw new RuntimeException("Nothing to classify, factlist is empty");
}
@@ -169,13 +112,5 @@
}
- public DecisionTree getTree() {
- return c45;
- }
- public int getTreeType() {
- return Util.C45;
- }
-
-
}
Added: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -0,0 +1,10 @@
+package org.drools.learner.builder;
+
+
+import org.drools.learner.Memory;
+
+public interface DecisionTreeBuilder {
+
+ void build(Memory wm, Learner l);
+
+}
Property changes on: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -0,0 +1,146 @@
+package org.drools.learner.builder;
+
+import java.util.ArrayList;
+
+import org.drools.learner.AttributeValueComparator;
+import org.drools.learner.DecisionTree;
+import org.drools.learner.Domain;
+import org.drools.learner.Instance;
+import org.drools.learner.InstanceList;
+import org.drools.learner.Memory;
+import org.drools.learner.Stats;
+import org.drools.learner.eval.ClassDistribution;
+import org.drools.learner.tools.Util;
+
+public class ForestBuilder {
+
+ private int DOMAIN_TYPE;
+ private int TREE_SET = Util.BAG; // default bagging, TODO boosting
+
+ private static final int FOREST_SIZE = 10;
+ private static final double TREE_SIZE_RATIO = 0.9;
+ private static final boolean BAGGING_WITH_REP = true;
+
+ private ArrayList<DecisionTree> forest;
+
+ public void build(Memory mem, Learner trainer) {
+ DOMAIN_TYPE = trainer.getDomainType();
+
+ InstanceList class_instances = mem.getClassInstances();
+ trainer.setInputData(class_instances);
+ if (class_instances.getTargets().size()>1) {
+ //throw new FeatureNotSupported("There is more than 1 target candidates");
+ System.out.println("There is more than 1 target candidates");
+ System.exit(0);
+ // TODO put the feature not supported exception || implement it
+ }
+
+ if (Util.DEBUG_LEARNER) {
+ for (Instance inst: class_instances.getInstances()) {
+ System.out.println("Inst: "+ inst);
+ }
+ }
+
+ int N = class_instances.getSize();
+ int tree_capacity = (int)(TREE_SIZE_RATIO * N);
+ trainer.setDataSize(tree_capacity);
+
+
+ forest = new ArrayList<DecisionTree> (FOREST_SIZE);
+ int i = 0;
+ int[] bag;
+ while (i++ < FOREST_SIZE) {
+ if (BAGGING_WITH_REP)
+ bag = Util.bag_w_rep(tree_capacity, N);
+ else
+ bag = Util.bag_wo_rep(tree_capacity, N);
+
+ InstanceList working_instances = class_instances.getInstances(bag);
+ DecisionTree dt = trainer.train_tree(working_instances);
+
+ dt.setID(i);
+ forest.add(dt);
+ System.out.print('.');
+ }
+ // TODO how to compute a best tree from the forest
+ trainer.setBestTree(forest.get(0));
+ //this.c45 = dt;
+ }
+
+ public Object voteOn(Instance i) {
+
+ Domain target_domain = forest.get(0).getTargetDomain(); // all must have the same target domain
+ ClassDistribution classification = new ClassDistribution(target_domain);
+
+ for (int j = 0; j< forest.size() ; j ++) {
+ Object vote = forest.get(j).vote(i);
+ if (vote != null)
+ classification.change(vote, 1);
+ else {
+ // TODO add an unknown value
+ //classification.change(-1, 1);
+ System.out.println(Util.ntimes("\n", 10)+"Unknown situation at tree: " + j + " for fact "+ i);
+ System.exit(0);
+ }
+ }
+ classification.evaluateMajority();
+ Object winner = classification.get_winner_class();
+
+
+ double ratio = 0.0;
+ if (classification.get_num_ideas() == 1) {
+ //100 %
+ ratio = 1;
+ return winner;
+ } else {
+ int num_votes = classification.getVoteFor(winner);
+ ratio = ((double) num_votes/(double) forest.size());
+ // TODO if the ratio is smaller than some number => reject
+ }
+ return winner;
+
+ }
+
+ public void test(InstanceList data) {
+
+ Stats evaluation = new Stats(data.getSchema().getObjectClass()) ; //represent.getObjClass());
+ Domain targetDomain = forest.get(0).getTargetDomain();
+ int i = 0;
+ for (Instance instance : data.getInstances()) {
+ Object forest_decision = this.voteOn(instance);
+ Integer result = evaluate(targetDomain, instance, forest_decision);
+
+ if (Util.DEBUG_TEST) {
+ System.out.println(Util.ntimes("#\n", 1)+i+ " <START> TEST: instant="+ instance + " = target "+ result);
+ } else {
+ if (i%1000 ==0) System.out.print(".");
+ }
+ evaluation.change(result, 1);
+ i ++;
+ }
+
+ printStats(evaluation);
+ }
+
+ private static Integer evaluate (Domain targetDomain, Instance i, Object tree_decision) {
+ String targetFName = targetDomain.getFName();
+
+ Object tattr_value = i.getAttrValue(targetFName);
+ Object i_category = targetDomain.getCategoryOf(tattr_value);
+
+ if (AttributeValueComparator.instance.compare(i_category, tree_decision) == 0) {
+ return Integer.valueOf(1); //correct
+ } else {
+ return Integer.valueOf(0); // mistake
+ }
+ }
+
+ private void printStats(Stats evaluation) {
+ if (Util.PRINT_STATS) {
+ if (Util.DEBUG_TEST) {
+ evaluation.print2out();
+ }
+ evaluation.print2file("", DOMAIN_TYPE, TREE_SET);
+ }
+ }
+}
Property changes on: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/ID3Learner.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/ID3Learner.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/ID3Learner.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -1,119 +1,26 @@
package org.drools.learner.builder;
-import java.io.Reader;
-import java.io.StringReader;
-import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import org.drools.learner.DecisionTree;
import org.drools.learner.Domain;
-import org.drools.learner.Instance;
-import org.drools.learner.InstanceList;
import org.drools.learner.LeafNode;
-import org.drools.learner.Memory;
import org.drools.learner.TreeNode;
import org.drools.learner.eval.Entropy;
import org.drools.learner.eval.InstDistribution;
-
-
-import org.drools.learner.tools.RulePrinter;
import org.drools.learner.tools.Util;
-public class ID3Learner implements Learner {
+public class ID3Learner extends Learner {
-
- private int data_size;
- private DecisionTree id3;
- private InstanceList input_data;
-
public ID3Learner() {
- this.data_size = 0;
- }
-
- /* TODO updating the working memory
- * (non-Javadoc)
- * @see org.drools.learner.Learner#build(org.drools.WorkingMemory)
- *
+ super();
+ super.setDomainType(Util.ID3);
- ObjectSet fs = wm.getSet(klass, all_discrete);
- Collection<Domain<?>> domains = fs.getDomains();
- Object element = ObjectReader.read(klass, domains, line, separator);
- fs.insert(element);
- */
-
- public void setDataSize(int num) {
- this.data_size = num;
}
- public int getDataSize() {
- return this.data_size;
- }
-
- /*
- * the memory has the information
- * the instances: the objects which the decision tree will work on
- * the schema: the definition of the object instance
- * (Class<?>) klass, String targetField, List<String> workingAttributes
- */
- public void build(Memory wm) {
-
- //ArrayList<String> attrs = new ArrayList<String>(wm.getAttributes());
- //Collections.sort(attrs);
- // foreach instanceList
- this.input_data = wm.getClassInstances();
- for (Instance inst: input_data.getInstances()) {
- System.out.println("Inst: "+ inst);
- }
+ protected TreeNode train(DecisionTree dt, InstDistribution data_stats) {//List<Instance> data) {
- this.setDataSize(input_data.getSize());
- DecisionTree dt = null;
- for (String target: input_data.getTargets()) {
- dt = new DecisionTree(input_data.getSchema(), target);
- //dt.setTarget(target);
-
- if (Util.DEBUG_LEARNER) {
- System.out.println("Num of attributes: "+ dt.getAttrDomains().size());
- }
- //System.exit(0);
- InstDistribution stats_by_class = new InstDistribution(dt.getTargetDomain());
- stats_by_class.calculateDistribution(input_data.getInstances());
- dt.FACTS_READ += input_data.getSize();
-
- TreeNode root = train(dt, stats_by_class);
- dt.setRoot(root);
- if (Util.DEBUG_LEARNER) {
- System.out.println("Result tree\n" + dt);
- }
- }
- id3 = dt;
- }
-
- public Reader readRules() {
- if (this.id3 == null) {
- System.out.println("There is tree/rule to process");
- return null;
- }
-
- RulePrinter my_printer = new RulePrinter(); //bocuk.getNum_fact_trained()
- boolean sort_via_rank = true;
- boolean print = true;
- my_printer.printer(this.id3, sort_via_rank);
-
- String all_rules = my_printer.write2string();
- if (print) {
- //my_printer.write2file("examples", "src/rules/examples/" + file);
- if (Util.DEBUG_LEARNER) {
- System.out.println(all_rules);
- }
- my_printer.write2File(all_rules, false, "", Util.ID3 );
- }
-
- return new StringReader(all_rules);
- }
-
- public TreeNode train(DecisionTree dt, InstDistribution data_stats) {//List<Instance> data) {
-
if (data_stats.getSum() == 0) {
throw new RuntimeException("Nothing to classify, factlist is empty");
}
@@ -184,12 +91,4 @@
return currentNode;
}
-
- public DecisionTree getTree() {
- return id3;
- }
-
- public int getTreeType() {
- return Util.ID3;
- }
}
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/Learner.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/Learner.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/Learner.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -1,21 +1,113 @@
package org.drools.learner.builder;
-import java.io.Reader;
+import java.util.HashSet;
+import java.util.Iterator;
import org.drools.learner.DecisionTree;
-import org.drools.learner.Memory;
+import org.drools.learner.Domain;
+import org.drools.learner.Instance;
+import org.drools.learner.InstanceList;
+import org.drools.learner.TreeNode;
+import org.drools.learner.eval.InstDistribution;
+import org.drools.learner.tools.Util;
-public interface Learner {
- /*
- * the memory has the information
- * the instances: the objects which the decision tree will work on
- * the schema: the definition of the object instance
- * (Class<?>) klass, String targetField, List<String> workingAttributes
- */
- void build(Memory wm);
+public abstract class Learner {
- DecisionTree getTree();
+ private int data_size;
+ private DecisionTree best_tree;
+ private InstanceList input_data;
+ protected HashSet<Instance> missclassified_data;
- int getTreeType();
+ private int DOMAIN_TYPE;
+
+
+ protected abstract TreeNode train(DecisionTree dt, InstDistribution data_stats);
+
+ public Learner() {
+ this.data_size = 0;
+ }
+
+
+ public DecisionTree train_tree(InstanceList working_instances) {
+ String target = this.getTargetDomain().getFName();
+ DecisionTree dt = new DecisionTree(input_data.getSchema(), target);
+
+ if (Util.DEBUG_LEARNER) {
+ System.out.println("Num of attributes: "+ dt.getAttrDomains().size());
+ }
+ InstDistribution stats_by_class = new InstDistribution(dt.getTargetDomain());
+ stats_by_class.calculateDistribution(working_instances.getInstances());
+ dt.FACTS_READ += working_instances.getSize();
+
+ TreeNode root = train(dt, stats_by_class);
+ dt.setRoot(root);
+ if (Util.DEBUG_LEARNER) {
+ System.out.println("Result tree\n" + dt);
+ }
+ return dt;
+ }
+
+ public Domain getTargetDomain() {
+ Iterator<String> it_target= input_data.getTargets().iterator();
+ // TODO check if there is a target candidate
+ String target = it_target.next();
+ return input_data.getSchema().getAttrDomain(target);
+
+ }
+
+ // TODO how are we going to select the target domain if there is more than one candidate
+ private DecisionTree select_target(InstanceList working_instances) {
+ DecisionTree dt = null;
+ for (String target: input_data.getTargets()) {
+ dt = new DecisionTree(input_data.getSchema(), target);
+
+ if (Util.DEBUG_LEARNER) {
+ System.out.println("Num of attributes: "+ dt.getAttrDomains().size());
+ }
+ InstDistribution stats_by_class = new InstDistribution(dt.getTargetDomain());
+ stats_by_class.calculateDistribution(working_instances.getInstances());
+ dt.FACTS_READ += working_instances.getSize();
+
+ TreeNode root = train(dt, stats_by_class);
+ dt.setRoot(root);
+ if (Util.DEBUG_LEARNER) {
+ System.out.println("Result tree\n" + dt);
+ }
+ }
+ return dt;
+ }
+
+
+ public void setDataSize(int num) {
+ this.data_size = num;
+
+ missclassified_data = new HashSet<Instance>();
+ }
+
+ public int getDataSize() {
+ return this.data_size;
+ }
+
+ public DecisionTree getTree() {
+ return best_tree;
+ }
+
+ public int getDomainType() {
+ return this.DOMAIN_TYPE;
+ }
+
+ public void setDomainType(int type) {
+ this.DOMAIN_TYPE = type;
+ }
+
+ public void setInputData(InstanceList class_instances) {
+ this.input_data = class_instances;
+
+ }
+
+ public void setBestTree(DecisionTree dt) {
+ this.best_tree = dt;
+ }
+
}
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/LearnerFactory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/LearnerFactory.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/LearnerFactory.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -6,9 +6,6 @@
import org.drools.learner.tools.Util;
public class LearnerFactory {
-
- //static int TREE_TYPE = ID3;
-
public static Learner createID3(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
/*
@@ -25,9 +22,10 @@
// set to memory type only the discrete domains
ID3Learner id3 = new ID3Learner();
- id3.build(mem);//obj_class, target_attr, working_attr
-
- Tester.test(id3.getTree(), mem.getClassInstances());
+ SingleTreeBuilder single_builder = new SingleTreeBuilder();
+ single_builder.build(mem, id3);//obj_class, target_attr, working_attr
+ single_builder.test(mem.getClassInstances());
+ //Tester.test(id3, mem.getClassInstances());
return id3;
}
@@ -39,23 +37,26 @@
// set to memory type only the discrete domains
C45Learner c45 = new C45Learner();
- c45.build(mem);//obj_class, target_attr, working_attr
- Tester.test(c45.getTree(), mem.getClassInstances());
+ SingleTreeBuilder single_builder = new SingleTreeBuilder();
+ single_builder.build(mem, c45);//obj_class, target_attr, working_attr
+ single_builder.test(mem.getClassInstances());
+ //Tester.test(c45, mem.getClassInstances());
return c45;
}
- public static Learner createID3(WorkingMemory wm) {
+ public static Learner createC45fromBag(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
- /*
- * Quesitons:
- * 1- which class to work with?
- * 2- what is its target attribute?
- * 3- what are the objects
- */
- //String target_attr = ObjectReader.getTargetAnnotation(arest.getClass());
+ /* create the memory */
+ Memory mem = Memory.createFromWorkingMemory(wm, obj_class, Util.C45);
+ // set to memory type only the discrete domains
- ID3Learner id3 = new ID3Learner();
- //id3.build(wm);
- return id3;
+
+ C45Learner c45 = new C45Learner();
+ ForestBuilder forest = new ForestBuilder();
+ forest.build(mem, c45);
+ forest.test(mem.getClassInstances());
+
+ //Tester bla => test(c45, mem.getClassInstances());
+ return c45;
}
}
Added: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -0,0 +1,97 @@
+package org.drools.learner.builder;
+
+import org.drools.learner.AttributeValueComparator;
+import org.drools.learner.DecisionTree;
+import org.drools.learner.Domain;
+import org.drools.learner.Instance;
+import org.drools.learner.InstanceList;
+import org.drools.learner.Memory;
+import org.drools.learner.Stats;
+import org.drools.learner.tools.Util;
+
+public class SingleTreeBuilder implements DecisionTreeBuilder{
+
+ DecisionTree one_tree;
+
+ private int DOMAIN_TYPE;
+ private int TREE_SET = Util.SINGLE; // default bagging, TODO boosting
+
+ /*
+ * the memory has the information
+ * the instances: the objects which the decision tree will work on
+ * the schema: the definition of the object instance
+ * (Class<?>) klass, String targetField, List<String> workingAttributes
+ */
+ public void build(Memory mem, Learner trainer) {
+ DOMAIN_TYPE = trainer.getDomainType();
+
+
+ InstanceList class_instances = mem.getClassInstances();
+ trainer.setInputData(class_instances);
+ if (class_instances.getTargets().size()>1) {
+ //throw new FeatureNotSupported("There is more than 1 target candidates");
+ System.out.println("There is more than 1 target candidates");
+ System.exit(0);
+ // TODO put the feature not supported exception || implement it
+ }
+
+ if (Util.DEBUG_LEARNER)
+ for (Instance inst: class_instances.getInstances()) {
+ System.out.println("Inst: "+ inst);
+ }
+
+ trainer.setDataSize(class_instances.getSize());
+ one_tree = trainer.train_tree(class_instances);
+ trainer.setBestTree(one_tree);
+ }
+
+ /* test the entire set*/
+ public void test(InstanceList data) {
+ if (this.one_tree == null) {
+ System.out.println("The tree is not created");
+ System.exit(0);
+ }
+
+ if (Util.DEBUG_TEST) {
+ System.out.println(Util.ntimes("\n", 2)+Util.ntimes("$", 5)+" TESTING "+Util.ntimes("\n", 2));
+ }
+
+ Stats evaluation = new Stats(this.one_tree.getObjClass());
+ int i = 0;
+ for (Instance instance : data.getInstances()) {
+ Object tree_decision = this.one_tree.vote(instance);
+ Integer result = evaluate(this.one_tree.getTargetDomain(), instance, tree_decision);
+ if (Util.DEBUG_TEST) {
+ System.out.println(Util.ntimes("#\n", 1)+i+ " <START> TEST: instant="+ instance + " = target "+ result);
+ } else {
+ if (i%1000 ==0) System.out.print(".");
+ }
+ evaluation.change(result, 1);
+ i ++;
+ }
+ printStats(evaluation);
+ }
+
+ private static Integer evaluate (Domain targetDomain, Instance i, Object tree_decision) {
+ String targetFName = targetDomain.getFName();
+
+ Object tattr_value = i.getAttrValue(targetFName);
+ Object i_category = targetDomain.getCategoryOf(tattr_value);
+
+ if (AttributeValueComparator.instance.compare(i_category, tree_decision) == 0) {
+ return Integer.valueOf(1); //correct
+ } else {
+ return Integer.valueOf(0); // mistake
+ }
+ }
+
+ private void printStats(Stats evaluation) {
+ if (Util.PRINT_STATS) {
+ if (Util.DEBUG_TEST) {
+ evaluation.print2out();
+ }
+ evaluation.print2file("", DOMAIN_TYPE, TREE_SET);
+ }
+ }
+
+}
Property changes on: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/Tester.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/Tester.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/builder/Tester.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -1,45 +1,37 @@
package org.drools.learner.builder;
-import org.drools.learner.DecisionTree;
+import org.drools.learner.AttributeValueComparator;
+import org.drools.learner.Domain;
import org.drools.learner.Instance;
import org.drools.learner.InstanceList;
import org.drools.learner.Stats;
import org.drools.learner.tools.Util;
-public class Tester {
+public abstract class Tester{
- /* test the entire set*/
- public static void test(DecisionTree dt, InstanceList data) {
- if (dt == null) {
- System.out.println("The tree is not created");
- System.exit(0);
- }
+ private int DOMAIN_TYPE = 0, TREE_SET =0;
+ public abstract void test(DecisionTreeBuilder builder, InstanceList data);
+
+ public static Integer evaluate (Domain targetDomain, Instance i, Object tree_decision) {
+ String targetFName = targetDomain.getFName();
- if (Util.DEBUG_TEST) {
- System.out.println(Util.ntimes("\n", 2)+Util.ntimes("$", 5)+" TESTING "+Util.ntimes("\n", 2));
- }
+ Object tattr_value = i.getAttrValue(targetFName);
+ Object i_category = targetDomain.getCategoryOf(tattr_value);
- Stats evaluation = new Stats(dt.getObjClass());
- int i = 0;
- for (Instance instant : data.getInstances()) {
-
- Integer result = dt.test(instant);
- if (Util.DEBUG_TEST) {
- System.out.println(Util.ntimes("#\n", 1)+i+ " <START> TEST: instant="+ instant + " = target "+ result);
- } else {
- if (i%1000 ==0) System.out.print(".");
- }
- evaluation.change(result, 1);
- i ++;
- }
-
+ if (AttributeValueComparator.instance.compare(i_category, tree_decision) == 0) {
+ return Integer.valueOf(1); //correct
+ } else {
+ return Integer.valueOf(0); // mistake
+ }
+ }
+
+ public void printStats(Stats evaluation) {
if (Util.PRINT_STATS) {
if (Util.DEBUG_TEST) {
evaluation.print2out();
}
- evaluation.print2file("");
+ evaluation.print2file("", this.DOMAIN_TYPE, this.TREE_SET);
}
- return;
}
}
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/eval/InstDistribution.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/eval/InstDistribution.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/eval/InstDistribution.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -1,6 +1,7 @@
package org.drools.learner.eval;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.Hashtable;
import java.util.List;
@@ -175,7 +176,7 @@
}
}
- public void missClassifiedInstances(ArrayList<Instance> missclassification) {
+ public void missClassifiedInstances(HashSet<Instance> missclassification) {
Object winner = super.get_winner_class();
for (int idx = 0; idx < super.target_attr.getCategoryCount(); idx++) {
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -36,7 +36,7 @@
if (Util.DEBUG_RULE_PRINTER) {
System.out.println(all_rules);
}
- my_printer.write2File(all_rules, false, "", learner.getTreeType());
+ my_printer.write2File(all_rules, false, "", learner.getDomainType(), 0);
}
return new StringReader(all_rules);
@@ -141,7 +141,7 @@
return newRule;
}
- public void write2File(String toWrite, boolean append, String dataFile, int TREE_TYPE) {
+ public void write2File(String toWrite, boolean append, String dataFile, int domain_type, int tree_set) {
String packageFolders = this.getRuleClass().getPackage().getName();
@@ -149,16 +149,8 @@
String fileName = (dataFile == null || dataFile == "") ? this.getRuleClass().getSimpleName().toLowerCase(): dataFile;
- switch (TREE_TYPE) {
- case Util.ID3:
- fileName += "_id3" + ".drl";
- break;
- case Util.C45:
- fileName += "_c45" + ".drl";
- break;
- default:
- fileName += "_?" + ".drl";
- }
+ String suffix = Util.getFileSuffix(domain_type, tree_set);
+ fileName += "_"+suffix + ".drl";
String dataFileName = "src/main/rules/"+_packageNames+"/"+ fileName;
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/tools/Util.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/tools/Util.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-core/src/main/java/org/drools/learner/tools/Util.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -3,10 +3,12 @@
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Random;
public class Util {
public static final int ID3 = 1, C45 = 2;
+ public static final int SINGLE = 1, BAG = 2, BOOST = 3;
//public static final boolean DEBUG = false;
public static final boolean DEBUG_TEST = false;
@@ -22,6 +24,10 @@
public static final boolean DEBUG_ENTROPY = false;
public static final boolean DEBUG_DIST = false;
+
+ public static final boolean DEBUG_DECISION_TREE = false;
+
+
public static int MAX_NUM_RULES = 1000;
public static boolean ONLY_ACTIVE_RULES = true; /* TODO into global settings */
@@ -29,7 +35,10 @@
public static boolean SORT_RULES_BY_RANK = true;
public static boolean PRINT_RULES = true;
+ private static boolean WITH_REP = true;
+ private static Random BAGGING = new Random(System.currentTimeMillis());
+
public static String ntimes(String s,int n){
StringBuffer buf = new StringBuffer();
for (int i = 0; i < n; i++) {
@@ -98,6 +107,37 @@
return 0;
}
+ public static int[] bag_w_rep(int k, int N) {
+ int[] bag = new int[k];
+ int i = 0;
+ while (i<k) {
+ bag[i++] = BAGGING.nextInt(N);
+ }
+ return bag;
+ }
+
+ public static int[] bag_wo_rep(int k, int N) {
+ int[] bag = new int[k];
+ boolean[] selected = new boolean[N];
+ int i = 0;
+ while (i<k) {
+ int new_i = BAGGING.nextInt(N--);
+ //if (Util.DEBUG) System.out.print("new_i "+ new_i +"\t");
+ int selected_j=0, j=0;
+ while (j<new_i || selected[j]) {
+ if (selected[j]) {
+ new_i++;
+ selected_j = j;
+ }
+ j++;
+ }
+ selected[j] = true;
+ bag[i] = j;
+ i++;
+ }
+ return bag;
+ }
+
public static Object convertPrimitiveType (Object primitiveValue) {
Class klass = primitiveValue.getClass();
if (klass.equals(Boolean.TYPE)) {
@@ -151,7 +191,38 @@
}
+ public static String getFileSuffix(int domain_type, int tree_set) {
+ String suffix = "";
+ switch (domain_type) {
+ case Util.ID3:
+ suffix += "id3" ;
+ break;
+ case Util.C45:
+ suffix += "c45";
+ break;
+ default:
+ suffix += "?" ;
+
+ }
+
+ switch (tree_set) {
+ case Util.SINGLE:
+ suffix += "_one";
+ break;
+ case Util.BAG:
+ suffix += "_bag";
+ break;
+ case Util.BOOST:
+ suffix += "_boost";
+ break;
+ default:
+ suffix += "_?" ;
+
+ }
+ return suffix;
+ }
+
}
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfC45Example.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfC45Example.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfC45Example.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -38,8 +38,10 @@
}
// instantiate a learner for a specific object class and pass session to train
- Learner learner = LearnerFactory.createC45(session, obj_class);
-
+ Learner learner ;
+ //learner = LearnerFactory.createC45(session, obj_class);
+ learner = LearnerFactory.createC45fromBag(session, obj_class);
+
final PackageBuilder builder = new PackageBuilder();
//this wil generate the rules, then parse and compile in one step
builder.addPackageFromLearner( learner );
Modified: labs/jbossrules/contrib/machinelearning/4.0.x/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/4.0.x/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExample.java 2008-05-26 11:42:26 UTC (rev 20163)
+++ labs/jbossrules/contrib/machinelearning/4.0.x/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExample.java 2008-05-26 12:34:29 UTC (rev 20164)
@@ -38,7 +38,9 @@
}
// instantiate a learner for a specific object class and pass session to train
- Learner learner = LearnerFactory.createC45(session, obj_class);
+ Learner learner ;
+ //learner = LearnerFactory.createC45(session, obj_class);
+ learner = LearnerFactory.createC45fromBag(session, obj_class);
final PackageBuilder builder = new PackageBuilder();
//this wil generate the rules, then parse and compile in one step
More information about the jboss-svn-commits
mailing list