[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