[jboss-svn-commits] JBL Code SVN: r19714 - in labs/jbossrules/contrib/machinelearning/decisiontree/src/dt: builder and 2 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Thu Apr 24 16:20:49 EDT 2008
Author: gizil
Date: 2008-04-24 16:20:49 -0400 (Thu, 24 Apr 2008)
New Revision: 19714
Modified:
labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/DecisionTree.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/LeafNode.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/TreeNode.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/builder/C45TreeBuilder.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/builder/DecisionTreeBuilder.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/BooleanDomain.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/Domain.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/Fact.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/LiteralDomain.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/NumericDomain.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/WorkingMemory.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/tools/DecisionTreeSerializer.java
labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/tools/FactProcessor.java
Log:
a better re-training (with the matching facts saved at each treenode) tested with a small data set
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/DecisionTree.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/DecisionTree.java 2008-04-24 19:38:54 UTC (rev 19713)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/DecisionTree.java 2008-04-24 20:20:49 UTC (rev 19714)
@@ -2,11 +2,13 @@
import java.io.Serializable;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Hashtable;
import java.util.List;
import dt.memory.Domain;
import dt.memory.Fact;
+import dt.tools.Util;
public class DecisionTree implements Serializable{
@@ -98,6 +100,17 @@
public Integer test(Fact f) {
return this.getRoot().evaluate(f);
}
+
+ public String toString(HashMap <TreeNode, ArrayList<Fact>> _facts) {
+ String out = "Facts scanned " + FACTS_READ + "\n";
+
+ System.out.println("!!Printing tree: \n"+ Util.ntimes("\n", 3));
+ for (TreeNode obj_node : _facts.keySet())
+ System.out.println("* o.id:"+obj_node.getID()+ " o.d:"+obj_node.getDomain()+ " o.h:"+ obj_node.hashCode()+ " => "+_facts.get(obj_node) );
+
+ System.out.println("!!Had print tree"+ Util.ntimes("\n", 3));
+ return out + root.toString(_facts);
+ }
@Override
public String toString() {
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/LeafNode.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/LeafNode.java 2008-04-24 19:38:54 UTC (rev 19713)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/LeafNode.java 2008-04-24 20:20:49 UTC (rev 19714)
@@ -40,6 +40,11 @@
}
}
+
+// public int hashCode() {
+// return super.hashCode() ^ targetValue.hashCode() ;//should i add the children
+// }
+
public void addNode(Object attributeValue, TreeNode node) {
throw new RuntimeException("cannot add Node to a leaf node");
}
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/TreeNode.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/TreeNode.java 2008-04-24 19:38:54 UTC (rev 19713)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/TreeNode.java 2008-04-24 20:20:49 UTC (rev 19714)
@@ -1,6 +1,8 @@
package dt;
import java.io.Serializable;
+import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashMap;
import java.util.Hashtable;
import dt.memory.Domain;
@@ -10,8 +12,13 @@
public class TreeNode implements Serializable{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
private Domain<?> domain;
private Hashtable<Object, TreeNode> children;
+ private int id;
public TreeNode(Domain<?> domain)
@@ -19,8 +26,28 @@
this.domain = domain;
this.children = new Hashtable<Object, TreeNode>();
}
+ public void setID(int bocuk_id) {
+ this.id = bocuk_id;
+ }
+ public int getID() {
+ return this.id;
+ }
+ @Override
+ public boolean equals(Object obj) {
+ // TODO Auto-generated method stub
+ if (obj instanceof TreeNode)
+ return this.hashCode() == ((TreeNode) obj).hashCode();
+ else
+ return false;
+ }
+
+ public int hashCode() {
+ return id ; //domain.hashCode() ^ children.hashCode() ^ id;//should i add the children
+ }
+
+
public void addNode(Object attributeValue, TreeNode node) {
children.put(attributeValue, node);
}
@@ -100,25 +127,65 @@
return (Integer.valueOf(2));
}
}
-
+ public String toString(int depth) {
+ return toString(1, 1, new StringBuffer());
+ }
public String toString() {
- return toString(1, new StringBuffer());
+ return toString(1, 5, new StringBuffer());
}
- public String toString(int depth, StringBuffer buf) {
- if (domain != null) {
- buf.append(Util.ntimes("\t", depth));
+ public String toString(int tab, int depth, StringBuffer buf) {
+ if (depth > 0 && domain != null) {
+ buf.append(Util.ntimes("\t", tab));
buf.append(Util.ntimes("***",1));
buf.append( domain.getName() + " \n");
for (Object attributeValue : children.keySet()) {
- buf.append(Util.ntimes("\t", depth + 1));
+ buf.append(Util.ntimes("\t", tab + 1));
buf.append("+" + attributeValue );
buf.append("\n");
TreeNode child = children.get(attributeValue);
- buf.append(child.toString(depth + 1, new StringBuffer()));
+ buf.append(child.toString(tab + 1, --depth, new StringBuffer()));
}
}
return buf.toString();
}
+
+ public String toString(HashMap <TreeNode, ArrayList<Fact>> matched_facts) {
+ return toString(1, 1, new StringBuffer(), matched_facts);
+ }
+
+ public String toString(int tab, int depth, StringBuffer buf, HashMap <TreeNode, ArrayList<Fact>> matched_facts) {
+ // System.out.println("fact keys" + _facts.keySet());
+ if (domain != null) {
+
+// for (TreeNode obj_node : matched_facts.keySet())
+// System.out.println("* o.id:"+obj_node.getID()+ " o.d:"+obj_node.getDomain()+ " o.h: "+ obj_node.hashCode()+ " => "+matched_facts.get(obj_node) );
+// System.out.println();
+ buf.append(Util.ntimes("\t", tab));
+ buf.append(Util.ntimes("***",1));
+ buf.append( domain.getName() + " n.h:"+this.hashCode()+ " \t");
+ //buf.append( domain.getName() + " \t");
+ if (matched_facts != null) {
+ if (matched_facts.containsKey(this)) {
+ ArrayList<Fact> currentFacts = matched_facts.get(this);
+ for (Fact f: currentFacts) {
+ //buf.append( f.hashCode() + ", ");
+ buf.append( f+ ", ");
+ }
+ }
+ else
+ buf.append("n.id: "+ this.getID() + " no facts");
+ }
+ buf.append(" \n");
+ for (Object attributeValue : children.keySet()) {
+ buf.append(Util.ntimes("\t", tab + 1));
+ buf.append("+" + attributeValue );
+ buf.append("\n");
+ TreeNode child = children.get(attributeValue);
+ buf.append(child.toString(tab + 1, --depth, new StringBuffer(), matched_facts));
+ }
+ }
+ return buf.toString();
+ }
}
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/builder/C45TreeBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/builder/C45TreeBuilder.java 2008-04-24 19:38:54 UTC (rev 19713)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/builder/C45TreeBuilder.java 2008-04-24 20:20:49 UTC (rev 19714)
@@ -2,7 +2,6 @@
import java.util.ArrayList;
import java.util.Collections;
-import java.util.Comparator;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
@@ -38,11 +37,11 @@
}
MyThread helper;
- private int FUNC_CALL = 0;
+ protected int FUNC_CALL = 0;
protected int num_fact_trained = 0;
private ArrayList<Fact> facts;
private ArrayList<Fact> training_facts;
- private ArrayList<Fact> unclassified_facts;
+ protected ArrayList<Fact> unclassified_facts;
private WorkingMemory global_wm;
private List<Domain<?>> domains;
@@ -138,6 +137,10 @@
}
+ public String getTarget() {
+ return this.target;
+ }
+
public void setTarget(String targetField) {
this.target = targetField;
//attrsToClassify.remove(target);
@@ -152,7 +155,7 @@
//if (!attribute.equals(this.target))
attributes.add(attribute);
}
- private void init_dt(DecisionTree dt, String targetField) {
+ public void init_dt(DecisionTree dt, String targetField) {
dt.setTarget(targetField);
for (Domain<?> d : domains) {
dt.addDomain(d);
@@ -185,8 +188,6 @@
training_facts.addAll(facts);
dt.FACTS_READ += training_facts.size();
- /* you must set this when the training called the first time */
- setNum_fact_trained(training_facts.size());
//while ()
TreeNode root = train(dt, training_facts, attrs);
@@ -242,9 +243,8 @@
}
}
dt.FACTS_READ += facts.size();
+ this.add_to_training(facts);
- setNum_fact_trained(facts.size());
-
if (workingAttributes != null)
for (String attr : workingAttributes) {
dt.addDomain(klass_fs.getDomain(attr));
@@ -275,10 +275,8 @@
ArrayList<String> attrs = new ArrayList<String>(dt.getAttributes());
Collections.sort(attrs);
- training_facts.addAll(first_facts);
+ this.add_to_training(first_facts); /* you must set this when the training called the first time */
dt.FACTS_READ += first_facts.size();
- /* you must set this when the training called the first time */
- setNum_fact_trained(training_facts.size());
//while ()
TreeNode root = train(dt, training_facts, attrs);
@@ -349,8 +347,7 @@
for (Object value : filtered_facts.keySet()) {
/* split the last two class at the same time */
- ArrayList<String> attributeNames_copy = new ArrayList<String>(
- attributeNames);
+ ArrayList<String> attributeNames_copy = new ArrayList<String>(attributeNames);
attributeNames_copy.remove(choosenDomain.getName());
if (filtered_facts.get(value).isEmpty()) {
@@ -374,10 +371,10 @@
ArrayList<String> attrs = new ArrayList<String>(dt.getAttributes());
Collections.sort(attrs);
- training_facts.addAll(new_facts);
+
+ this.add_to_training(new_facts); /* you must set this when the training called the first time */
dt.FACTS_READ += new_facts.size();
- /* you must set this when the training called the first time */
- setNum_fact_trained(training_facts.size());
+
System.out.println(Util.ntimes("\n", 10)+"How facts are u training? "+ training_facts.size());
//while ()
TreeNode root = re_train(dt, dt.getRoot(), training_facts, attrs);
@@ -479,17 +476,17 @@
((LeafNode)childNode).setTargetValue(value);
//currentNode.
}
- }
-
-
-
+ }
} else {
- if (childNode == null) {
- TreeNode newNode = train(dt, filtered_facts.get(value), attributeNames_copy);
- currentNode.addNode(value, newNode);
+
+ if (childNode == null) { // there was no node assigned for that object value
+ childNode = train(dt, filtered_facts.get(value), attributeNames_copy);
+ currentNode.addNode(value, childNode);
}
- TreeNode newNode = re_train(dt, childNode, filtered_facts.get(value), attributeNames_copy);
+ else {
+ TreeNode newNode = re_train(dt, childNode, filtered_facts.get(value), attributeNames_copy);
//currentNode.addNode(value, newNode);
+ }
}
}
@@ -573,12 +570,18 @@
public int getNumCall() {
return FUNC_CALL;
}
-
public int getNum_fact_trained() {
- return num_fact_trained;
+ return training_facts.size();
}
+// public int getNum_fact_trained() {
+// return num_fact_trained;
+// }
+//
+// public void setNum_fact_trained(int num_fact_processed) {
+// this.num_fact_trained = num_fact_processed;
+// }
- public void setNum_fact_trained(int num_fact_processed) {
- this.num_fact_trained = num_fact_processed;
+ public void add_to_training(List<Fact> new_facts) {
+ this.training_facts.addAll(new_facts);
}
}
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/builder/DecisionTreeBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/builder/DecisionTreeBuilder.java 2008-04-24 19:38:54 UTC (rev 19713)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/builder/DecisionTreeBuilder.java 2008-04-24 20:20:49 UTC (rev 19714)
@@ -17,5 +17,4 @@
public List<Integer> test(DecisionTree dt, List<Fact> facts);
//DecisionTree build(WorkingMemory simple, String klass_name, String target_attr,List<String> workingAttributes);
int getNum_fact_trained();
- void setNum_fact_trained(int num);
}
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/BooleanDomain.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/BooleanDomain.java 2008-04-24 19:38:54 UTC (rev 19713)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/BooleanDomain.java 2008-04-24 20:20:49 UTC (rev 19714)
@@ -56,7 +56,7 @@
}
public int hashCode() {
- return fName.hashCode();
+ return fName.hashCode(); // ^ fValues.hashCode();
}
public boolean isConstant() {
@@ -154,4 +154,9 @@
return b1.equals(b2) ? 0 : 1;
}
+ public int hashcode() {
+ // TODO Auto-generated method stub
+ return 0;
+ }
+
}
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/Domain.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/Domain.java 2008-04-24 19:38:54 UTC (rev 19713)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/Domain.java 2008-04-24 20:20:49 UTC (rev 19714)
@@ -41,7 +41,7 @@
int compare(Object o1, Object o2);
-
+ public int hashCode();
}
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/Fact.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/Fact.java 2008-04-24 19:38:54 UTC (rev 19713)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/Fact.java 2008-04-24 20:20:49 UTC (rev 19714)
@@ -8,6 +8,10 @@
public class Fact implements Serializable{
+ /**
+ *
+ */
+ private static final long serialVersionUID = 1L;
private Hashtable<String, Domain<?>> fields;
private HashMap<String, Object> values;
@@ -66,17 +70,23 @@
Fact other = (Fact) o;
return fields.equals(other.fields); //TODO work on the equals() fnc
}
-
+
public int hashCode() {
- return fields.hashCode();
+ return values.hashCode();
}
public String toString() {
- String out = "";
- for (String key: fields.keySet())
- {
- out += fields.get(key) +"="+values.get(key)+",";
- }
+ String out = this.hashCode() + "";
+
+// String out = "";
+// for (String key: fields.keySet())
+// {
+// out += "-"+values.get(key);
+// }
+// for (String key: fields.keySet())
+// {
+// out += fields.get(key) +"="+values.get(key)+",";
+// }
return out;
}
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/LiteralDomain.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/LiteralDomain.java 2008-04-24 19:38:54 UTC (rev 19713)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/LiteralDomain.java 2008-04-24 20:20:49 UTC (rev 19714)
@@ -2,7 +2,6 @@
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
import java.util.Comparator;
import java.util.List;
@@ -113,10 +112,6 @@
public List<String> getValues() {
return fValues;
}
-
- public int hashCode() {
- return fName.hashCode();
- }
public boolean isConstant() {
return this.constant;
@@ -198,4 +193,7 @@
return s1.equals(s2) ? 0 : 1;
}
+ public int hashCode() {
+ return fName.hashCode() ^ fValues.hashCode();
+ }
}
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/NumericDomain.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/NumericDomain.java 2008-04-24 19:38:54 UTC (rev 19713)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/NumericDomain.java 2008-04-24 20:20:49 UTC (rev 19714)
@@ -132,7 +132,7 @@
public int hashCode() {
- return fName.hashCode();
+ return fName.hashCode() ^ fValues.hashCode(); //TODO
}
public boolean isConstant() {
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/WorkingMemory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/WorkingMemory.java 2008-04-24 19:38:54 UTC (rev 19713)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/memory/WorkingMemory.java 2008-04-24 20:20:49 UTC (rev 19714)
@@ -22,9 +22,9 @@
domainset = new Hashtable<String, Domain<?>>();
}
- public List<Fact> getFacts(Class<?> klass) {
+ public ArrayList<Fact> getFacts(Class<?> klass) {
Iterator<FactSet> it_fs = this.getFactsets();
- List<Fact> facts = new ArrayList<Fact>();
+ ArrayList<Fact> facts = new ArrayList<Fact>();
FactSet klass_fs = null;
while (it_fs.hasNext()) {
FactSet fs = it_fs.next();
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/tools/DecisionTreeSerializer.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/tools/DecisionTreeSerializer.java 2008-04-24 19:38:54 UTC (rev 19713)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/tools/DecisionTreeSerializer.java 2008-04-24 20:20:49 UTC (rev 19714)
@@ -9,6 +9,7 @@
import java.io.ObjectOutputStream;
import dt.DecisionTree;
+import dt.builder.C45TreeIterator;
import dt.builder.DecisionTreeBuilder;
public class DecisionTreeSerializer {
@@ -45,36 +46,25 @@
public static Object read(String file_name) throws Exception {
File file =new File(file_name);//"temp.tree"
if(!file.exists() || (file.length()<=0)) {
- System.out.println("File doesnot exit, creating...");
throw new Exception("File is not found or empty");
}
- try {
- // Read from disk using FileInputStream
- FileInputStream f_in = new FileInputStream(file);
-
- // Read object using ObjectInputStream
- ObjectInputStream obj_in = new ObjectInputStream (f_in);
+
+ // Read from disk using FileInputStream
+ FileInputStream f_in = new FileInputStream(file);
+
+ // Read object using ObjectInputStream
+ ObjectInputStream obj_in = new ObjectInputStream (f_in);
- // Read an object
- Object obj = obj_in.readObject();
+ // Read an object
+ Object obj = obj_in.readObject();
- if (obj instanceof DecisionTree || obj instanceof DecisionTreeBuilder) {
- System.out.println("The object class found");
- return obj;
- } else {
- throw new Exception("There is something else in the decision tree");
- }
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (ClassNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ if (obj instanceof DecisionTree || obj instanceof DecisionTreeBuilder || obj instanceof C45TreeIterator ) {
+ System.out.println("The object class found");
+ return obj;
+ } else {
+ throw new Exception("There is something else in the decision tree");
}
- return null;
+ //return null;
Modified: labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/tools/FactProcessor.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/tools/FactProcessor.java 2008-04-24 19:38:54 UTC (rev 19713)
+++ labs/jbossrules/contrib/machinelearning/decisiontree/src/dt/tools/FactProcessor.java 2008-04-24 20:20:49 UTC (rev 19714)
@@ -12,8 +12,7 @@
public class FactProcessor {
- public static Hashtable<Object, List<Fact>> splitFacts(
- List<Fact> facts, Domain<?> choosenDomain) {
+ public static Hashtable<Object, ArrayList<Fact>> splitFacts(ArrayList<Fact> facts, Domain<?> choosenDomain) {
if (choosenDomain.isDiscrete()) {
return FactProcessor.splitFacts_disc(facts, choosenDomain);
} else {
@@ -22,7 +21,103 @@
}
}
+ public static Hashtable<Object, ArrayList<Fact>> splitFacts_disc(ArrayList<Fact> facts, Domain<?> choosenDomain) {
+ String attributeName = choosenDomain.getName();
+ List<?> attributeValues = choosenDomain.getValues();
+ Hashtable<Object, ArrayList<Fact>> factLists = new Hashtable<Object, ArrayList<Fact>>(attributeValues.size());
+ for (Object v : attributeValues) {
+ factLists.put(v, new ArrayList<Fact>());
+ }
+ for (Fact f : facts) {
+ factLists.get(f.getFieldValue(attributeName)).add(f);
+ }
+ return factLists;
+ }
+
+ /* it must work */
+ private static Hashtable<Object, ArrayList<Fact>> splitFacts_cont_opt(ArrayList<Fact> facts, Domain<?> attributeDomain) {
+
+ String attributeName = attributeDomain.getName();
+
+ if (Util.DEBUG) System.out.println("FactProcessor.splitFacts_cont() attr_split "+ attributeName);
+
+ List<?> splitValues = attributeDomain.getValues();
+ List<Integer> splitIndices = attributeDomain.getIndices();
+ if (Util.DEBUG) {
+ System.out.println("FactProcessor.splitFacts_cont() haniymis benim repsentativelerim: "+ splitValues.size() + " and the split points "+ splitIndices.size());
+
+ System.out.println("FactProcessor.splitFacts_cont() before splitting "+ facts.size());
+
+ int index = 0;
+ int split_index = 0;
+ Object attr_key = splitValues.get(split_index);
+ for (Fact f : facts) {
+
+ if (index == splitIndices.get(split_index).intValue()+1 ) {
+ System.out.print("PRINT* (");
+ attr_key = splitValues.get(split_index+1);
+ split_index++;
+ } else {
+ System.out.print("PRINT (");
+ }
+ System.out.println(split_index+"): fact "+f);
+ index++;
+ }
+
+ }
+
+ Hashtable<Object, ArrayList<Fact>> factLists = new Hashtable<Object, ArrayList<Fact>>(splitValues.size());
+ for (Object v: attributeDomain.getValues()) {
+ factLists.put(v, new ArrayList<Fact>());
+ }
+
+ //Comparator<Fact> cont_comp = attributeDomain.factComparator();
+ Iterator<Integer> splits_it = splitIndices.iterator();
+ int start_point = 0;
+ int index = 0;
+ while (splits_it.hasNext()) {// || index < attributeDomain.getValues().size()
+ int integer_index = splits_it.next().intValue();
+// if (splits_it.hasNext())
+// integer_index = splits_it.next().intValue();
+// else
+// integer_index = facts.size();
+
+ Object category = splitValues.get(index);
+ //System.out.println("FactProcessor.splitFacts_cont() new category: "+ category);
+ Fact pseudo = new Fact();
+ try {
+ pseudo.add(attributeDomain, category);
+ if (Util.DEBUG) {
+ System.out.println("FactProcessor.splitFacts_cont() new category: "+ category );
+ System.out.println(" ("+start_point+","+integer_index+")");
+ }
+ ArrayList<Fact> temp = new ArrayList<Fact>(integer_index+1-start_point+1);
+ temp.addAll(facts.subList(start_point, integer_index+1));
+ factLists.put(category, temp);
+ start_point = integer_index+1;
+
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ index++;
+
+ }
+
+
+ return factLists;
+ }
+ public static Hashtable<Object, List<Fact>> splitFacts(List<Fact> facts, Domain<?> choosenDomain) {
+ if (choosenDomain.isDiscrete()) {
+ return FactProcessor.splitFacts_disc(facts, choosenDomain);
+ } else {
+ Collections.sort(facts, choosenDomain.factComparator()); /* hack*/
+ return FactProcessor.splitFacts_cont_opt(facts, choosenDomain);
+ }
+ }
+
+
public static Hashtable<Object, List<Fact>> splitFacts_disc(List<Fact> facts, Domain<?> choosenDomain) {
String attributeName = choosenDomain.getName();
List<?> attributeValues = choosenDomain.getValues();
@@ -141,8 +236,7 @@
return factLists;
}
- public static void splitUnclassifiedFacts(
- List<Fact> unclassified_facts, FactDistribution stats) {
+ public static void splitUnclassifiedFacts(List<Fact> unclassified_facts, FactDistribution stats) {
Object winner = stats.getThe_winner_target_class();
//System.out.println(Util.ntimes("DANIEL", 2)+ " lets get unclassified daniel winner "+winner +" num of sup " +stats.getVoteFor(winner));
More information about the jboss-svn-commits
mailing list