[jboss-svn-commits] JBL Code SVN: r21640 - in labs/jbossrules/contrib/machinelearning/5.0: drools-core/src/main/java/org/drools/learner/builder and 9 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed Aug 20 07:26:07 EDT 2008
Author: gizil
Date: 2008-08-20 07:26:07 -0400 (Wed, 20 Aug 2008)
New Revision: 21640
Added:
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/StatsPrinter.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ReteStatistics.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredCarExample.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredNurseryExample.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Car.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Comfort.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Price.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Tech.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Employ.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Nursery.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/SocHealth.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/StructFinan.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Structure.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/log/
Modified:
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTree.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreePruner.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Domain.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceList.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Memory.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Stats.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostBuilder.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostKBuilder.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/BoostedTester.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeFactory.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestTester.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Learner.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeTester.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Tester.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CrossValidation.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Entropy.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/ErrorEstimate.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/TestSample.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/EstimatedNodeSize.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/ImpurityDecrease.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/MaximumDepth.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/StoppingCriterion.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassVisitor.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FieldAnnotation.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ObjectFactory.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Util.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/Rete.java
labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/StructuredTestFactory.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExample.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfC45ExampleFromDrl.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfExample.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/NurseryExample.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/Poker.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExample.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExampleFromDrl.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/RestaurantExample.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingClasses.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingExm.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/TriangleExample.java
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.drl
labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.stats
Log:
to get statistics on rete, structured java classes
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTree.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTree.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTree.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -33,6 +33,8 @@
private double validation_error, training_error;
private int num_nonterminal_nodes;
+ private int trainingDataSize, testDataSize;
+ private InstanceList train, test;
public DecisionTree(Schema inst_schema, String _target) {
this.obj_schema = inst_schema; //inst_schema.getObjectClass();
@@ -229,5 +231,37 @@
String out = "Facts scanned " + FACTS_READ + "\n";
return out + root.toString();
}
+
+ public void setTrainingDataSize(int size) {
+ trainingDataSize = size;
+ }
+ public void setTestingDataSize(int size) {
+ testDataSize = size;
+ }
+
+ public int getTrainingDataSize() {
+ return trainingDataSize;
+ }
+
+ public int getTestingDataSize() {
+ return testDataSize;
+ }
+
+ public void setTrain(InstanceList x) {
+ train = x;
+ }
+
+ public void setTest(InstanceList x) {
+ test = x;
+ }
+
+ public InstanceList getTrain() {
+ return train;
+ }
+
+ public InstanceList getTest() {
+ return test;
+ }
+
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreePruner.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreePruner.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/DecisionTreePruner.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -4,6 +4,7 @@
import org.drools.learner.builder.SingleTreeTester;
import org.drools.learner.eval.ErrorEstimate;
+import org.drools.learner.eval.TestSample;
import org.drools.learner.tools.LoggerFactory;
import org.drools.learner.tools.SimpleLogger;
import org.drools.learner.tools.Util;
@@ -24,15 +25,26 @@
private double INIT_ALPHA = 0.5d;
private static final double EPSILON = 0.0d;//0.0000000001;
+ private int best_id = 0;;
+
public DecisionTreePruner(ErrorEstimate proc) {
procedure = proc;
num_trees_to_grow = procedure.getEstimatorSize();
//updates = new ArrayList<ArrayList<NodeUpdate>>(num_trees_to_grow);
best_stats = new TreeStats(0.0);//proc.getAlphaEstimate());
- }
+ }
- public void prun_to_estimate() {
+ public DecisionTreePruner() {
+ procedure = null;
+ num_trees_to_grow = 1;
+ //num_trees_to_grow = procedure.getEstimatorSize();
+ //updates = new ArrayList<ArrayList<NodeUpdate>>(num_trees_to_grow);
+ procedure = new TestSample(0.2d);
+ best_stats = new TreeStats(0.0);//proc.getAlphaEstimate());
+ }
+
+ public void prun_to_estimate(ArrayList<DecisionTree> dts) {
ArrayList<ArrayList<NodeUpdate>> updates = new ArrayList<ArrayList<NodeUpdate>>(num_trees_to_grow);
ArrayList<ArrayList<TreeStats>> sequence_stats = new ArrayList<ArrayList<TreeStats>>(num_trees_to_grow);
ArrayList<MinAlphaProc> alpha_procs = new ArrayList<MinAlphaProc>(num_trees_to_grow);
@@ -42,6 +54,87 @@
* an expected error rate on some test set (cross-validation error),
* which is done at the second stage.
*/
+// double value_to_select = procedure.getErrorEstimate();
+
+ for (int dt_i = 0; dt_i<dts.size(); dt_i++) {
+
+ DecisionTree dt= dts.get(dt_i);
+ procedure.setTrainingDataSize(dt.getTrainingDataSize());
+ dt.setID(dt_i);
+ dt.calc_num_node_leaves(dt.getRoot());
+
+
+
+ // dt.getId()
+ // dt.calc_num_node_leaves(dt.getRoot()); // this is done in the estimator
+
+ double epsilon = EPSILON * numExtraMisClassIfPrun(dt.getRoot());
+ MinAlphaProc alpha_proc = new MinAlphaProc(INIT_ALPHA, epsilon);
+ TreeSequenceProc search = new TreeSequenceProc(dt, alpha_proc);//INIT_ALPHA
+
+ search.init_tree(); // alpha_1 = 0.0
+ search.iterate_trees(1);
+
+ //updates.add(tree_sequence);
+ updates.add(search.getTreeSequence());
+ sequence_stats.add(search.getTreeSequenceStats());
+ alpha_procs.add(alpha_proc);
+
+ // sort the found candidates
+ //Collections.sort(updates.get(dt.getId()), arg1)
+ int sid = 0, best_st=0;
+ best_id = 0;
+ double best_error = 1.0;
+ System.out.println("Tree id\t Num_leaves\t Cross-validated\t Resubstitution\t Alpha\t");
+ ArrayList<TreeStats> trees = sequence_stats.get(dt.getId());
+ for (TreeStats st: trees ){
+ if (st.getCostEstimation() <= best_error) {
+ best_error = st.getCostEstimation();
+ best_id = sid;
+ best_st = st.iteration_id;
+ }
+ System.out.println(sid+ "\t " +st.getNum_terminal_nodes()+ "\t "+ st.getCostEstimation() + "\t "+ st.getResubstitution_cost() + "\t "+ st.getAlpha() );
+ sid++;
+ }
+ System.out.println("BEST "+best_id+ "\t " +trees.get(best_id).getNum_terminal_nodes()+ "\t "+ trees.get(best_id).getCostEstimation() + "\t "+ trees.get(best_id).getResubstitution_cost() + "\t "+ trees.get(best_id).getAlpha() );
+
+ // System.exit(0);
+ //int N = procedure.getTestDataSize(dt_i);
+ int N = dt.getTestingDataSize();// procedure.getTestDataSize(dt_i);
+ double standart_error_estimate = Math.sqrt((trees.get(best_id).getCostEstimation() * (1- trees.get(best_id).getCostEstimation())/ (double)N));
+
+ int update_id = search.tree_sequence.size()-1;
+ int i = trees.get(trees.size()-1).iteration_id;
+ int _sid = trees.size()-1;
+ while(i > best_st-1) {
+ NodeUpdate nu =search.tree_sequence.get(update_id);
+ while (i == nu.iteration_id) {
+ search.add_back(nu.node_update, nu.old_node);
+ update_id --;
+ nu = search.tree_sequence.get(update_id);
+ }
+ _sid--;
+ TreeStats st = trees.get(_sid);
+ i = st.iteration_id;
+ System.out.println(_sid+ "\t " +st.getNum_terminal_nodes()+ "\t "+ st.getCostEstimation() + "\t "+ st.getResubstitution_cost() + "\t "+ st.getAlpha() );
+
+ }
+// System.exit(0);
+ }
+
+
+ }
+
+ public DecisionTree prun_to_estimate() {
+ ArrayList<ArrayList<NodeUpdate>> updates = new ArrayList<ArrayList<NodeUpdate>>(num_trees_to_grow);
+ ArrayList<ArrayList<TreeStats>> sequence_stats = new ArrayList<ArrayList<TreeStats>>(num_trees_to_grow);
+ ArrayList<MinAlphaProc> alpha_procs = new ArrayList<MinAlphaProc>(num_trees_to_grow);
+
+ /*
+ * The best tree is selected from this series of trees with the classification error not exceeding
+ * an expected error rate on some test set (cross-validation error),
+ * which is done at the second stage.
+ */
double value_to_select = procedure.getErrorEstimate();
for (int dt_i = 0; dt_i<procedure.getEstimatorSize(); dt_i++) {
@@ -65,7 +158,8 @@
// sort the found candidates
//Collections.sort(updates.get(dt.getId()), arg1)
- int sid = 0, best_id = 0;
+ int sid = 0, best_st = 0;
+ best_id = 0;
double best_error = 1.0;
System.out.println("Tree id\t Num_leaves\t Cross-validated\t Resubstitution\t Alpha\t");
ArrayList<TreeStats> trees = sequence_stats.get(dt.getId());
@@ -73,21 +167,116 @@
if (st.getCostEstimation() <= best_error) {
best_error = st.getCostEstimation();
best_id = sid;
+ best_st = st.iteration_id;
}
System.out.println(sid+ "\t " +st.getNum_terminal_nodes()+ "\t "+ st.getCostEstimation() + "\t "+ st.getResubstitution_cost() + "\t "+ st.getAlpha() );
sid++;
}
System.out.println("BEST "+best_id+ "\t " +trees.get(best_id).getNum_terminal_nodes()+ "\t "+ trees.get(best_id).getCostEstimation() + "\t "+ trees.get(best_id).getResubstitution_cost() + "\t "+ trees.get(best_id).getAlpha() );
-
+
+ // System.exit(0);
int N = procedure.getTestDataSize(dt_i);
double standart_error_estimate = Math.sqrt((trees.get(best_id).getCostEstimation() * (1- trees.get(best_id).getCostEstimation())/ (double)N));
+
+ int update_id = search.tree_sequence.size()-1;
+ int i = trees.get(trees.size()-1).iteration_id;
+ int _sid = trees.size()-1;
+ while(i > best_st) {
+ NodeUpdate nu =search.tree_sequence.get(update_id);
+ while (i == nu.iteration_id) {
+ search.add_back(nu.node_update, nu.old_node);
+ update_id --;
+ nu = search.tree_sequence.get(update_id);
+ }
+ _sid--;
+ TreeStats st = trees.get(_sid);
+ i = st.iteration_id;
+ System.out.println(_sid+ "\t " +st.getNum_terminal_nodes()+ "\t "+ st.getCostEstimation() + "\t "+ st.getResubstitution_cost() + "\t "+ st.getAlpha() );
+
+ }
+// System.exit(0);
+
+ return dt;
}
+ return null;
-
}
+
+// public DecisionTree prun_to_estimate(DecisionTree dt) {
+// ArrayList<ArrayList<NodeUpdate>> updates = new ArrayList<ArrayList<NodeUpdate>>(num_trees_to_grow);
+// ArrayList<ArrayList<TreeStats>> sequence_stats = new ArrayList<ArrayList<TreeStats>>(num_trees_to_grow);
+// ArrayList<MinAlphaProc> alpha_procs = new ArrayList<MinAlphaProc>(num_trees_to_grow);
+//
+// /*
+// * The best tree is selected from this series of trees with the classification error not exceeding
+// * an expected error rate on some test set (cross-validation error),
+// * which is done at the second stage.
+// */
+// double value_to_select = procedure.getErrorEstimate();
+//
+// for (int dt_i = 0; dt_i<procedure.getEstimatorSize(); dt_i++) {
+// DecisionTree dt= procedure.getEstimator(dt_i);
+//
+//
+// // dt.getId()
+// // dt.calc_num_node_leaves(dt.getRoot()); // this is done in the estimator
+//
+// double epsilon = EPSILON * numExtraMisClassIfPrun(dt.getRoot());
+// MinAlphaProc alpha_proc = new MinAlphaProc(INIT_ALPHA, epsilon);
+// TreeSequenceProc search = new TreeSequenceProc(dt, alpha_proc);//INIT_ALPHA
+//
+// search.init_tree(); // alpha_1 = 0.0
+// search.iterate_trees(1);
+//
+// //updates.add(tree_sequence);
+// updates.add(search.getTreeSequence());
+// sequence_stats.add(search.getTreeSequenceStats());
+// alpha_procs.add(alpha_proc);
+//
+// // sort the found candidates
+// //Collections.sort(updates.get(dt.getId()), arg1)
+// int sid = 0;
+// best_id = 0;
+// double best_error = 1.0;
+// System.out.println("Tree id\t Num_leaves\t Cross-validated\t Resubstitution\t Alpha\t");
+// ArrayList<TreeStats> trees = sequence_stats.get(dt.getId());
+// for (TreeStats st: trees ){
+// if (st.getCostEstimation() <= best_error) {
+// best_error = st.getCostEstimation();
+// best_id = sid;
+// }
+// System.out.println(sid+ "\t " +st.getNum_terminal_nodes()+ "\t "+ st.getCostEstimation() + "\t "+ st.getResubstitution_cost() + "\t "+ st.getAlpha() );
+// sid++;
+// }
+// System.out.println("BEST "+best_id+ "\t " +trees.get(best_id).getNum_terminal_nodes()+ "\t "+ trees.get(best_id).getCostEstimation() + "\t "+ trees.get(best_id).getResubstitution_cost() + "\t "+ trees.get(best_id).getAlpha() );
+//
+// // System.exit(0);
+// int N = procedure.getTestDataSize(dt_i);
+// double standart_error_estimate = Math.sqrt((trees.get(best_id).getCostEstimation() * (1- trees.get(best_id).getCostEstimation())/ (double)N));
+//
+// int update_id = search.tree_sequence.size()-1;
+// for (int i = trees.size()-1; i>=best_id; i--){
+// NodeUpdate nu =search.tree_sequence.get(update_id);
+// while (i == nu.iteration_id) {
+// search.add_back(nu.node_update, nu.old_node);
+// update_id ++;
+// nu = search.tree_sequence.get(update_id);
+// }
+// TreeStats st = trees.get(i);
+// System.out.println(sid+ "\t " +st.getNum_terminal_nodes()+ "\t "+ st.getCostEstimation() + "\t "+ st.getResubstitution_cost() + "\t "+ st.getAlpha() );
+// sid++;
+// }
+//
+// return dt;
+// }
+// return null;
+//
+//
+//
+// }
public void select_tree () {
/*
* The best tree is selected from this series of trees with the classification error not exceeding
@@ -95,6 +284,8 @@
* which is done at the second stage.
*/
double value_to_select = procedure.getErrorEstimate();
+
+
}
@@ -175,6 +366,9 @@
tree_sequence_stats.add(init_tree_stats);
}
+ public DecisionTree getFocusTree() {
+ return focus_tree;
+ }
public ArrayList<TreeStats> getTreeSequenceStats() {
return tree_sequence_stats;
@@ -286,6 +480,7 @@
}
+
private void prune_off(TreeNode candidate_node, int i) {
LeafNode best_clone = new LeafNode(focus_tree.getTargetDomain(), candidate_node.getLabel());
@@ -319,16 +514,34 @@
tree_sequence.add(update);
}
+ public void add_back(TreeNode leaf_node, TreeNode original_node) {
+ TreeNode father = leaf_node.getFather();
+ if (father == null) {
+ focus_tree.setRoot(original_node);
+ return;
+ }
+ else
+ for(Object key: father.getChildrenKeys()) {
+ if (father.getChild(key).equals(leaf_node)) {
+ father.putNode(key, original_node);
+ break;
+ }
+ }
+ }
+
private void update_tree_stats(TreeStats stats, double computed_alpha, int change_in_training_error) {
- ArrayList<InstanceList> sets = procedure.getSets(focus_tree.getId());
- InstanceList learning_set = sets.get(0);
- InstanceList validation_set = sets.get(1);
-
+ //TODO put back
+ // ArrayList<InstanceList> sets = procedure.getSets(focus_tree.getId());
+// InstanceList learning_set = sets.get(0);
+// InstanceList validation_set = sets.get(1);
+
+ InstanceList learning_set = focus_tree.getTrain();
+ InstanceList validation_set = focus_tree.getTest();
int num_error = 0;
SingleTreeTester t= new SingleTreeTester(focus_tree);
- System.out.println(validation_set.getSize());
+ //System.out.println(validation_set.getSize());
for (int index_i = 0; index_i < validation_set.getSize(); index_i++) {
Integer result = t.test(validation_set.getInstance(index_i));
if (result == Stats.INCORRECT) {
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Domain.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Domain.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Domain.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -6,7 +6,7 @@
import org.drools.learner.tools.Util;
public class Domain {
- private boolean categorical, fixed, artificial;
+ private boolean categorical, fixed, artificial, ignore;
//private DataType dataType;
private String fName;
private Class<?> fType, objKlass /*the class that attribute belongs to*/; // , ownerKlass; // not sure if necessary
@@ -19,6 +19,7 @@
this.categorical = true; // BY DEFAULT, it is categorical
this.artificial = false; // BY DEFAULT, it is a real field, if it is artificial it means there is no field exist but there is method which computes the value
+ this.ignore = false;
//this.dataType = DataType.PRIMITIVE; // BY DEFAULT it is primitive
this.fCategories = new ArrayList<Object>(2);
@@ -29,6 +30,7 @@
dom.categorical = this.categorical;
//dom.readingSeq = readingSeq;
dom.fCategories = this.fCategories;
+ dom.ignore = this.ignore;
return dom;
}
@@ -154,7 +156,14 @@
}
}
+ public boolean ignore() {
+ return ignore;
+ }
+ public void ignore(boolean ignore_field) {
+ ignore = ignore_field;
+ }
+
public boolean isNotJustSelected(Domain exceptDomain) {
if (this.objKlass.equals(exceptDomain.getObjKlass()))
return !this.getFName().equals(exceptDomain.getFName());
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceList.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceList.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/InstanceList.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -2,7 +2,9 @@
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
+import java.util.Random;
import org.drools.WorkingMemory;
import org.drools.learner.tools.LoggerFactory;
@@ -10,22 +12,30 @@
public class InstanceList {
private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(InstanceList.class, SimpleLogger.WARN);
- private static SimpleLogger slog = LoggerFactory.getSysOutLogger(InstanceList.class, SimpleLogger.DEBUG);
+ private static SimpleLogger slog = LoggerFactory.getSysOutLogger(InstanceList.class, SimpleLogger.DEFAULT_LEVEL);
private Schema schema;
private ArrayList<Instance> instances;
- private InstanceFactory factory;
+ private InstanceFactory factory = null;
public InstanceList(Schema _schema, WorkingMemory _session) {
this.schema = _schema;
- this.instances = new ArrayList<Instance>();
+ this.instances = new ArrayList<Instance>();
this.factory = new InstanceFactory(_session, _schema);
}
- // will be used as copy constructer
- public InstanceList(Schema _schema, int size) {
- this.schema = _schema;
+ // copy ctor
+ public InstanceList(InstanceList _il) {
+ this.schema = _il.schema;
+ this.instances = _il.instances;
+ this.factory = _il.factory;
+ }
+
+ // another copy constructor
+ public InstanceList(InstanceList _il, int size) {
+ this.schema = _il.schema;
this.instances = new ArrayList<Instance>(size);
+ this.factory = _il.factory;
}
public void addStructuredInstance(Object _obj) {
@@ -43,7 +53,19 @@
//System.exit(0);
}
}
+
+ public void shuffle() {
+ long seed = 10101001;
+ Random rnd = new Random(seed);
+ Collections.shuffle(this.instances, rnd);
+ }
+ public InstanceList subList(int from, int until) {
+ InstanceList il = new InstanceList(this);
+ il.instances = new ArrayList<Instance>(instances.subList(from, until));
+ return il;
+ }
+
public void addAsInstance(Instance inst) {
instances.add(inst);
}
@@ -65,7 +87,7 @@
System.out.println("Exception: TOO BIG to get Memory.getClassInstancesOf");
return null;
}
- InstanceList toReturn = new InstanceList(this.getSchema(), bag.length);
+ InstanceList toReturn = new InstanceList(this, bag.length);
for (int j = 0; j< bag.length ; j ++) {
toReturn.addAsInstance(this.getInstance(bag[j]));
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Memory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Memory.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Memory.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -31,6 +31,8 @@
// create a instance list that can hold objects from our schema
mem.instances.put(clazz, new InstanceList(inst_schema, _session));
+
+// mem.test_instances.put(clazz, new InstanceList(inst_schema, _session));
/*
* do they create an ObjectTypeNode for each new inserted object type?
@@ -48,18 +50,59 @@
return mem;
}
+
+ public static Memory createTestFromWorkingMemory(Memory old_memory, WorkingMemory _session, Class<?> clazz, DomainAlgo domain, DataType data) throws FeatureNotSupported {
+ // if mem == null
+ Memory mem = new Memory();
+ mem.session = _session;
+ mem.setClassToClassify(clazz);
+
+ // create schema from clazz
+ Schema inst_schema = old_memory.getClassInstances().getSchema();
+// try {
+// inst_schema = Schema.createSchemaStructure(clazz, domain, data);
+// } catch (Exception e) {
+// // TODO Auto-generated catch block
+// e.printStackTrace();
+// System.exit(0);
+// }
+
+ // create a instance list that can hold objects from our schema
+ mem.instances.put(clazz, new InstanceList(inst_schema, _session));
+
+ /*
+ * do they create an ObjectTypeNode for each new inserted object type?
+ * even if there is no rule exists.
+ * No probably they do not
+ */
+ Iterator<Object> it_object = _session.iterateObjects(); // how can i get the object type nodes
+ while (it_object.hasNext()) {
+ Object obj = it_object.next();
+ // validating in the the factory during instantiation
+ //if (clazz.isAssignableFrom(obj.getClass()))
+ mem.instances.get(clazz).addStructuredInstance(obj);
+ }
+ //dt.FACTS_READ += facts.size();
+
+ return mem;
+ }
+
+
// Drools memory
private WorkingMemory session;
//// class specification
//private Schema schema;
Class<?> clazzToClassify;
- // instance list
+ // instance list used to train
private HashMap<Class<?>,InstanceList> instances;
+// // instance list used to test
+// private HashMap<Class<?>,InstanceList> test_instances;
+
private Memory() {
this.instances = new HashMap<Class<?>, InstanceList>();
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Stats.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Stats.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/Stats.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -6,12 +6,15 @@
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;
+import java.text.DecimalFormat;
import java.util.ArrayList;
public class Stats {
public static final int INCORRECT = 0, CORRECT = 1, UNKNOWN = 2;
+ DecimalFormat precision = new DecimalFormat("#.###");
+
private Class<?> stat_class;
private ArrayList<Integer> histogram;
@@ -47,7 +50,7 @@
* fileSignature must contain the folder location
* by default the folder = "src/main/rules/"
*/
- public void print2file(String fileSignature) {
+ public void print2file(String fileSignature, boolean append) {
//String dataFileName = "src/main/rules/"+_packageNames+"/"+ fileName;
@@ -56,7 +59,7 @@
System.out.println("printing stats:"+ fileSignature);
try {
- StatsPrinter.print(this, new FileWriter(fileSignature));
+ StatsPrinter.print(this, new FileWriter(fileSignature, append));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
@@ -74,30 +77,30 @@
}
}
+// public String print4Latex() {
+//
+// double in = 100.0d *(double)getResult(Stats.INCORRECT)/(double) getTotal();
+// double co = 100.0d *(double)getResult(Stats.CORRECT)/(double) getTotal();
+// double un = 100.0d *(double)getResult(Stats.UNKNOWN)/(double) getTotal();
+// return "Builder" +"\t&\t"+ getResult(Stats.INCORRECT)+ "\t&\t"+ precision.format(in) + "\t&\t"+
+// getResult(Stats.CORRECT)+"\t&\t"+ precision.format(co)+ "\t&\t"+ getResult(Stats.UNKNOWN)+"\t&\t"+ precision.format(un)+ "\\\\";
+// }
+ public String print4Latex() {
+
+ double in = 100.0d *(double)getResult(Stats.INCORRECT)/(double) getTotal();
+ double co = 100.0d *(double)getResult(Stats.CORRECT)/(double) getTotal();
+ double un = 100.0d *(double)getResult(Stats.UNKNOWN)/(double) getTotal();
+ double to = 100.0d;
+ return "\t&\t"+ getResult(Stats.INCORRECT)+ "\t&\t"+ precision.format(in) + "\t&\t"+
+ getResult(Stats.CORRECT)+"\t&\t"+ precision.format(co)+ "\t&\t"+ getTotal()+"\t&\t"+ precision.format(to);
+ }
+
public String print2string() {
- StringWriter swr = new StringWriter();
- try {
- StatsPrinter.print(this, swr);
- return swr.toString();
- } catch (IOException e) {
- e.printStackTrace();
- return "";
- }
+ return getResult(Stats.INCORRECT)+ " "+getResult(Stats.CORRECT)+" "+getTotal();// getResult(Stats.UNKNOWN)+
}
+ public static String getErrors() {
+ return "INCORRECT CORRECT TOTAL\n";//UNKNOWN
+ }
}
-class StatsPrinter {
- //public static void print(Stats mystats, OutputStream os) {
- public static void print(Stats mystats, Writer wr) throws IOException {
- //PrintWriter pwr = new PrintWriter(os);
-
- // print the statistics of the results to a file
- wr.write("TESTING results: incorrect "+ mystats.getResult(Stats.INCORRECT)+"\n");
- wr.write("TESTING results: correct "+ mystats.getResult(Stats.CORRECT)+"\n");
- wr.write("TESTING results: unknown "+ mystats.getResult(Stats.UNKNOWN)+"\n");
- wr.write("TESTING results: Total Number "+ mystats.getTotal());
-
- wr.flush();
- }
-}
Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/StatsPrinter.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/StatsPrinter.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/StatsPrinter.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,53 @@
+package org.drools.learner;
+
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+
+public class StatsPrinter {
+
+
+ //public static void print(Stats mystats, OutputStream os) {
+ public static void print(Stats mystats, Writer wr) throws IOException {
+ //PrintWriter pwr = new PrintWriter(os);
+
+ // print the statistics of the results to a file
+ wr.write("TESTING results: incorrect "+ mystats.getResult(Stats.INCORRECT)+"\n");
+ wr.write("TESTING results: correct "+ mystats.getResult(Stats.CORRECT)+"\n");
+ wr.write("TESTING results: unknown "+ mystats.getResult(Stats.UNKNOWN)+"\n");
+ wr.write("TESTING results: Total Number "+ mystats.getTotal());
+
+ //wr.flush();
+ wr.close();
+ }
+
+ public static void print(StringBuffer sb, Writer wr) throws IOException {
+ //PrintWriter pwr = new PrintWriter(os);
+
+ // print the statistics of the results to a file
+ wr.write(sb.toString()+ "\n");
+
+ wr.close();
+ }
+
+ public static void print2file(StringBuffer sb, String fileSignature, boolean append) {
+
+ //String dataFileName = "src/main/rules/"+_packageNames+"/"+ fileName;
+
+ if (!fileSignature.endsWith(".stats"))
+ fileSignature += ".stats";
+ System.out.println("printing stats:"+ fileSignature);
+
+ try {
+ StatsPrinter.print(sb, new FileWriter(fileSignature, append));
+ } catch (FileNotFoundException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+}
\ No newline at end of file
Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/StatsPrinter.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostBuilder.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostBuilder.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -6,6 +6,7 @@
import org.drools.learner.InstanceList;
import org.drools.learner.Memory;
import org.drools.learner.Stats;
+import org.drools.learner.StatsPrinter;
import org.drools.learner.tools.LoggerFactory;
import org.drools.learner.tools.SimpleLogger;
import org.drools.learner.tools.Util;
@@ -20,7 +21,9 @@
private TreeAlgo algorithm = TreeAlgo.BOOST; // default bagging, TODO boosting
- private static int FOREST_SIZE = 50;
+ private double trainRatio = Util.TRAINING_RATIO, testRatio = Util.TESTING_RATIO;
+
+ private static int FOREST_SIZE = Util.NUM_TREES;
private static final double TREE_SIZE_RATIO = 1.0d;
private static final boolean WITH_REP = false;
@@ -29,10 +32,26 @@
private DecisionTreeMerger merger;
+ private DecisionTree best;
+
+ private BoostedTester tester;
+
+ private ArrayList<Stats> train_evaluation, test_evaluation;
+
public AdaBoostBuilder() {
//this.trainer = _trainer;
merger = new DecisionTreeMerger();
+ train_evaluation = new ArrayList<Stats>(FOREST_SIZE);
+ test_evaluation = new ArrayList<Stats>(FOREST_SIZE);
}
+
+ public void setTrainRatio(double ratio) {
+ trainRatio = ratio;
+ }
+
+ public void setTestRatio(double ratio) {
+ testRatio = ratio;
+ }
public void build(Memory mem, Learner _trainer) {
final InstanceList class_instances = mem.getClassInstances();
@@ -41,22 +60,35 @@
if (class_instances.getTargets().size()>1 ) {
//throw new FeatureNotSupported("There is more than 1 target candidates");
- if (flog.error() !=null)
- flog.error().log("There is more than 1 target candidates\n");
+ if (slog.error() !=null)
+ slog.error().log("There is more than 1 target candidates\n");
System.exit(0);
// TODO put the feature not supported exception || implement it
} else if (_trainer.getTargetDomain().getCategoryCount() >2) {
- if (flog.error() !=null)
- flog.error().log("The target domain is not binary!!!\n");
+ if (slog.error() !=null)
+ slog.error().log("The target domain is not binary!!!\n");
System.exit(0);
}
+
+ int split_idx = (int)(trainRatio * class_instances.getSize());
+ int split_idx2 = split_idx + (int)(testRatio * class_instances.getSize());
+
+ InstanceList train_instances = class_instances.subList(0, split_idx);
+ InstanceList test_instances = class_instances.subList(split_idx, split_idx2);//class_instances.getSize());
+
- int N = class_instances.getSize();
- int NUM_DATA = (int)(TREE_SIZE_RATIO * N); // TREE_SIZE_RATIO = 1.0, all data is used to train the trees again again
+ int N = train_instances.getSize();
+ int NUM_DATA = (int)(TREE_SIZE_RATIO * N); // TREE_SIZE_RATIO = 1.0, all training data is used to train the trees again again
_trainer.setTrainingDataSizePerTree(NUM_DATA);
+ /* tree_capacity number of data fed to each tree, there are FOREST_SIZE trees*/
+ _trainer.setTrainingDataSize(NUM_DATA);
- /* all data fed to each tree, the same data?? */
- _trainer.setTrainingDataSize(NUM_DATA); // TODO????
+// int N = class_instances.getSize();
+// int NUM_DATA = (int)(TREE_SIZE_RATIO * N); // TREE_SIZE_RATIO = 1.0, all data is used to train the trees again again
+// _trainer.setTrainingDataSizePerTree(NUM_DATA);
+//
+// /* all data fed to each tree, the same data?? */
+// _trainer.setTrainingDataSize(NUM_DATA); // TODO????
forest = new ArrayList<DecisionTree> (FOREST_SIZE);
@@ -65,9 +97,10 @@
double [] weights = new double [NUM_DATA];
for (int index_i=0; index_i<NUM_DATA; index_i++) {
weights[index_i] = 1.0d/(double)NUM_DATA;
- class_instances.getInstance(index_i).setWeight(weights[index_i] * (double)NUM_DATA);
+// class_instances.getInstance(index_i).setWeight(weights[index_i] * (double)NUM_DATA);
+ train_instances.getInstance(index_i).setWeight(weights[index_i] * (double)NUM_DATA);
if (slog.debug() != null)
- slog.debug().log(index_i+" new weight:"+class_instances.getInstance(index_i).getWeight()+ "\n");
+ slog.debug().log(index_i+" new weight:"+train_instances.getInstance(index_i).getWeight()+ "\n");
}
int i = 0;
@@ -78,14 +111,15 @@
// else
// bag = Util.bag_wo_rep(NUM_DATA, N);
- InstanceList working_instances = class_instances; //.getInstances(bag);
+ InstanceList working_instances = train_instances;//class_instances; //.getInstances(bag);
DecisionTree dt = _trainer.train_tree(working_instances);
dt.setID(i);
double error = 0.0, sum_weight = 0.0;
- SingleTreeTester t= new SingleTreeTester(dt);
+ SingleTreeTester single_tester= new SingleTreeTester(dt);
for (int index_i = 0; index_i < NUM_DATA; index_i++) {
- Integer result = t.test(class_instances.getInstance(index_i));
+// Integer result = t.test(class_instances.getInstance(index_i));
+ Integer result = single_tester.test(working_instances.getInstance(index_i));
sum_weight += weights[index_i];
if (result == Stats.INCORRECT) {
error += weights[index_i];
@@ -105,7 +139,9 @@
double norm_fact= 0.0d;
// Boosting the missclassified instances
for (int index_i = 0; index_i < NUM_DATA; index_i++) {
- Integer result = t.test(class_instances.getInstance(index_i));//TODO dont need to test two times
+// Integer result = t.test(class_instances.getInstance(index_i));//TODO dont need to test two times
+// Integer result = t.test(class_instances.getInstance(index_i));
+ Integer result = single_tester.test(working_instances.getInstance(index_i));
switch (result) {
case Stats.INCORRECT:
weights[index_i] = weights[index_i] * Util.exp(alpha);
@@ -124,7 +160,8 @@
// Normalization of the weights
for (int index_i = 0; index_i < NUM_DATA; index_i++) {
weights[index_i] = weights[index_i] / norm_fact;
- class_instances.getInstance(index_i).setWeight(weights[index_i] * (double)NUM_DATA);
+ //class_instances.getInstance(index_i).setWeight(weights[index_i] * (double)NUM_DATA);
+ working_instances.getInstance(index_i).setWeight(weights[index_i] * (double)NUM_DATA);
}
} else {
if (slog.debug() != null)
@@ -134,10 +171,8 @@
FOREST_SIZE = i-1;//ignore the current tree
break;
}
- }
-
-
- else {
+
+ } else {
if (slog.stat() != null) {
slog.stat().log("\n Boosting ends: ");
slog.stat().log("All instances classified correctly TERMINATE, forest size:"+i+ "\n");
@@ -148,8 +183,9 @@
}
+ train_evaluation.add(single_tester.test(train_instances));
+ test_evaluation.add(single_tester.test(test_instances));
-
forest.add(dt);
// the DecisionTreeMerger will visit the decision tree and add the paths that have not been seen yet to the list
merger.add(dt);
@@ -158,12 +194,20 @@
slog.stat().stat(".");
}
+
+ tester = new BoostedTester(forest, getAccuracies());
+ train_evaluation.add(tester.test(train_instances));
+ test_evaluation.add(tester.test(test_instances));
// TODO how to compute a best tree from the forest
- DecisionTree best = merger.getBest();
+ int best_id = getMinTestId();
+ best = merger.getBest();
if (best == null)
- best = forest.get(0);
+ best = forest.get(best_id);
- _trainer.setBestTree(forest.get(0));
+ train_evaluation.add(train_evaluation.get(best_id));
+ test_evaluation.add(test_evaluation.get(best_id));
+
+ //_trainer.setBestTree(forest.get(0));
//this.c45 = dt;
}
@@ -182,4 +226,72 @@
forest.remove(i);
}
+
+ public int getMinTestId() {
+ double min = 1.0;
+ int id = -1;
+ for (int i=0; i< FOREST_SIZE; i++ ) {
+ Stats test_s=test_evaluation.get(i);
+ Stats train_s=train_evaluation.get(i);
+ double test_error = ((double)test_s.getResult(Stats.INCORRECT)/(double)test_s.getTotal());
+ double train_error = ((double)train_s.getResult(Stats.INCORRECT)/(double)train_s.getTotal());
+ if (test_error < min) {
+ min = test_error;
+ id = i;
+ } else if (test_error == min) {
+ Stats old = train_evaluation.get(id);
+ double train_old = ((double)old.getResult(Stats.INCORRECT)/(double)old.getTotal());
+ if (train_error < train_old) {
+ min = test_error;
+ id = i;
+ }
+ }
+
+ }
+ return id;
+
+ }
+ public DecisionTree getTree() {
+ return best;
+ }
+
+ public void printResults(String executionSignature) {
+ StringBuffer sb = new StringBuffer();
+ sb.append("#"+ Stats.getErrors());
+ for (int i =0 ; i<FOREST_SIZE; i++) {
+ sb.append(train_evaluation.get(i).print2string() + "\n");
+ }
+ sb.append( "\n\n");
+ for (int i =0 ; i<FOREST_SIZE; i++) {
+ sb.append(test_evaluation.get(i).print2string() + "\n");
+ }
+ sb.append( "\n");
+ sb.append(train_evaluation.get(FOREST_SIZE).print2string() + "\n");
+ sb.append( "\n");
+ sb.append(test_evaluation.get(FOREST_SIZE).print2string() + "\n");
+
+ sb.append( "\n");
+ sb.append(train_evaluation.get(FOREST_SIZE+1).print2string() + "\n");
+ sb.append( "\n");
+ sb.append(test_evaluation.get(FOREST_SIZE+1).print2string() + "\n");
+
+ StatsPrinter.print2file(sb, Util.DRL_DIRECTORY +executionSignature, false);
+ }
+
+ public void printLatex(String executionSignature) {
+ StringBuffer sb = new StringBuffer();
+ sb.append("#"+ Stats.getErrors());
+ for (int i =0 ; i<FOREST_SIZE; i++) {
+ sb.append(train_evaluation.get(i).print4Latex() +test_evaluation.get(i).print4Latex() + "\\\\"+"\n");
+ }
+
+ sb.append( "\n");
+ sb.append(train_evaluation.get(FOREST_SIZE).print4Latex() +test_evaluation.get(FOREST_SIZE).print4Latex() +"\\\\"+"\n");
+
+ sb.append( "\n");
+ sb.append(train_evaluation.get(FOREST_SIZE+1).print4Latex() +test_evaluation.get(FOREST_SIZE+1).print4Latex()+"\\\\"+ "\n");
+ sb.append( "\n");
+
+ StatsPrinter.print2file(sb, Util.DRL_DIRECTORY +executionSignature, true);
+ }
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostKBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostKBuilder.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/AdaBoostKBuilder.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -19,17 +19,31 @@
private TreeAlgo algorithm = TreeAlgo.BOOST_K; // default bagging, TODO boosting
+ private double trainRatio = Util.TRAINING_RATIO, testRatio = Util.TESTING_RATIO;
+
private static int FOREST_SIZE = 10;
private static final double TREE_SIZE_RATIO = 0.9;
private static final boolean WITH_REP = false;
private ArrayList<DecisionTree> forest;
private ArrayList<Double> classifier_accuracy;
+
+ private DecisionTree best;
//private Learner trainer;
+ private DecisionTreeMerger merger;
+
public AdaBoostKBuilder() {
//this.trainer = _trainer;
+ merger = new DecisionTreeMerger();
}
+
+ public void setTrainRatio(double ratio) {
+ trainRatio = ratio;
+ }
+ public void setTestRatio(double ratio) {
+ testRatio = ratio;
+ }
public void build(Memory mem, Learner _trainer) {
final InstanceList class_instances = mem.getClassInstances();
@@ -159,14 +173,19 @@
forest.add(dt);
+
+ // the DecisionTreeMerger will visit the decision tree and add the paths that have not been seen yet to the list
+ merger.add(dt);
if (slog.stat() !=null)
slog.stat().stat(".");
}
// TODO how to compute a best tree from the forest
- _trainer.setBestTree(forest.get(0));
-
+ //_trainer.setBestTree(forest.get(0));
+ best = merger.getBest();
+ if (best == null)
+ best = forest.get(0);
//this.c45 = dt;
}
@@ -185,4 +204,8 @@
forest.remove(i);
}
+
+ public DecisionTree getTree() {
+ return best;
+ }
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/BoostedTester.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/BoostedTester.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/BoostedTester.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -85,8 +85,8 @@
}
- public void printStats(final Stats evaluation, String executionSignature) {
- super.printStats(evaluation, executionSignature);
+ public void printStats(final Stats evaluation, String executionSignature, boolean append) {
+ super.printStats(evaluation, executionSignature, append);
}
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/C45Learner.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -19,23 +19,15 @@
public class C45Learner extends Learner{
private AttributeChooser chooser;
- private ArrayList<StoppingCriterion> criteria;
+
public C45Learner(Heuristic hf) {
super();
super.setDomainAlgo(DomainAlgo.QUANTITATIVE);
chooser = new AttributeChooser(hf);
- criteria = null;
}
- public C45Learner(Heuristic hf, ArrayList<StoppingCriterion> _criteria) {
- super();
- super.setDomainAlgo(DomainAlgo.QUANTITATIVE);
- chooser = new AttributeChooser(hf);
- criteria = _criteria;
- }
-
protected TreeNode train(DecisionTree dt, InstDistribution data_stats, int depth) {//List<Instance> data) {
if (data_stats.getSum() == 0) {
@@ -89,7 +81,7 @@
/* choosing the best attribute in order to branch at the current node*/
chooser.chooseAttribute(best_attr_eval, data_stats, attribute_domains);
- if (criteria != null & criteria.size()>0) {
+ if (super.criteria != null && criteria.size()>0) {
for (StoppingCriterion sc: criteria)
if (sc.stop(best_attr_eval)) {
Object winner = data_stats.get_winner_class();
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeBuilder.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -1,6 +1,7 @@
package org.drools.learner.builder;
+import org.drools.learner.DecisionTree;
import org.drools.learner.Memory;
public interface DecisionTreeBuilder {
@@ -14,4 +15,9 @@
public TreeAlgo getTreeAlgo();
+ public DecisionTree getTree();
+
+ public void setTrainRatio(double ratio);
+ public void setTestRatio(double ratio);
+
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeFactory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeFactory.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/DecisionTreeFactory.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -16,6 +16,8 @@
import org.drools.learner.eval.Heuristic;
import org.drools.learner.eval.TestSample;
import org.drools.learner.eval.stopping.EstimatedNodeSize;
+import org.drools.learner.eval.stopping.ImpurityDecrease;
+import org.drools.learner.eval.stopping.MaximumDepth;
import org.drools.learner.eval.stopping.StoppingCriterion;
import org.drools.learner.tools.FeatureNotSupported;
import org.drools.learner.tools.Util;
@@ -52,12 +54,12 @@
Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
single_builder.build(mem, learner);//obj_class, target_attr, working_attr
- SingleTreeTester tester = new SingleTreeTester(learner.getTree());
- tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+ SingleTreeTester tester = new SingleTreeTester(single_builder.getTree());
+ tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature, false);
//Tester.test(c45, mem.getClassInstances());
- learner.getTree().setSignature(executionSignature);
- return learner.getTree();
+ single_builder.getTree().setSignature(executionSignature);
+ return single_builder.getTree();
}
public static DecisionTree createSingleC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
return createSingleC45(wm, obj_class, new Entropy());
@@ -82,12 +84,12 @@
Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
single_builder.build(mem, learner);//obj_class, target_attr, working_attr
- SingleTreeTester tester = new SingleTreeTester(learner.getTree());
- tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+ SingleTreeTester tester = new SingleTreeTester(single_builder.getTree());
+ tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature, false);
//Tester.test(c45, mem.getClassInstances());
- learner.getTree().setSignature(executionSignature);
- return learner.getTree();
+ single_builder.getTree().setSignature(executionSignature);
+ return single_builder.getTree();
}
public static DecisionTree createBagC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
@@ -113,12 +115,12 @@
//forest.clearForest(10);
ForestTester tester = new ForestTester(forest.getTrees());
- tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+ tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature, false);
//forest.test(mem.getClassInstances(), Util.DRL_DIRECTORY+executionSignature);
//Tester bla => test(c45, mem.getClassInstances());
- learner.getTree().setSignature(executionSignature);
- return learner.getTree();
+ forest.getTree().setSignature(executionSignature);
+ return forest.getTree();
}
public static DecisionTree createBoostedC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
@@ -146,88 +148,369 @@
//forest.clearForest(10);
BoostedTester tester = new BoostedTester(forest.getTrees(), forest.getAccuracies());
- tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+ tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature, false);
//forest.test(mem.getClassInstances(), Util.DRL_DIRECTORY+executionSignature);
//Tester bla => test(c45, mem.getClassInstances());
- learner.getTree().setSignature(executionSignature);
- return learner.getTree();
+ forest.getTree().setSignature(executionSignature);
+ return forest.getTree();
}
- public static DecisionTree createSingleC45E_StoppingCriteria(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ public static DecisionTree createSingleC45E_Stopped(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
return createSingleC45_Stop(wm, obj_class, new Entropy());
}
-// public static DecisionTree createSingleC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
-// return createSingleC45(wm, obj_class, new GainRatio());
-// }
+ public static DecisionTree createSingleC45G_Stopped(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ return createSingleC45(wm, obj_class, new GainRatio());
+ }
protected static DecisionTree createSingleC45_Stop(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
DataType data = Learner.DEFAULT_DATA;
- ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
- stopping_criteria.add(new EstimatedNodeSize(0.5));
- C45Learner learner = new C45Learner(h, stopping_criteria);
+
+ C45Learner learner = new C45Learner(h);
+ learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
+
SingleTreeBuilder single_builder = new SingleTreeBuilder();
-// String algo_suffices = org.drools.learner.deprecated.DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
-// String executionSignature = org.drools.learner.deprecated.DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
/* create the memory */
Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+
+ int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.70 );
+ learner.addStoppingCriteria(new MaximumDepth(max_depth));
+
single_builder.build(mem, learner);//obj_class, target_attr, working_attr
- SingleTreeTester tester = new SingleTreeTester(learner.getTree());
- tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+ SingleTreeTester tester = new SingleTreeTester(single_builder.getTree());
+ tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature, false);
+
//Tester.test(c45, mem.getClassInstances());
+ tester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+
- learner.getTree().setSignature(executionSignature);
- return learner.getTree();
+ single_builder.getTree().setSignature(executionSignature);
+ return single_builder.getTree();
}
- public static DecisionTree createSingleCrossPrunnedStopC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+
+ public static DecisionTree createSingleC45E_StoppedTest(WorkingMemory wm, WorkingMemory wm_test, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ return createSingleC45_StopTest(wm, wm_test, obj_class, new Entropy());
+ }
+
+ protected static DecisionTree createSingleC45_StopTest(WorkingMemory wm, WorkingMemory wm_test, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+ DataType data = Learner.DEFAULT_DATA;
+
+ C45Learner learner = new C45Learner(h);
+ learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
- ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
- stopping_criteria.add(new EstimatedNodeSize(0.05));
- return createSinglePrunnedC45(wm, obj_class, new Entropy(), new CrossValidation(10), stopping_criteria);
+ SingleTreeBuilder single_builder = new SingleTreeBuilder();
+
+ String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
+ String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+
+ /* create the memory */
+ Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+
+ int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.70 );
+ learner.addStoppingCriteria(new MaximumDepth(max_depth));
+
+ single_builder.build(mem, learner);//obj_class, target_attr, working_attr
+
+ SingleTreeTester tester = new SingleTreeTester(single_builder.getTree());
+ tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature, false);
+
+ //Tester.test(c45, mem.getClassInstances());
+ tester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+
+ Memory test_mem = Memory.createTestFromWorkingMemory(mem, wm_test, obj_class, learner.getDomainAlgo(), data);
+ tester.printStats(tester.test(test_mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature, true);
+
+ single_builder.getTree().setSignature(executionSignature);
+ return single_builder.getTree();
}
- public static DecisionTree createSingleCrossPrunnedStopC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
- ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
- stopping_criteria.add(new EstimatedNodeSize(0.05));
- return createSinglePrunnedC45(wm, obj_class, new GainRatio(), new CrossValidation(10), stopping_criteria);
+
+ public static DecisionTree createSingleC45E_Test(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ return createSingleC45_Test(wm, obj_class, new Entropy());
}
+ public static DecisionTree createSingleC45G_Test(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ return createSingleC45_Test(wm, obj_class, new GainRatio());
+ }
- public static DecisionTree createSingleTestPrunnedStopC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ protected static DecisionTree createSingleC45_Test(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+ DataType data = Learner.DEFAULT_DATA;
+
+ C45Learner learner = new C45Learner(h);
+ //learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
- ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
- stopping_criteria.add(new EstimatedNodeSize(0.05));
- return createSinglePrunnedC45(wm, obj_class, new Entropy(), new TestSample(0.2d), stopping_criteria);
+ SingleTreeBuilder single_builder = new SingleTreeBuilder();
+ single_builder.setTrainRatio(Util.DEFAULT_TRAINING_RATIO);
+ single_builder.setTestRatio(Util.DEFAULT_TESTING_RATIO);
+
+ String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
+ String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+
+ /* create the memory */
+ Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+
+ int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.70 );
+ //learner.addStoppingCriteria(new MaximumDepth(max_depth));
+
+ single_builder.build(mem, learner);//obj_class, target_attr, working_attr
+ single_builder.printResults(executionSignature);
+ single_builder.printLatex(executionSignature);
+
+ SingleTreeTester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+
+ single_builder.getTree().setSignature(executionSignature);
+ return single_builder.getTree();
}
- public static DecisionTree createSingleTestPrunnedStopC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
- ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
- stopping_criteria.add(new EstimatedNodeSize(0.05));
- return createSinglePrunnedC45(wm, obj_class, new GainRatio(), new TestSample(0.2), stopping_criteria);
+
+
+ public static DecisionTree createSingleC45E_StoppedTest(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ return createSingleC45_StopTest(wm, obj_class, new Entropy());
}
+ public static DecisionTree createSingleC45G_StoppedTest(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ return createSingleC45_StopTest(wm, obj_class, new GainRatio());
+ }
- public static DecisionTree createSingleCVPrunnedC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ protected static DecisionTree createSingleC45_StopTest(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+ DataType data = Learner.DEFAULT_DATA;
+
+ C45Learner learner = new C45Learner(h);
+ learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
+ learner.addStoppingCriteria(new ImpurityDecrease());
- ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
- //stopping_criteria.add(new EstimatedNodeSize(0.05));
- return createSinglePrunnedC45(wm, obj_class, new Entropy(), new CrossValidation(10), stopping_criteria);
+ SingleTreeBuilder single_builder = new SingleTreeBuilder();
+ single_builder.setTrainRatio(Util.DEFAULT_TRAINING_RATIO);
+ single_builder.setTestRatio(Util.DEFAULT_TESTING_RATIO);
+
+ String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
+ String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+
+ /* create the memory */
+ Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+
+ int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.85 );
+ learner.addStoppingCriteria(new MaximumDepth(max_depth));
+
+ single_builder.build(mem, learner);//obj_class, target_attr, working_attr
+ single_builder.printResults(executionSignature);
+ single_builder.printLatex(executionSignature);
+
+ SingleTreeTester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+
+ single_builder.getTree().setSignature(executionSignature);
+ return single_builder.getTree();
}
- public static DecisionTree createSingleCVPrunnedC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
- ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
- //stopping_criteria.add(new EstimatedNodeSize(0.05));
- return createSinglePrunnedC45(wm, obj_class, new GainRatio(), new CrossValidation(10), stopping_criteria);
+
+ public static DecisionTree createBaggC45E_Test(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ return createBaggC45_Test(wm, obj_class, new Entropy());
}
+ public static DecisionTree createBaggC45G_Test(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ return createBaggC45_Test(wm, obj_class, new GainRatio());
+ }
- protected static DecisionTree createSinglePrunnedC45(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h, ErrorEstimate validater, ArrayList<StoppingCriterion> stopping_criteria) throws FeatureNotSupported {
+ protected static DecisionTree createBaggC45_Test(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
DataType data = Learner.DEFAULT_DATA;
- C45Learner learner = new C45Learner(h, stopping_criteria);
+ C45Learner learner = new C45Learner(h);
+ //learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
+ ForestBuilder forest = new ForestBuilder();
+ forest.setTrainRatio(Util.DEFAULT_TRAINING_RATIO);
+ forest.setTestRatio(Util.DEFAULT_TESTING_RATIO);
+
+ String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), forest.getTreeAlgo());
+ String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+
+ /* create the memory */
+ Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+
+ int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.70 );
+ //learner.addStoppingCriteria(new MaximumDepth(max_depth));
+
+ forest.build(mem, learner);
+ forest.printResults(executionSignature);
+ forest.printLatex(executionSignature);
+
+ SingleTreeTester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+
+ forest.getTree().setSignature(executionSignature);
+ return forest.getTree();
+ }
+
+
+ public static DecisionTree createBaggC45E_StoppedTest(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ return createBaggC45_StopTest(wm, obj_class, new Entropy());
+ }
+ public static DecisionTree createBaggC45G_StoppedTest(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ return createBaggC45_StopTest(wm, obj_class, new GainRatio());
+ }
+
+ protected static DecisionTree createBaggC45_StopTest(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+ DataType data = Learner.DEFAULT_DATA;
+
+ C45Learner learner = new C45Learner(h);
+ learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
+ learner.addStoppingCriteria(new ImpurityDecrease());
+
+ ForestBuilder forest = new ForestBuilder();
+ forest.setTrainRatio(Util.DEFAULT_TRAINING_RATIO);
+ forest.setTestRatio(Util.DEFAULT_TESTING_RATIO);
+
+ String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), forest.getTreeAlgo());
+ String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+
+ /* create the memory */
+ Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+
+ int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.70 );
+ learner.addStoppingCriteria(new MaximumDepth(max_depth));
+
+ forest.build(mem, learner);
+ forest.printResults(executionSignature);
+ forest.printLatex(executionSignature);
+
+ SingleTreeTester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+
+ forest.getTree().setSignature(executionSignature);
+ return forest.getTree();
+ }
+
+ public static DecisionTree createBoostedC45E_Test(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ return createBoostedC45_Test(wm, obj_class, new Entropy());
+ }
+ public static DecisionTree createBoostedC45G_Test(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ return createBoostedC45_Test(wm, obj_class, new GainRatio());
+ }
+
+ public static DecisionTree createBoostedC45_Test(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+ DataType data = Learner.DEFAULT_DATA;
+
+ C45Learner learner = new C45Learner(h);
+ //learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
+ AdaBoostBuilder forest = new AdaBoostBuilder();
+ forest.setTrainRatio(Util.DEFAULT_TRAINING_RATIO);
+ forest.setTestRatio(Util.DEFAULT_TESTING_RATIO);
+
+ String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), forest.getTreeAlgo());
+ String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+
+
+ /* create the memory */
+ Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+ int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.70 );
+ //learner.addStoppingCriteria(new MaximumDepth(max_depth));
+
+ forest.build(mem, learner);
+
+ forest.printResults(executionSignature);
+ forest.printLatex(executionSignature);
+
+ SingleTreeTester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+
+ //Tester bla => test(c45, mem.getClassInstances());
+ forest.getTree().setSignature(executionSignature);
+ return forest.getTree();
+ }
+
+ public static DecisionTree createBoostedC45E_StopTest(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ return createBoostedC45_StopTest(wm, obj_class, new Entropy());
+ }
+ public static DecisionTree createBoostedC45G_StopTest(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+ return createBoostedC45_StopTest(wm, obj_class, new GainRatio());
+ }
+
+ public static DecisionTree createBoostedC45_StopTest(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h) throws FeatureNotSupported {
+ DataType data = Learner.DEFAULT_DATA;
+
+ C45Learner learner = new C45Learner(h);
+ learner.addStoppingCriteria(new EstimatedNodeSize(0.5));
+ learner.addStoppingCriteria(new ImpurityDecrease());
+
+ AdaBoostBuilder forest = new AdaBoostBuilder();
+ forest.setTrainRatio(Util.DEFAULT_TRAINING_RATIO);
+ forest.setTestRatio(Util.DEFAULT_TESTING_RATIO);
+
+ String algo_suffices = DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), forest.getTreeAlgo());
+ String executionSignature = DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
+
+
+ /* create the memory */
+ Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
+ int max_depth = (int)((mem.getClassInstances().getSchema().getAttrNames().size() - 1)*0.70 );
+ learner.addStoppingCriteria(new MaximumDepth(max_depth));
+
+ forest.build(mem, learner);
+
+ forest.printResults(executionSignature);
+ forest.printLatex(executionSignature);
+
+ SingleTreeTester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+
+ //Tester bla => test(c45, mem.getClassInstances());
+ forest.getTree().setSignature(executionSignature);
+ return forest.getTree();
+ }
+
+// public static DecisionTree createSingleCrossPrunnedStopC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+//
+// ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+// stopping_criteria.add(new EstimatedNodeSize(0.05));
+// return createSinglePrunnedC45(wm, obj_class, new Entropy(), new CrossValidation(10), stopping_criteria);
+// }
+// public static DecisionTree createSingleCrossPrunnedStopC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+// ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+// stopping_criteria.add(new EstimatedNodeSize(0.05));
+// return createSinglePrunnedC45(wm, obj_class, new GainRatio(), new CrossValidation(10), stopping_criteria);
+// }
+//
+// public static DecisionTree createSingleTestPrunnedStopC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+//
+// ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+// stopping_criteria.add(new EstimatedNodeSize(0.05));
+// return createSinglePrunnedC45(wm, obj_class, new Entropy(), new TestSample(0.2d), stopping_criteria);
+// }
+// public static DecisionTree createSingleTestPrunnedStopC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+// ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+// stopping_criteria.add(new EstimatedNodeSize(0.05));
+// return createSinglePrunnedC45(wm, obj_class, new GainRatio(), new TestSample(0.2), stopping_criteria);
+// }
+//
+// public static DecisionTree createSingleCVPrunnedC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+//
+// ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+// //stopping_criteria.add(new EstimatedNodeSize(0.05));
+// return createSinglePrunnedC45(wm, obj_class, new Entropy(), new CrossValidation(10), stopping_criteria);
+// }
+// public static DecisionTree createSingleCVPrunnedC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+// ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+// //stopping_criteria.add(new EstimatedNodeSize(0.05));
+// return createSinglePrunnedC45(wm, obj_class, new GainRatio(), new CrossValidation(10), stopping_criteria);
+// }
+
+ public static DecisionTree createSingleTestPrunnedC45E(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+
+// ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+// //stopping_criteria.add(new EstimatedNodeSize(0.05));
+ return createSinglePrunnedC45(wm, obj_class, new Entropy(), new TestSample(0.2d));
+ }
+ public static DecisionTree createSingleTestPrunnedC45G(WorkingMemory wm, Class<? extends Object> obj_class) throws FeatureNotSupported {
+// ArrayList<StoppingCriterion> stopping_criteria = new ArrayList<StoppingCriterion>();
+// stopping_criteria.add(new EstimatedNodeSize(0.05));
+ return createSinglePrunnedC45(wm, obj_class, new GainRatio(), new TestSample(0.2d));
+ }
+
+ protected static DecisionTree createSinglePrunnedC45(WorkingMemory wm, Class<? extends Object> obj_class, Heuristic h, ErrorEstimate validater) throws FeatureNotSupported {
+ DataType data = Learner.DEFAULT_DATA;
+
+ C45Learner learner = new C45Learner(h);
+ learner.addStoppingCriteria(new EstimatedNodeSize(0.05));
SingleTreeBuilder single_builder = new SingleTreeBuilder();
+ single_builder.setTrainRatio(Util.DEFAULT_TRAINING_RATIO);
+ single_builder.setTestRatio(Util.DEFAULT_TESTING_RATIO);
// String algo_suffices = org.drools.learner.deprecated.DecisionTreeFactory.getAlgoSuffices(learner.getDomainAlgo(), single_builder.getTreeAlgo());
// String executionSignature = org.drools.learner.deprecated.DecisionTreeFactory.getSignature(obj_class, "", algo_suffices);
@@ -237,25 +520,28 @@
/* create the memory */
Memory mem = Memory.createFromWorkingMemory(wm, obj_class, learner.getDomainAlgo(), data);
single_builder.build(mem, learner);//obj_class, target_attr, working_attr
+
+// validater.validate(learner, mem.getClassInstances());
+//
+// DecisionTreePruner pruner = new DecisionTreePruner(validater);
+//
+// DecisionTree dt = pruner.prun_to_estimate();
-
- validater.validate(learner, mem.getClassInstances());
-
- DecisionTreePruner pruner = new DecisionTreePruner(validater);
- pruner.prun_to_estimate();
-
// you should be able to get the pruned tree
// prun.getMinimumCostTree()
// prun.getOptimumCostTree()
- // test the tree
- SingleTreeTester tester = new SingleTreeTester(learner.getTree());
- tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
+ single_builder.printResults(executionSignature);
+ single_builder.printLatex(executionSignature);
+ single_builder.printLatex2(executionSignature);
+
+ SingleTreeTester.printStopping(learner.getStoppingCriteria(), Util.DRL_DIRECTORY +executionSignature);
+
/* Once Talpha is found the tree that is finally suggested for use is that
* which minimises the cost-complexity using and all the data use the pruner to prun the tree
*/
- pruner.prun_tree(learner.getTree());
+ //pruner.prun_tree(single_builder.getTree());
// test the tree again
@@ -263,8 +549,8 @@
//Tester.test(c45, mem.getClassInstances());
- learner.getTree().setSignature(executionSignature);
- return learner.getTree();
+ single_builder.getTree().setSignature(executionSignature);
+ return single_builder.getTree();
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestBuilder.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -5,6 +5,8 @@
import org.drools.learner.DecisionTree;
import org.drools.learner.InstanceList;
import org.drools.learner.Memory;
+import org.drools.learner.Stats;
+import org.drools.learner.StatsPrinter;
import org.drools.learner.tools.LoggerFactory;
import org.drools.learner.tools.SimpleLogger;
import org.drools.learner.tools.Util;
@@ -12,23 +14,40 @@
public class ForestBuilder implements DecisionTreeBuilder{
private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(ForestBuilder.class, SimpleLogger.DEFAULT_LEVEL);
- private static SimpleLogger slog = LoggerFactory.getSysOutLogger(ForestBuilder.class, SimpleLogger.DEBUG);
+ private static SimpleLogger slog = LoggerFactory.getSysOutLogger(ForestBuilder.class, SimpleLogger.DEFAULT_LEVEL);
private TreeAlgo algorithm = TreeAlgo.BAG; // default bagging, TODO boosting
- private static final int FOREST_SIZE = 50;
+ private double trainRatio = Util.TRAINING_RATIO, testRatio = Util.TESTING_RATIO;
+
+ private static final int FOREST_SIZE = Util.NUM_TREES;
private static final double TREE_SIZE_RATIO = 0.9;
private static final boolean WITH_REP = true;
private ArrayList<DecisionTree> forest;
//private Learner trainer;
+ private DecisionTree best;
+
private DecisionTreeMerger merger;
+ private ForestTester tester;
+// private SingleTreeTester single_tester;
+ private ArrayList<Stats> train_evaluation, test_evaluation;
+
public ForestBuilder() {
//this.trainer = _trainer;
merger = new DecisionTreeMerger();
+ train_evaluation = new ArrayList<Stats>(FOREST_SIZE);
+ test_evaluation = new ArrayList<Stats>(FOREST_SIZE);
}
+
+ public void setTrainRatio(double ratio) {
+ trainRatio = ratio;
+ }
+ public void setTestRatio(double ratio) {
+ testRatio = ratio;
+ }
public void build(Memory mem, Learner _trainer) {
final InstanceList class_instances = mem.getClassInstances();
@@ -42,13 +61,26 @@
// TODO put the feature not supported exception || implement it
}
- int N = class_instances.getSize();
- // _trainer.setTrainingDataSize(N); => wrong
+ int split_idx = (int)(trainRatio * class_instances.getSize());
+ int split_idx2 = split_idx + (int)(testRatio * class_instances.getSize());
+
+ InstanceList train_instances = class_instances.subList(0, split_idx);
+ InstanceList test_instances = class_instances.subList(split_idx, split_idx2);//class_instances.getSize());
+
+
+ int N = train_instances.getSize();
int tree_capacity = (int)(TREE_SIZE_RATIO * N);
_trainer.setTrainingDataSizePerTree(tree_capacity);
-
/* tree_capacity number of data fed to each tree, there are FOREST_SIZE trees*/
_trainer.setTrainingDataSize(tree_capacity * FOREST_SIZE);
+
+// int N = class_instances.getSize();
+// // _trainer.setTrainingDataSize(N); => wrong
+// int tree_capacity = (int)(TREE_SIZE_RATIO * N);
+// _trainer.setTrainingDataSizePerTree(tree_capacity);
+//
+// /* tree_capacity number of data fed to each tree, there are FOREST_SIZE trees*/
+// _trainer.setTrainingDataSize(tree_capacity * FOREST_SIZE);
forest = new ArrayList<DecisionTree> (FOREST_SIZE);
@@ -60,11 +92,13 @@
else
bag = Util.bag_wo_rep(tree_capacity, N);
- InstanceList working_instances = class_instances.getInstances(bag);
+ //InstanceList working_instances = class_instances.getInstances(bag);
+ InstanceList working_instances = train_instances.getInstances(bag);
+ DecisionTree dt = _trainer.instantiate_tree();
if (slog.debug() != null)
slog.debug().log("\n"+"Training a tree"+"\n");
- DecisionTree dt = _trainer.train_tree(working_instances);
+ _trainer.train_tree(dt, working_instances);
if (slog.debug() != null)
slog.debug().log("\n"+"the end"+ "\n");
dt.setID(i);
@@ -74,16 +108,28 @@
if (slog.stat() !=null)
slog.stat().stat(".");
+ SingleTreeTester single_tester = new SingleTreeTester(dt);
+
+ train_evaluation.add(single_tester.test(train_instances));
+ test_evaluation.add(single_tester.test(test_instances));
}
+ tester = new ForestTester(forest);
+ train_evaluation.add(tester.test(train_instances));
+ test_evaluation.add(tester.test(test_instances));
+
//System.exit(0);
// TODO how to compute a best tree from the forest
- DecisionTree best = merger.getBest();
+ int best_id = getMinTestId();
+ best = merger.getBest();
if (best == null)
- best = forest.get(0);
- _trainer.setBestTree(best);// forest.get(0));
+ best = forest.get(best_id);
+ train_evaluation.add(train_evaluation.get(best_id));
+ test_evaluation.add(test_evaluation.get(best_id));
+ //_trainer.setBestTree(best);// forest.get(0));
+
//this.c45 = dt;
}
@@ -94,6 +140,75 @@
public ArrayList<DecisionTree> getTrees() {
return forest;
}
+
+ public DecisionTree getTree() {
+ return best;
+ }
+
+ public int getMinTestId() {
+ double min = 1.0;
+ int id = -1;
+ for (int i=0; i< FOREST_SIZE; i++ ) {
+ Stats test_s=test_evaluation.get(i);
+ Stats train_s=train_evaluation.get(i);
+ double test_error = ((double)test_s.getResult(Stats.INCORRECT)/(double)test_s.getTotal());
+ double train_error = ((double)train_s.getResult(Stats.INCORRECT)/(double)train_s.getTotal());
+ if (test_error < min) {
+ min = test_error;
+ id = i;
+ } else if (test_error == min) {
+ Stats old = train_evaluation.get(id);
+ double train_old = ((double)old.getResult(Stats.INCORRECT)/(double)old.getTotal());
+ if (train_error < train_old) {
+ min = test_error;
+ id = i;
+ }
+ }
+
+ }
+ return id;
+
+ }
+
+ public void printResults(String executionSignature) {
+ StringBuffer sb = new StringBuffer();
+ sb.append("#"+ Stats.getErrors());
+ for (int i =0 ; i<FOREST_SIZE; i++) {
+ sb.append(train_evaluation.get(i).print2string() + "\n");
+ }
+ sb.append( "\n\n");
+ for (int i =0 ; i<FOREST_SIZE; i++) {
+ sb.append(test_evaluation.get(i).print2string() + "\n");
+ }
+ sb.append( "\n");
+ sb.append(train_evaluation.get(FOREST_SIZE).print2string() + "\n");
+ sb.append( "\n");
+ sb.append(test_evaluation.get(FOREST_SIZE).print2string() + "\n");
+
+ sb.append( "\n");
+ sb.append(train_evaluation.get(FOREST_SIZE+1).print2string() + "\n");
+ sb.append( "\n");
+ sb.append(test_evaluation.get(FOREST_SIZE+1).print2string() + "\n");
+
+ StatsPrinter.print2file(sb, Util.DRL_DIRECTORY +executionSignature, false);
+ }
+
+ public void printLatex(String executionSignature) {
+ StringBuffer sb = new StringBuffer();
+ sb.append("#"+ Stats.getErrors());
+ for (int i =0 ; i<FOREST_SIZE; i++) {
+ sb.append(train_evaluation.get(i).print4Latex() +test_evaluation.get(i).print4Latex() + "\\\\"+"\n");
+ }
+
+ sb.append( "\n");
+ sb.append(train_evaluation.get(FOREST_SIZE).print4Latex() +test_evaluation.get(FOREST_SIZE).print4Latex() +"\\\\"+"\n");
+
+ sb.append( "\n");
+ sb.append(train_evaluation.get(FOREST_SIZE+1).print4Latex() +test_evaluation.get(FOREST_SIZE+1).print4Latex()+"\\\\"+ "\n");
+ sb.append( "\n");
+
+ StatsPrinter.print2file(sb, Util.DRL_DIRECTORY +executionSignature, true);
+ }
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestTester.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestTester.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/ForestTester.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -78,8 +78,8 @@
return winner;
}
- public void printStats(final Stats evaluation, String executionSignature) {
- super.printStats(evaluation, executionSignature);
+ public void printStats(final Stats evaluation, String executionSignature, boolean append) {
+ super.printStats(evaluation, executionSignature, append);
}
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Learner.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Learner.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Learner.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -1,5 +1,6 @@
package org.drools.learner.builder;
+import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
@@ -9,13 +10,14 @@
import org.drools.learner.InstanceList;
import org.drools.learner.TreeNode;
import org.drools.learner.eval.InstDistribution;
+import org.drools.learner.eval.stopping.StoppingCriterion;
import org.drools.learner.tools.LoggerFactory;
import org.drools.learner.tools.SimpleLogger;
public abstract class Learner {
protected static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(Learner.class, SimpleLogger.DEFAULT_LEVEL);
- protected static SimpleLogger slog = LoggerFactory.getSysOutLogger(Learner.class, SimpleLogger.DEBUG);
+ protected static SimpleLogger slog = LoggerFactory.getSysOutLogger(Learner.class, SimpleLogger.DEFAULT_LEVEL);
public static enum DomainAlgo { CATEGORICAL, QUANTITATIVE }
public static DomainAlgo DEFAULT_DOMAIN = DomainAlgo.QUANTITATIVE;
@@ -23,22 +25,48 @@
public static enum DataType {PRIMITIVE, STRUCTURED, COLLECTION}
public static DataType DEFAULT_DATA = DataType.PRIMITIVE;
private int data_size, data_size_per_tree;
- private DecisionTree best_tree;
+
+ // must be deleted, goes to builder
+// private DecisionTree best_tree;
private InstanceList input_data;
protected HashSet<Instance> missclassified_data;
private DomainAlgo algorithm;
+ protected ArrayList<StoppingCriterion> criteria;
+
protected abstract TreeNode train(DecisionTree dt, InstDistribution data_stats, int depth);
public Learner() {
this.data_size = 0;
this.data_size_per_tree = 0;
+
+ criteria = new ArrayList<StoppingCriterion>(4);
}
+ public DecisionTree instantiate_tree() {
+ String target_reference = this.getTargetDomain().getFReferenceName();
+ //System.out.println("(Learner) target "+ target_reference);
+ DecisionTree dt = new DecisionTree(input_data.getSchema(), target_reference);
+
+ //flog.debug("Num of attributes: "+ dt.getAttrDomains().size());
+ return dt;
+ }
+ public void train_tree(DecisionTree dt, InstanceList working_instances) {
+ 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, 0);
+ dt.setRoot(root);
+ //flog.debug("Result tree\n" + dt);
+// return dt;
+ }
+
public DecisionTree train_tree(InstanceList working_instances) {
String target_reference = this.getTargetDomain().getFReferenceName();
//System.out.println("(Learner) target "+ target_reference);
@@ -85,7 +113,13 @@
}
return dt;
}
+ public ArrayList<StoppingCriterion> getStoppingCriteria() {
+ return criteria;
+ }
+ public void addStoppingCriteria(StoppingCriterion _criteria) {
+ criteria.add(_criteria);
+ }
public void setTrainingDataSizePerTree(int num) {
this.data_size_per_tree = num;
@@ -103,10 +137,10 @@
public int getTrainingDataSize() {
return this.data_size;
}
-
- public DecisionTree getTree() {
- return best_tree;
- }
+// must be deleted, goes to builder
+// public DecisionTree getTree() {
+// return best_tree;
+// }
public DomainAlgo getDomainAlgo() {
return this.algorithm;
@@ -124,8 +158,9 @@
return input_data;
}
- public void setBestTree(DecisionTree dt) {
- this.best_tree = dt;
- }
+ // must be deleted, goes to builder
+// public void setBestTree(DecisionTree dt) {
+// this.best_tree = dt;
+// }
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeBuilder.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -1,27 +1,48 @@
package org.drools.learner.builder;
+import java.util.ArrayList;
+
import org.drools.learner.DecisionTree;
+import org.drools.learner.DecisionTreePruner;
import org.drools.learner.InstanceList;
import org.drools.learner.Memory;
+import org.drools.learner.Stats;
+import org.drools.learner.StatsPrinter;
import org.drools.learner.tools.LoggerFactory;
import org.drools.learner.tools.SimpleLogger;
+import org.drools.learner.tools.Util;
public class SingleTreeBuilder implements DecisionTreeBuilder{
private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(SingleTreeBuilder.class, SimpleLogger.DEFAULT_LEVEL);
private static SimpleLogger slog = LoggerFactory.getSysOutLogger(SingleTreeBuilder.class, SimpleLogger.DEFAULT_LEVEL);
-
+ private boolean prune = false;
private TreeAlgo algorithm = TreeAlgo.SINGLE; // default bagging, TODO boosting
private DecisionTree one_tree;
- //private Learner trainer;
+ private Stats train_evaluation, test_evaluation;
+ private Stats train_evaluation2, test_evaluation2;
+
+ private double trainRatio = Util.TRAINING_RATIO;
+ private double testRatio = Util.TESTING_RATIO;
+
+ private SingleTreeTester tester;
+
public SingleTreeBuilder() {//Learner _trainer) {
//this.trainer = _trainer;
//dom_type = trainer.getDomainType();
}
+ public void setTrainRatio(double ratio) {
+ trainRatio = ratio;
+ }
+
+ public void setTestRatio(double ratio) {
+ testRatio = ratio;
+ }
+
/*
* the memory has the information
* the instances: the objects which the decision tree will work on
@@ -39,14 +60,87 @@
System.exit(0);
// TODO put the feature not supported exception || implement it
}
- _trainer.setTrainingDataSize(class_instances.getSize());
- _trainer.setTrainingDataSizePerTree(class_instances.getSize());
- one_tree = _trainer.train_tree(class_instances);
- _trainer.setBestTree(one_tree);
+ int split_idx = (int)(trainRatio * class_instances.getSize());
+ int split_idx2 = split_idx + (int)(testRatio * class_instances.getSize());
+
+ InstanceList train_instances = class_instances.subList(0, split_idx);
+ InstanceList test_instances = class_instances.subList(split_idx, split_idx2);//class_instances.getSize());
+
+ _trainer.setTrainingDataSize(train_instances.getSize());
+ _trainer.setTrainingDataSizePerTree(train_instances.getSize());
+
+ one_tree = _trainer.instantiate_tree();
+ if (slog.debug() != null)
+ slog.debug().log("\n"+"Training a tree"+"\n");
+ _trainer.train_tree(one_tree, train_instances);
+ one_tree.setTrainingDataSize(train_instances.getSize());
+ one_tree.setTestingDataSize(test_instances.getSize());
+ one_tree.setTrain(train_instances);
+ one_tree.setTest(test_instances);
+
+ tester = new SingleTreeTester(one_tree);
+
+ train_evaluation = tester.test(train_instances);
+ test_evaluation = tester.test(test_instances);
+ one_tree.setValidationError(Util.division(test_evaluation.getResult(Stats.INCORRECT), test_instances.getSize()));
+ one_tree.setTrainingError(Util.division(train_evaluation.getResult(Stats.INCORRECT), train_instances.getSize()));
+
+ //if (prunner != null) {
+ if (prune) {
+ DecisionTreePruner pruner = new DecisionTreePruner();
+ ArrayList<DecisionTree> dts = new ArrayList<DecisionTree>(1);
+ dts.add(one_tree);
+ pruner.prun_to_estimate(dts);
+// SingleTreeTester tester2 = new SingleTreeTester(one_tree);
+
+ train_evaluation2 = tester.test(train_instances);
+ test_evaluation2 = tester.test(test_instances);
+
+ }
+
+
+ // must be deleted, goes to builder
+ //_trainer.setBestTree(one_tree);
}
+ public Stats getTrainStats() {
+ return train_evaluation;
+ }
+
+ public Stats getTestStats() {
+ return test_evaluation;
+ }
+
public TreeAlgo getTreeAlgo() {
return this.algorithm; // default
}
+
+ public DecisionTree getTree() {
+ return one_tree;
+ }
+ public void printResults(String executionSignature) {
+ tester.printStats(getTrainStats(), Util.DRL_DIRECTORY + executionSignature, false);
+ tester.printStats(getTestStats(), Util.DRL_DIRECTORY + executionSignature, true);
+ }
+
+ public void printLatex(String executionSignature) {
+ StringBuffer sb = new StringBuffer();
+ sb.append("#"+ Stats.getErrors());
+ sb.append( "\n");
+ sb.append(getTrainStats().print4Latex() +getTestStats().print4Latex()+"\\\\"+ "\n");
+ sb.append( "\n");
+
+ StatsPrinter.print2file(sb, Util.DRL_DIRECTORY +executionSignature, true);
+ }
+
+ public void printLatex2(String executionSignature) {
+ StringBuffer sb = new StringBuffer();
+ sb.append("#"+ Stats.getErrors());
+ sb.append( "\n");
+ sb.append(train_evaluation2.print4Latex() +test_evaluation2.print4Latex()+"\\\\"+ "\n");
+ sb.append( "\n");
+
+ StatsPrinter.print2file(sb, Util.DRL_DIRECTORY +executionSignature, true);
+ }
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeTester.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeTester.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/SingleTreeTester.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -1,9 +1,12 @@
package org.drools.learner.builder;
+import java.util.ArrayList;
+
import org.drools.learner.DecisionTree;
import org.drools.learner.Instance;
import org.drools.learner.InstanceList;
import org.drools.learner.Stats;
+import org.drools.learner.eval.stopping.StoppingCriterion;
public class SingleTreeTester extends Tester{
@@ -41,7 +44,8 @@
return evaluate(single_tree.getTargetDomain(), i, tree_decision);
}
- public void printStats(final Stats evaluation, String executionSignature) {
- super.printStats(evaluation, executionSignature);
- }
+// public void printStats(Stats evaluation, String executionSignature, boolean append) {
+// super.printStats(evaluation, executionSignature, append);
+// }
+
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Tester.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Tester.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/builder/Tester.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -1,10 +1,18 @@
package org.drools.learner.builder;
+import java.io.FileNotFoundException;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+
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.StatsPrinter;
+import org.drools.learner.eval.stopping.StoppingCriterion;
import org.drools.learner.tools.Util;
public abstract class Tester{
@@ -27,13 +35,43 @@
}
}
- protected void printStats(final Stats evaluation, String executionSignature) {
- if (Util.PRINT_STATS) {
-// if (flog.debug() !=null)
-// flog.debug().log(evaluation.print2string());
-
- evaluation.print2file(executionSignature);
+// protected void printStats(final Stats evaluation, String executionSignature, boolean append) {
+// if (Util.PRINT_STATS) {
+//// if (flog.debug() !=null)
+//// flog.debug().log(evaluation.print2string());
+//
+// evaluation.print2file(executionSignature, append);//correct
+// }
+// }
+
+ protected void printStats(Stats evaluation, String executionSignature, boolean append) {
+ //PrintWriter pwr = new PrintWriter(os);
+
+ // print the statistics of the results to a file
+ StringBuffer sb = new StringBuffer();
+ sb.append("TESTING results: incorrect "+ evaluation.getResult(Stats.INCORRECT)+"\n");
+ sb.append("TESTING results: correct "+ evaluation.getResult(Stats.CORRECT)+"\n");
+ sb.append("TESTING results: unknown "+ evaluation.getResult(Stats.UNKNOWN)+"\n");
+ sb.append("TESTING results: Total Number "+ evaluation.getTotal());
+
+ StatsPrinter.print2file(sb, executionSignature, append);
+ }
+
+ public static void printStopping(ArrayList<StoppingCriterion> stoppingCriteria,
+ String executionSignature) {
+ StringBuffer sb = new StringBuffer();
+ for (StoppingCriterion sc:stoppingCriteria) {
+ sb.append("\n"+"\t&\t"+ sc.getClass().getSimpleName() );
}
+ sb.append("\n");
+ for (StoppingCriterion sc:stoppingCriteria) {
+ sb.append("\t&\t"+sc.getNumPruned() + "");
+ }
+ sb.append("\\\\\n");
+ StatsPrinter.print2file(sb, executionSignature, true);
+
}
+
+
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CrossValidation.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CrossValidation.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/CrossValidation.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -147,8 +147,8 @@
// // the validation set divide = fold_size*i; divide < fold_size*(i+1)-1
// // last part divide = fold_size*(i+1); divide < N
int valid_fold_size = getTestDataSize(i);
- InstanceList learning_set = new InstanceList(class_instances.getSchema(), num_instances - valid_fold_size +1);
- InstanceList validation_set = new InstanceList(class_instances.getSchema(), valid_fold_size);
+ InstanceList learning_set = new InstanceList(class_instances, num_instances - valid_fold_size + 1);
+ InstanceList validation_set = new InstanceList(class_instances, valid_fold_size);
for (int divide_index = 0; divide_index < num_instances; divide_index++){
if (slog.info() !=null)
@@ -193,4 +193,8 @@
public int getEstimatorSize() {
return k_fold;
}
+ public void setTrainingDataSize(int trainingDataSize) {
+ // TODO Auto-generated method stub
+
+ }
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Entropy.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Entropy.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/Entropy.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -23,6 +23,8 @@
* used by:
* c45Alternator, c45Learner, c45Iterator
*/
+
+ protected static double multiplier = 1.0;
protected double data_eval;
protected InstDistribution insts_by_target;
protected ArrayList<Instance> sorted_instances;
@@ -42,7 +44,7 @@
public double getEval(Domain attr_domain) {
CondClassDistribution insts_by_attr = info_attr(attr_domain);
- return data_eval - Entropy.calc_info_attr(insts_by_attr);
+ return multiplier *(data_eval - Entropy.calc_info_attr(insts_by_attr));
}
public double getEval_cont(Domain attr_domain) {
@@ -60,7 +62,7 @@
}
domain = trialDomain;
sorted_instances = visitor.getSortedInstances();
- return attribute_eval;
+ return multiplier *attribute_eval;
}
public double getDataEval() {
@@ -76,7 +78,7 @@
}
public double getWorstEval() {
- return -1000;
+ return multiplier -1000;
}
public CondClassDistribution info_attr(Domain attr_domain) {
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/ErrorEstimate.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/ErrorEstimate.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/ErrorEstimate.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -18,4 +18,6 @@
public double getErrorEstimate();
public double getAlphaEstimate();
+
+ public void setTrainingDataSize(int trainingDataSize);
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/TestSample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/TestSample.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/TestSample.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -21,7 +21,7 @@
private InstanceList class_instances;
private double error_estimate, training_error_estimate, num_leaves_estimate, alpha_estimate;
private boolean WITH_REP = false;
- private int num_instances;
+ private int num_instances, training_data_size;
private int[] crossed_set;
private double test_ratio;
@@ -103,8 +103,8 @@
// // first part divide = 0; divide < fold_size*i
// // the validation set divide = fold_size*i; divide < fold_size*(i+1)-1
// // last part divide = fold_size*(i+1); divide < N
- InstanceList learning_set = new InstanceList(class_instances.getSchema(), num_instances - TEST_SET_1 +1);
- InstanceList validation_set = new InstanceList(class_instances.getSchema(), TEST_SET_1);
+ InstanceList learning_set = new InstanceList(class_instances, num_instances - TEST_SET_1 +1);
+ InstanceList validation_set = new InstanceList(class_instances, TEST_SET_1);
for (int divide_index = 0; divide_index < num_instances; divide_index++){
if (slog.info() !=null)
@@ -143,10 +143,14 @@
}
public int getTrainingDataSize(int i) {
- return num_instances - TEST_SET_1;
+ return training_data_size; //num_instances - TEST_SET_1;
}
public int getTestDataSize(int i) {
return TEST_SET_1;
}
+ public void setTrainingDataSize(int _trainingDataSize) {
+ training_data_size = _trainingDataSize;
+ }
+
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/EstimatedNodeSize.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/EstimatedNodeSize.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/EstimatedNodeSize.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -7,11 +7,13 @@
private double outlier_percentage;
private int estimated_sum_branch;
private int num_times_branched;
+ private int num_prunned;
public EstimatedNodeSize(double o_p) {
outlier_percentage = o_p;
num_times_branched = 0;
+ num_prunned = 0;
}
@@ -22,10 +24,16 @@
double estimated_branch = (double)estimated_sum_branch/(double)num_times_branched;
// N/(b^d)
double estimated_size = best_attr_eval.getTotalNumData()/Math.pow(estimated_branch, d);
- System.out.println("EstimatedNodeSize:stop: " +best_attr_eval.getNumData() + " <= " + ( Math.ceil(estimated_size*outlier_percentage)-1) +" / "+estimated_size);
- if (best_attr_eval.getNumData() <= Math.ceil(estimated_size*outlier_percentage)-1)
+ //System.out.println("EstimatedNodeSize:stop: " +best_attr_eval.getNumData() + " <= " + ( Math.ceil(estimated_size*outlier_percentage)-1) +" / "+estimated_size);
+ if (best_attr_eval.getNumData() <= Math.ceil(estimated_size*outlier_percentage)-1) {
+ num_prunned ++;
return true;
- else
+ } else {
return false;
+ }
}
+
+ public int getNumPruned(){
+ return num_prunned;
+ }
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/ImpurityDecrease.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/ImpurityDecrease.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/ImpurityDecrease.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -5,16 +5,28 @@
public class ImpurityDecrease implements StoppingCriterion {
- private double beta = 0.1;
+ private double beta = 0.00001;
+ private int num_prunned;
+ public ImpurityDecrease() {
+ num_prunned = 0;
+ }
+
public ImpurityDecrease(double _beta) {
+ num_prunned = 0;
beta = _beta;
}
public boolean stop(InformationContainer best_attr_eval) {
- if (best_attr_eval.attribute_eval < beta)
+ if (best_attr_eval.attribute_eval < beta) {
+ num_prunned ++;
return true;
- else
+ } else
return false;
+
}
+
+ public int getNumPruned(){
+ return num_prunned;
+ }
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/MaximumDepth.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/MaximumDepth.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/MaximumDepth.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -6,14 +6,21 @@
public class MaximumDepth implements StoppingCriterion {
private int limit_depth;
+ private int num_prunned;
public MaximumDepth(int _depth) {
limit_depth = _depth;
+ num_prunned = 0;
}
public boolean stop(InformationContainer best_attr_eval) {
if (best_attr_eval.getDepth() <= limit_depth)
return false;
- else
+ else {
+ num_prunned++;
return true;
+ }
}
+ public int getNumPruned() {
+ return num_prunned;
+ }
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/StoppingCriterion.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/StoppingCriterion.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/eval/stopping/StoppingCriterion.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -5,5 +5,6 @@
public interface StoppingCriterion {
public boolean stop(InformationContainer best_attr_eval);
+ public int getNumPruned();
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassVisitor.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassVisitor.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ClassVisitor.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -99,7 +99,7 @@
// can get the field annotation
// if it is ignored do not do anything
FieldAnnotation f_spec = Util.getFieldAnnotations(f);
- boolean skip_by_annotation = false;
+ boolean skip = false, ignore_field = false;
if (f_spec != null) {
// the type of the fields that cannot be processed
if (!f_spec.ignore() && f.getType() == String.class && !f_spec.discrete()) {
@@ -107,17 +107,20 @@
}
switch (domain_type) {
case CATEGORICAL: //ID3 can work only with categorical types
- if (f_spec.ignore() || !f_spec.discrete())
- skip_by_annotation = true;
+ if (f_spec.skip() || !f_spec.discrete())
+ skip = true;
break;
case QUANTITATIVE: // C45 can work with categorical || quantitative domain
- if (f_spec.ignore())
- skip_by_annotation = true;
+ if (f_spec.skip())
+ skip = true;
break;
default:
- if (f_spec.ignore())
- skip_by_annotation = true;
+ if (f_spec.skip())
+ skip = true;
}
+ ignore_field = f_spec.ignore();
+ if (ignore_field)
+ skip = ignore_field;
// only if the annotations are given and the flag to ignore is set true
// then continue to next field
@@ -125,7 +128,7 @@
// if there is a getter?
//if (Util.isGetter(m_name) & Util.isSimpleType(returns)) {
- if (!skip_by_annotation) {
+ if (!skip) {
String f_name= f.getName();
Class<?> _obj_klass = structure.getOwnerClass();
String f_refName = Util.getFReference(_obj_klass, f_name);
@@ -144,8 +147,8 @@
f_extractor = cache.getAccessor( _obj_klass, f_name , _obj_klass.getClassLoader() );
class_schema.putExtractor(f_refName, f_extractor);
-
+
structure.addField(f, d_type);
switch (d_type) {
case PRIMITIVE: // domain will be created only for primitive types
@@ -159,6 +162,7 @@
}
}
Util.processDomain(fieldDomain, f.getType());
+ fieldDomain.ignore(ignore_field);
class_schema.putDomain(f_refName, fieldDomain);
for (Field parent_klass: class_relation)
class_schema.addParentField(f_refName, parent_klass);
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FieldAnnotation.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FieldAnnotation.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/FieldAnnotation.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -7,6 +7,7 @@
public @interface FieldAnnotation {
int readingSeq() default 0;
boolean ignore() default false;
+ boolean skip() default false;
boolean target() default false;
boolean discrete() default true;
String[] values() default {"bok"};
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ObjectFactory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ObjectFactory.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ObjectFactory.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -12,9 +12,13 @@
import java.util.HashMap;
import java.util.List;
+import org.drools.StatefulSession;
+
public class ObjectFactory {
+ private int MAX_NUM = 30012;
+
// public static List<Object> getObjectsFromFile(Class<?> clazz, String filename, String separator) {
//
// ObjectFactory class_factory = new ObjectFactory(clazz);
@@ -33,6 +37,19 @@
return null;
}
+ public static List<Object> insertStructuredObjects(Class<?> obj_class, StatefulSession session, String filename) {
+ ObjectFactory class_factory = new ObjectFactory(obj_class);
+ class_factory.wm = session;
+ try {
+ //return class_factory.fromFileAsObject("src/main/java/org/drools"+filename, ",");
+ return class_factory.fromFileAsStructuredObject(filename, ",");
+ } catch (Exception e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ return null;
+ }
+ private StatefulSession wm = null;
private Class<?> obj_clazz;
private ArrayList<Field> clazz_fields;
private HashMap<String,Integer> field_sequences;
@@ -75,18 +92,130 @@
// BufferedReader reader = new BufferedReader(new InputStreamReader(
// this.obj_clazz.getResourceAsStream(filename)));// "../data/"
String line;
- while ((line = reader.readLine()) != null) {
+ int num = 0;
+ while ((line = reader.readLine()) != null && num < MAX_NUM) {
line = line.trim();
if (line.length() == 0)
break;
Object element = this.read(line, separator);
//System.out.println("New object "+ element);
obj_read.add(element);
+ num++;
}
return obj_read;
}
+ public List<Object> fromFileAsStructuredObject(String filename, String separator)
+ throws Exception {
+ List<Object> obj_read = new ArrayList<Object>();
+
+ /**/
+ File file =new File(filename);
+ if(!file.exists()){
+ System.out.println("where is the file ? "+ filename);
+ //System.exit(0);
+
+ file =new File("src/main/java/org/drools/examples/learner/"+filename);
+ if(!file.exists()){
+ file =new File("drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/"+filename);
+
+ System.out.println("where is still the file ? "+ file);
+ if(!file.exists()){
+ System.out.println("where is still still the file ? "+ file);
+ System.exit(0);
+ }
+ }
+ }
+
+ BufferedReader reader = new BufferedReader(new FileReader(file));
+ /**/
+
+// BufferedReader reader = new BufferedReader(new InputStreamReader(
+// this.obj_clazz.getResourceAsStream(filename)));// "../data/"
+ String line;
+ while ((line = reader.readLine()) != null) {
+ line = line.trim();
+ if (line.length() == 0)
+ break;
+ if (line.endsWith("."))
+ line = line.substring(0, line.length() - 1);
+ List<String> fieldValues = Arrays.asList(line.split(separator));
+ Object element = this.readStructured(this.obj_clazz, fieldValues);
+ //System.out.println("New object "+ element);
+ obj_read.add(element);
+
+ }
+ return obj_read;
+ }
+
+
+ private Object readStructured(Class<?> _obj_clazz, List<String> fieldValues) throws Exception {
+ Object element = null;
+ ArrayList<Field> _clazz_fields = new ArrayList<Field>();
+ Util.getSuperFields(_obj_clazz, _clazz_fields);
+ HashMap<String,Integer> _field_sequences = getFieldReadingSeqs(_obj_clazz, _clazz_fields);
+ try {
+ element = _obj_clazz.newInstance();
+
+ Method[] element_methods = _obj_clazz.getDeclaredMethods();
+ for (Method m : element_methods) {
+ String m_name = m.getName();
+ Class<?>[] param_type_name = m.getParameterTypes();
+ if (Util.isSetter(m_name)) {
+ Object fieldValue = null;;
+ if (Util.isSimpleMethod(param_type_name)) {
+ String basicFieldName = Util.getFieldName(m_name);
+
+ /* TODO dont use the basic field name as the real field name, there can be a capital/miniscul
+ * letter problem
+ */
+ Field f = null;
+ for (Field _f: _clazz_fields) {
+ if (_f.getName().equalsIgnoreCase(basicFieldName)) {
+ f = _f;
+ break;
+ }
+ }
+ if (f == null) {
+ throw new Exception("Field("+basicFieldName+") could not be found for the class("+_obj_clazz+")");
+ }
+ else {
+ //System.out.print("Field("+f.getName()+") for the class("+_obj_clazz+") " );
+ //System.out.print("seq="+_field_sequences.get(f.getName()) + " ");
+ String fieldString = fieldValues.get(_field_sequences.get(f.getName()));
+ //System.out.println("val="+fieldString);
+ fieldValue = readString(f, fieldString.trim());
+ }
+ } else {
+ Class<?>[] param_classes = m.getParameterTypes();
+ fieldValue = readStructured(param_classes[0], fieldValues);
+
+ }
+
+ try {
+ m.invoke(element, fieldValue);
+ } catch (IllegalArgumentException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (InvocationTargetException e) {
+ System.out.println("invoking the method of the element e:"+element + " v:"+ fieldValue);
+
+ e.printStackTrace();
+ }
+ }
+ }
+
+ } catch (InstantiationException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ wm.insert(element);
+ return element;
+ }
private Object read(String data, String separator) throws Exception {
Object element = null;
@@ -104,7 +233,7 @@
for (Method m : element_methods) {
String m_name = m.getName();
Class<?>[] param_type_name = m.getParameterTypes();
- if (Util.isSetter(m_name) & Util.isSimpleMethod(param_type_name)) {
+ if (Util.isSetter(m_name) && Util.isSimpleMethod(param_type_name)) {
String basicFieldName = Util.getFieldName(m_name);
/* TODO dont use the basic field name as the real field name, there can be a capital/miniscul
@@ -252,6 +381,11 @@
private static Object readDoubleFromString(String data) {
return Double.parseDouble(data);
}
+
+ public static void insert(StatefulSession session, Object r) {
+ session.insert(r);
+
+ }
Added: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ReteStatistics.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ReteStatistics.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ReteStatistics.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,160 @@
+package org.drools.learner.tools;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+
+import org.drools.RuleBase;
+import org.drools.common.AbstractRuleBase;
+import org.drools.learner.StatsPrinter;
+import org.drools.learner.eval.stopping.StoppingCriterion;
+import org.drools.reteoo.AlphaNode;
+import org.drools.reteoo.InitialFactImpl;
+import org.drools.reteoo.JoinNode;
+import org.drools.reteoo.LeftTupleSink;
+import org.drools.reteoo.LeftTupleSource;
+import org.drools.reteoo.ObjectSink;
+import org.drools.reteoo.ObjectSource;
+import org.drools.reteoo.ObjectTypeNode;
+import org.drools.reteoo.Rete;
+import org.drools.reteoo.ReteooRuleBase;
+import org.drools.reteoo.RuleTerminalNode;
+
+public class ReteStatistics {
+ private String[] nodes = {"OBJECT_TYPE_NODE", "ALPHA_NODE", "BETA_NODE", "TERMINAL_NODE"};
+
+ private final int OBJECT_TYPE_NODE_INDEX = 0;
+ private final int ALPHA_NODE_INDEX = 1;
+ private final int BETA_NODE_INDEX = 2;
+ private final int TERMINAL_NODE_INDEX = 3;
+
+ private int []num_of_nodes;
+ private ReteooRuleBase reteRuleBase;
+
+ private HashSet<Object> visitedNodes;
+ public ReteStatistics(RuleBase ruleBase) {
+ reteRuleBase = (ReteooRuleBase)ruleBase;
+
+ num_of_nodes = new int[TERMINAL_NODE_INDEX + 1];
+ visitedNodes = new HashSet<Object>();
+ }
+
+ public void calculateNumberOfNodes() {
+
+// AbstractRuleBase aruleBase = (AbstractRuleBase)ruleBase;
+// ReteooRuleBase reteRuleBase = (ReteooRuleBase)ruleBase;
+ Rete root = reteRuleBase.getRete();
+ //List<ObjectTypeNode> objectTypesNodes = root.getObjectTypeNodes();
+ //int num_object_type_nodes =0;
+ for (ObjectTypeNode o_type_node : root.getObjectTypeNodes()) {
+
+ //ObjectSink[] objectSinks = otn.getSinkPropagator().getSinks();
+ // System.out.println("calculateNumberOfNodes:ObjectTypeNode "+ o_type_node);
+// if (o_type_node.getObjectType().matches(InitialFactImpl.class))
+// continue;
+ //num_object_type_nodes ++;
+ recurseObjectSource(o_type_node);
+ }
+
+// System.out.println("num_object_type_nodes "+ num_of_nodes[OBJECT_TYPE_NODE_INDEX]);
+ //num_of_nodes[OBJECT_TYPE_NODE_INDEX] = num_object_type_nodes;
+
+ }
+
+ public void recurseObjectSource(ObjectSource o_source) {
+
+// System.out.println("recurseObjectSource:1stObjectSource "+o_source);
+ if (o_source.getSinkPropagator().getSinks().length != 0 && o_source instanceof ObjectTypeNode) {
+ if (!visitedNodes.contains(o_source)) {
+ visitedNodes.add(o_source);
+ num_of_nodes[OBJECT_TYPE_NODE_INDEX] ++;
+ }
+ }
+ if (o_source instanceof AlphaNode) {
+ if (!visitedNodes.contains(o_source)) {
+ visitedNodes.add(o_source);
+ num_of_nodes[ALPHA_NODE_INDEX] ++;
+ }
+
+ }
+
+
+ for (ObjectSink o_sink: o_source.getSinkPropagator().getSinks()) {
+// System.out.println("recurseObjectSource:iterate:ObjectSink "+o_sink);
+ if (o_sink instanceof ObjectSource) {
+ ObjectSource new_os = (ObjectSource) o_sink;
+// System.out.println("recurseObjectSource:2ndObjectSource "+new_os);
+ recurseObjectSource(new_os);
+
+ } else if (o_sink instanceof LeftTupleSource) {
+ LeftTupleSource new_lts = (LeftTupleSource) o_sink;
+ // System.out.println("recurseObjectSource:LeftTupleSource "+new_lts);
+ recurseLeftTupleSource(new_lts);
+ } else {
+ System.out.println("System.exitrecurseObjectSource: what is it "+o_sink);
+ System.exit(0);
+
+ }
+ }//
+ }
+ public void recurseLeftTupleSource(LeftTupleSource lt_source) {
+
+
+ for (LeftTupleSink lt_sink: lt_source.getSinkPropagator().getSinks()) {
+// System.out.println("recurseLeftTupleSource:LeftTupleSink "+lt_sink);
+ //lt_sink.
+ if (lt_sink instanceof RuleTerminalNode) {
+ RuleTerminalNode new_rtn = (RuleTerminalNode) lt_sink;
+ //num_of_nodes[TERMINAL_NODE_INDEX] ++;
+
+ if (!visitedNodes.contains(lt_sink)) {
+ visitedNodes.add(lt_sink);
+ num_of_nodes[TERMINAL_NODE_INDEX] ++;
+ }
+ // System.out.println("recurseLeftTupleSource:RuleTerminalNode "+new_rtn + " terminal");
+ return;
+ //recurseObjectSource(new_os);
+
+ } else if (lt_sink instanceof JoinNode) {
+ JoinNode new_join = (JoinNode) lt_sink;
+ if (!visitedNodes.contains(lt_sink)) {
+ visitedNodes.add(lt_sink);
+ num_of_nodes[BETA_NODE_INDEX] ++;
+ }
+ //num_of_nodes[BETA_NODE_INDEX] ++;
+ recurseLeftTupleSource(new_join);
+ } else {
+ //LeftTupleSource new_lts = (LeftTupleSource) lt_sink;
+ System.out.println("System.exitrecurseLeftTupleSource: what is it "+lt_sink);
+ System.exit(0);
+
+ }
+ }
+ }
+
+ public void print() {
+ for (int i: num_of_nodes)
+ System.out.print(i +"\t");
+
+ }
+
+ public void print(String executionSignature) {
+ StringBuffer sb = new StringBuffer();
+
+ for (int i=0; i< num_of_nodes.length; i++) {
+ int num =num_of_nodes[i];
+ sb.append("\t&\t" +nodes[i]);
+ }
+ sb.append("\n");
+ for (int i=0; i< num_of_nodes.length; i++) {
+ int num =num_of_nodes[i];
+ sb.append("\t&\t" +num + "");
+ }
+ sb.append("\\\\\n");
+
+
+ StatsPrinter.print2file(sb, executionSignature, true);
+
+ }
+
+
+}
Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/ReteStatistics.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/RulePrinter.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -22,7 +22,7 @@
public class RulePrinter {
private static SimpleLogger flog = LoggerFactory.getUniqueFileLogger(RulePrinter.class, SimpleLogger.WARN);
- private static SimpleLogger slog = LoggerFactory.getSysOutLogger(RulePrinter.class, SimpleLogger.WARN);
+ private static SimpleLogger slog = LoggerFactory.getSysOutLogger(RulePrinter.class, SimpleLogger.DEBUG);
public static Reader readRules(DecisionTree learned_dt) {
@@ -92,11 +92,15 @@
this.num_instances = dt.getRoot().getNumMatch();
visitor.visit(dt);
-
+ rules.ensureCapacity(visitor.getNumPathsFound());
+ int id = 1;
for (Path p: visitor.getPathList()) {
+// if (id == 289)
+// System.out.println("Here the p");
Rule newRule = createRule(p);
- newRule.setId(rules.size());
+ newRule.setId(id);//rules.size());
rules.add(newRule);
+ id++;
}
if (sort)
@@ -130,7 +134,8 @@
}
if (slog.error() != null)
slog.error().log("\n");
- newRule.processNodeValue(current, nodeRelations, 0, 1); //int condition_or_action = condition = 1
+ // call with rule_decs.get(0)
+ newRule.processNodeValue(current, nodeRelations, newRule.getMainDeclaration(), 0, 1); //int condition_or_action = condition = 1
}
// } else { }
}
@@ -140,7 +145,7 @@
// this a direct child add to reference to the main guy
newRule.addActionToMain(action_node);
} else {
- newRule.processNodeValue(action_node, nodeRelations, 0, 2); //int condition_or_action = action = 2
+ newRule.processNodeValue(action_node, nodeRelations, newRule.getMainDeclaration(), 0, 2); //int condition_or_action = action = 2
}
return newRule;
}
@@ -290,6 +295,9 @@
rule_decs.get(main_obj_id).addCondition(current);
}
+ public Declaration getMainDeclaration(){
+ return rule_decs.get(main_obj_id);
+ }
public void addActionToMain(NodeValue current) {
AttrReference aRef = new AttrReference(current); //D
rule_decs.get(main_obj_id).addActionReference(aRef); //D
@@ -302,29 +310,29 @@
Field referenceField = nodeRelations.get(nodeRelations.size()-1);
String referenceOfCondition = Util.getDecReference(referenceField);
- System.out.println("It is primitive, should add a condition to its father "+referenceOfCondition+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");
+ //System.out.println("It is primitive, should add a condition to its father "+referenceOfCondition+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");
Declaration dec = rule_decs.get(declarationMap.get(referenceOfCondition));
dec.addCondition(current); //D
} else {
Field referenceField = nodeRelations.get(rel_id);
String referenceOfCondition = Util.getDecReference(referenceField);
- System.out.println("referenceOfCondition " +referenceOfCondition + " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1));
+ //System.out.println("referenceOfCondition " +referenceOfCondition + " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1));
Declaration the_place_declared = null;
if (rel_id ==0 ) {
the_place_declared = rule_decs.get(0);
- System.out.println("The first guy "+referenceField.getName()+" to main declaration (ref?)"+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");
+ //System.out.println("The first guy "+referenceField.getName()+" to main declaration (ref?)"+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");
} else {
the_place_declared = rule_decs.get(rel_id-1);//declarationMap.get(referenceOfCondition));
- System.out.println("Continue"+referenceField.getName()+" in "+the_place_declared+ "??? rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");
+ //System.out.println("Continue"+referenceField.getName()+" in "+the_place_declared+ "??? rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");
+
}
-
if (!the_place_declared.hasReference(referenceField.getName())) {
num_declarations++;
Declaration new_dec = new Declaration(referenceField.getType(), referenceField.getName(), num_declarations);
- System.out.println("Create new dec "+referenceOfCondition+" (Main declaration doesnot have a ref"+ referenceField.getName() + ") rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");
+ //System.out.println("Create new dec "+referenceOfCondition+" (Main declaration doesnot have a ref"+ referenceField.getName() + ") rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");
the_place_declared.addReference(new_dec); //D
declarationMap.put(referenceOfCondition, num_declarations);
@@ -333,15 +341,17 @@
addCondition(current, nodeRelations, rel_id+1);
+
+
}
}
-
- public void processNodeValue(NodeValue current, ArrayList<Field> nodeRelations, int rel_id, int condition_or_action) {
+ // first time: the_place_declared = rule_decs.get(0)
+ public void processNodeValue(NodeValue current, ArrayList<Field> nodeRelations, Declaration the_place_declared, int rel_id, int condition_or_action) {
if (rel_id == nodeRelations.size()) { // it must be primitive
Field referenceField = nodeRelations.get(nodeRelations.size()-1);
String referenceOfCondition = Util.getDecReference(referenceField);
- System.out.println("It is primitive, should add a condition to its father "+referenceOfCondition+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");
+ //System.out.println("It is primitive, should add a condition to its father "+referenceOfCondition+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");
Declaration dec = rule_decs.get(declarationMap.get(referenceOfCondition));
switch (condition_or_action) {
@@ -360,25 +370,17 @@
} else {
Field referenceField = nodeRelations.get(rel_id);
String referenceOfCondition = Util.getDecReference(referenceField);
- System.out.println("referenceOfCondition " +referenceOfCondition + " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1));
- Declaration the_place_declared = null;
- if (rel_id ==0 ) {
- the_place_declared = rule_decs.get(0);
- System.out.println("The first guy "+referenceField.getName()+" to main declaration (ref?)"+ " rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");
-
- } else {
- the_place_declared = rule_decs.get(rel_id-1);//declarationMap.get(referenceOfCondition));
- System.out.println("Continue"+referenceField.getName()+" in "+the_place_declared+ "??? rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");
- }
-
+ //Reference current_ref = the_place_declared.getReference(referenceField.getName());
+ Declaration current_dec = null;
if (!the_place_declared.hasReference(referenceField.getName())) {
+ //if (current_ref == null) {
num_declarations++;
- Declaration new_dec = new Declaration(referenceField.getType(), referenceField.getName(), num_declarations);
- System.out.println("Create new dec "+referenceOfCondition+" (Main declaration doesnot have a ref"+ referenceField.getName() + ") rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");
+ current_dec = new Declaration(referenceField.getType(), referenceField.getName(), num_declarations);
+ //System.out.println("Create new dec "+referenceOfCondition+" (Main declaration doesnot have a ref"+ referenceField.getName() + ") rel_id "+ rel_id + " size "+ (nodeRelations.size()-1)+ " \n");
switch (condition_or_action) {
case 1: // condition
- the_place_declared.addReference(new_dec); //D
+ the_place_declared.addReference(current_dec); //D
break;
case 2: // action
AttrReference aRef = new AttrReference(current); //D
@@ -386,10 +388,13 @@
break;
}
declarationMap.put(referenceOfCondition, num_declarations);
- rule_decs.add(new_dec);
+ rule_decs.add(current_dec);
+ } else {
+ //current_dec = the_place_declared.getReference(referenceField.getName()).
+ current_dec = the_place_declared.getReferenceDec(referenceField.getName());
}
- processNodeValue(current, nodeRelations, rel_id+1, condition_or_action);
+ processNodeValue(current, nodeRelations, current_dec, rel_id+1, condition_or_action);
}
}
@@ -559,6 +564,23 @@
references.add(df);
}
+ public Reference getReference(String fName) {
+ for (Reference df : references) {
+ if (df.getFName().equalsIgnoreCase(fName))
+ return df;
+ }
+ return null;
+
+ }
+
+ public Declaration getReferenceDec(String fName) {
+ for (Reference df : references) {
+ if (df.getFName().equalsIgnoreCase(fName) && df instanceof DecReference)
+ return ((DecReference)df).getDec();
+ }
+ return null;
+
+ }
public boolean hasReference(String fName) {
for (Reference df : references) {
if (df.getFName().equalsIgnoreCase(fName))
@@ -594,6 +616,10 @@
fName = d.getDeclaringFName();
}
+ public Declaration getDec() {
+ return toReference;
+ }
+
public String getFName() {
return fName;
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Util.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Util.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/learner/tools/Util.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -15,6 +15,7 @@
public static final boolean PRINT_STATS = true;
public static final String DRL_DIRECTORY = "src/main/rules/";
+ public static final int NUM_TREES = 10;
/*
public static final boolean DEBUG = false;
public static final boolean DEBUG_TEST = false;
@@ -25,7 +26,7 @@
public static final boolean DEBUG_DIST = false;
public static final boolean DEBUG_DECISION_TREE = false;
*/
- public static int MAX_NUM_RULES = 10;
+ public static int MAX_NUM_RULES = 1000000;
public static boolean ONLY_ACTIVE_RULES = true; /* TODO into global settings */
public static boolean SORT_RULES_BY_RANK = true;
@@ -33,6 +34,8 @@
private static Random BAGGING = new Random(System.currentTimeMillis());
//public static String log_file = "testing.log";
+ public static double TRAINING_RATIO = 1.0, TESTING_RATIO = 0.0;;
+ public static double DEFAULT_TRAINING_RATIO = 0.84, DEFAULT_TESTING_RATIO= 0.16;
public static String ntimes(String s,int n){
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/ObjectSink.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -24,7 +24,7 @@
* Receiver of propagated <code>FactHandleImpl</code>s from a
* <code>ObjectSource</code>.
*
- * @see ObectSource
+ * @see ObjectSource
*
* @author <a href="mailto:mark.proctor at jboss.com">Mark Proctor</a>
* @author <a href="mailto:bob at werken.com">Bob McWhirter</a>
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/Rete.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/Rete.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/main/java/org/drools/reteoo/Rete.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -41,10 +41,10 @@
* the Rete node where it propagates to all matching ObjectTypeNodes.
*
* The first time an instance of a Class type is asserted it does a full
- * iteration of all ObjectTyppeNodes looking for matches, any matches are
+ * iteration of all ObjectTypeNodes looking for matches, any matches are
* then cached in a HashMap which is used for future assertions.
*
- * While Rete extends ObjectSource nad implements ObjectSink it nulls the
+ * While Rete extends ObjectSource and implements ObjectSink it nulls the
* methods attach(), remove() and updateNewNode() as this is the root node
* they are no applicable
*
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/StructuredTestFactory.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/StructuredTestFactory.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-core/src/test/java/org/drools/learner/StructuredTestFactory.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -30,12 +30,12 @@
if (BUILD_TREE) {
single_builder.build(mem, learner);//obj_class, target_attr, working_attr
- SingleTreeTester tester = new SingleTreeTester(learner.getTree());
+ SingleTreeTester tester = new SingleTreeTester(single_builder.getTree());
//tester.printStats(tester.test(mem.getClassInstances()), Util.DRL_DIRECTORY + executionSignature);
//Tester.test(c45, mem.getClassInstances());
- learner.getTree().setSignature(executionSignature);
+ single_builder.getTree().setSignature(executionSignature);
}
- return learner.getTree();
+ return single_builder.getTree();
}
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExample.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/CarExample.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -13,6 +13,8 @@
import org.drools.learner.builder.DecisionTreeBuilder;
import org.drools.learner.builder.DecisionTreeFactory;
import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
public class CarExample {
@@ -37,7 +39,7 @@
}
// instantiate a learner for a specific object class and pass session to train
- DecisionTree decision_tree; int ALGO = 600;
+ DecisionTree decision_tree; int ALGO = 121;
/*
* Single 1xx, Bag 2xx, Boost 3xx
* ID3 x1x, C45 x2x
@@ -71,18 +73,27 @@
// case 3:
// decision_tree = DecisionTreeFactory.createGlobal2(session, obj_class);
// break;
- case 400:
- decision_tree = DecisionTreeFactory.createSingleCVPrunnedC45E(session, obj_class);
+// case 400:
+// decision_tree = DecisionTreeFactory.createSingleCVPrunnedC45E(session, obj_class);
+// break;
+// case 500:
+// decision_tree = DecisionTreeFactory.createSingleC45E_Stopped(session, obj_class);
+// break;
+// case 600:
+// decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
+// break;
+// case 601:
+// decision_tree = DecisionTreeFactory.createSingleTestPrunnedStopC45E(session, obj_class);
+// break;
+ case 700:
+ decision_tree = DecisionTreeFactory.createSingleC45E_StoppedTest(session, obj_class);
break;
- case 500:
- decision_tree = DecisionTreeFactory.createSingleC45E_StoppingCriteria(session, obj_class);
+ case 701:
+ decision_tree = DecisionTreeFactory.createBaggC45E_StoppedTest(session, obj_class);
break;
- case 600:
- decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
+ case 702:
+ decision_tree = DecisionTreeFactory.createBoostedC45E_StopTest(session, obj_class);
break;
- case 601:
- decision_tree = DecisionTreeFactory.createSingleTestPrunnedStopC45E(session, obj_class);
- break;
default:
decision_tree = DecisionTreeFactory.createSingleID3E(session, obj_class);
@@ -102,6 +113,10 @@
*/
session.fireAllRules();
+
+ ReteStatistics stats = new ReteStatistics(ruleBase);
+ stats.calculateNumberOfNodes();
+ stats.print(Util.DRL_DIRECTORY +decision_tree.getSignature());
//logger.writeToDisk();
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfC45ExampleFromDrl.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfC45ExampleFromDrl.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfC45ExampleFromDrl.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -8,10 +8,21 @@
import org.drools.RuleBaseFactory;
import org.drools.StatefulSession;
import org.drools.audit.WorkingMemoryFileLogger;
+import org.drools.common.AbstractRuleBase;
import org.drools.compiler.PackageBuilder;
import org.drools.event.DebugAgendaEventListener;
import org.drools.event.DebugWorkingMemoryEventListener;
import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.reteoo.InitialFactImpl;
+import org.drools.reteoo.LeftTupleSink;
+import org.drools.reteoo.LeftTupleSource;
+import org.drools.reteoo.ObjectSink;
+import org.drools.reteoo.ObjectSource;
+import org.drools.reteoo.ObjectTypeNode;
+import org.drools.reteoo.Rete;
+import org.drools.reteoo.ReteooRuleBase;
+import org.drools.reteoo.RuleTerminalNode;
import org.drools.rule.Package;
public class GolfC45ExampleFromDrl {
@@ -19,7 +30,7 @@
public static final void main(final String[] args) throws Exception {
//read in the source
//final Reader source = new InputStreamReader( HelloWorldExample.class.getResourceAsStream( "HelloWorld.drl" ) );
- final Reader source = new InputStreamReader( Golf.class.getResourceAsStream( "golf2.drl" ) );
+ final Reader source = new InputStreamReader( Golf.class.getResourceAsStream( "golf.drl" ) );
final PackageBuilder builder = new PackageBuilder();
@@ -38,6 +49,8 @@
//add the package to a rulebase (deploy the rule package).
final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
ruleBase.addPackage( pkg );
+
+
final StatefulSession session = ruleBase.newStatefulSession();
@@ -55,10 +68,13 @@
}
session.fireAllRules();
-
- logger.writeToDisk();
-
+ ReteStatistics stats = new ReteStatistics(ruleBase);
+ stats.calculateNumberOfNodes();
+
+ logger.writeToDisk();
+
session.dispose();
}
+
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfExample.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/GolfExample.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -12,6 +12,8 @@
import org.drools.learner.DecisionTree;
import org.drools.learner.builder.DecisionTreeFactory;
import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
public class GolfExample {
@@ -40,7 +42,7 @@
session.insert(r);
}
- DecisionTree decision_tree; int ALGO = 600;
+ DecisionTree decision_tree; int ALGO = 121;
/*
* Single 1xx, Bag 2xx, Boost 3xx
* ID3 x1x, C45 x2x
@@ -74,15 +76,15 @@
// case 3:
// decision_tree = DecisionTreeFactory.createGlobal2(session, obj_class);
// break;
- case 400:
- decision_tree = DecisionTreeFactory.createSingleCVPrunnedC45E(session, obj_class);
- break;
+// case 400:
+// // decision_tree = DecisionTreeFactory.createSingleCVPrunnedC45E(session, obj_class);
+// break;
case 500:
- decision_tree = DecisionTreeFactory.createSingleC45E_StoppingCriteria(session, obj_class);
+ decision_tree = DecisionTreeFactory.createSingleC45E_Stopped(session, obj_class);
break;
- case 600:
- decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
- break;
+// case 600:
+// // decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
+// break;
default:
decision_tree = DecisionTreeFactory.createSingleID3E(session, obj_class);
@@ -102,6 +104,9 @@
long end_time = System.currentTimeMillis();
System.out.println("Total time="+ (end_time-start_time));
+ ReteStatistics stats = new ReteStatistics(ruleBase);
+ stats.calculateNumberOfNodes();
+ stats.print(Util.DRL_DIRECTORY + decision_tree.getSignature());
logger.writeToDisk();
session.dispose();
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/NurseryExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/NurseryExample.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/NurseryExample.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -12,6 +12,8 @@
import org.drools.learner.DecisionTree;
import org.drools.learner.builder.DecisionTreeFactory;
import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
public class NurseryExample {
@@ -37,13 +39,50 @@
}
// instantiate a learner for a specific object class and pass session to train
- //Learner learner = LearnerFactory.createID3(session, obj_class);
- DecisionTree dt_builder = DecisionTreeFactory.createBagC45E(session, obj_class);
+ DecisionTree decision_tree; int ALGO = 111;
+ /*
+ * Single 1xx, Bag 2xx, Boost 3xx
+ * ID3 x1x, C45 x2x
+ * Entropy xx1, Gain xx2
+ */
+ switch (ALGO) {
+ case 111:
+ decision_tree = DecisionTreeFactory.createSingleID3E(session, obj_class);
+ break;
+ case 112:
+ decision_tree = DecisionTreeFactory.createSingleID3G(session, obj_class);
+ break;
+ case 121:
+ decision_tree = DecisionTreeFactory.createSingleC45E(session, obj_class);
+ break;
+ case 122:
+ decision_tree = DecisionTreeFactory.createSingleC45G(session, obj_class);
+ break;
+ case 221:
+ decision_tree = DecisionTreeFactory.createBagC45E(session, obj_class);
+ break;
+ case 222:
+ decision_tree = DecisionTreeFactory.createBagC45G(session, obj_class);
+ break;
+ case 321:
+ decision_tree = DecisionTreeFactory.createBoostedC45E(session, obj_class);
+ break;
+ case 322:
+ decision_tree = DecisionTreeFactory.createBoostedC45G(session, obj_class);
+ break;
+// case 3:
+// decision_tree = DecisionTreeFactory.createGlobal2(session, obj_class);
+// break;
+ default:
+ decision_tree = DecisionTreeFactory.createSingleID3E(session, obj_class);
+ }
+
final PackageBuilder builder = new PackageBuilder();
//this wil generate the rules, then parse and compile in one step
- builder.addPackageFromTree( dt_builder );
+ builder.addPackageFromTree( decision_tree );
ruleBase.addPackage( builder.getPackage() );
+ //System.exit(0);
/*
final Reader source = new InputStreamReader( HelloWorldExample.class.getResourceAsStream( "HelloWorld.drl" ) );
//get the compiled package (which is serializable)
@@ -54,6 +93,9 @@
session.fireAllRules();
+ ReteStatistics stats = new ReteStatistics(ruleBase);
+ stats.calculateNumberOfNodes();
+ stats.print(Util.DRL_DIRECTORY + decision_tree.getSignature());
logger.writeToDisk();
session.dispose();
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/Poker.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/Poker.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/Poker.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -3,7 +3,7 @@
import org.drools.learner.tools.ClassAnnotation;
import org.drools.learner.tools.FieldAnnotation;
- at ClassAnnotation(label_element = "getPoker_hand")
+ at ClassAnnotation(label_element = "getLabel")
public class Poker {
@FieldAnnotation(readingSeq = 0)
private int s1; // 'Suit of card #1': Ordinal (1-4) representing {Hearts, Spades, Diamonds, Clubs}
@@ -30,7 +30,7 @@
@FieldAnnotation(readingSeq = 9, discrete=false)
private int c5; // 'Rank of card #5': Numerical (1-13) representing (Ace, 2, 3, ... , Queen, King)
- @FieldAnnotation(readingSeq = 10, ignore = true)
+ @FieldAnnotation(readingSeq = 10, ignore = true)//target=true)
private int poker_hand;
/*
*0: Nothing in hand; not a recognized poker hand
@@ -50,7 +50,7 @@
}
public boolean getLabel() {
- return poker_hand>=4;
+ return poker_hand>=5;
}
public int getS1() {
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExample.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExample.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -1,5 +1,6 @@
package org.drools.examples.learner;
+import java.util.ArrayList;
import java.util.List;
import org.drools.RuleBase;
@@ -7,8 +8,12 @@
import org.drools.StatefulSession;
import org.drools.compiler.PackageBuilder;
import org.drools.learner.DecisionTree;
+import org.drools.learner.StatsPrinter;
import org.drools.learner.builder.DecisionTreeFactory;
+import org.drools.learner.eval.stopping.StoppingCriterion;
import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
public class PokerExample {
@@ -28,15 +33,22 @@
// final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( session );
// logger.setFileName( "log/poker" );
- String inputFile = new String("data/poker/poker-hand-training-true.data.txt");
+ //String inputFile = new String("data/poker/poker-hand-training-true.data.txt");
+ String inputFile = new String("data/poker/poker-train.txt");
Class<?> obj_class = Poker.class;
List<Object> facts = ObjectFactory.getObjects(obj_class, inputFile);
for (Object r : facts) {
session.insert(r);
}
+
+// final StatefulSession test_session = ruleBase.newStatefulSession();
+// List<Object> test_facts = ObjectFactory.getObjects(obj_class, new String("data/poker/poker-hand-testing.data.txt"));
+// for (Object r : test_facts) {
+// test_session.insert(r);
+// }
// instantiate a learner for a specific object class and pass session to train
- DecisionTree decision_tree; int ALGO = 121;
+ DecisionTree decision_tree; int ALGO = 700;
/*
* Single 1xx, Bag 2xx, Boost 3xx
* ID3 x1x, C45 x2x
@@ -70,6 +82,30 @@
// case 3:
// decision_tree = DecisionTreeFactory.createGlobal2(session, obj_class);
// break;
+ case 400:
+ decision_tree = DecisionTreeFactory.createSingleC45E_Stopped(session, obj_class);
+ break;
+ case 600:
+ decision_tree = DecisionTreeFactory.createSingleTestPrunnedC45E(session, obj_class);
+ break;
+ case 700:
+ decision_tree = DecisionTreeFactory.createSingleC45E_Test(session, obj_class);
+ break;
+ case 701:
+ decision_tree = DecisionTreeFactory.createBaggC45E_Test(session, obj_class);
+ break;
+ case 702:
+ decision_tree = DecisionTreeFactory.createBoostedC45E_Test(session, obj_class);
+ break;
+ case 710:
+ decision_tree = DecisionTreeFactory.createSingleC45E_StoppedTest(session, obj_class);
+ break;
+ case 711:
+ decision_tree = DecisionTreeFactory.createBaggC45E_StoppedTest(session, obj_class);
+ break;
+ case 712:
+ decision_tree = DecisionTreeFactory.createBoostedC45E_StopTest(session, obj_class);
+ break;
default:
decision_tree = DecisionTreeFactory.createSingleID3E(session, obj_class);
@@ -87,10 +123,14 @@
session.fireAllRules();
long end_time = System.currentTimeMillis();
System.out.println("Total time="+ (end_time-start_time));
-
-// logger.writeToDisk();
+ ReteStatistics stats = new ReteStatistics(ruleBase);
+ stats.calculateNumberOfNodes();
+ stats.print(Util.DRL_DIRECTORY + decision_tree.getSignature());
+ //logger.writeToDisk();
session.dispose();
}
+
+
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExampleFromDrl.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExampleFromDrl.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/PokerExampleFromDrl.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -12,6 +12,7 @@
import org.drools.event.DebugAgendaEventListener;
import org.drools.event.DebugWorkingMemoryEventListener;
import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
import org.drools.rule.Package;
public class PokerExampleFromDrl {
@@ -19,7 +20,7 @@
public static final void main(final String[] args) throws Exception {
//read in the source
//final Reader source = new InputStreamReader( HelloWorldExample.class.getResourceAsStream( "HelloWorld.drl" ) );
- final Reader source = new InputStreamReader( Restaurant.class.getResourceAsStream( "poker_c45_bag.drl" ) );
+ final Reader source = new InputStreamReader( Restaurant.class.getResourceAsStream( "poker_c45_one.drl" ) );
final PackageBuilder builder = new PackageBuilder();
@@ -41,23 +42,25 @@
final StatefulSession session = ruleBase.newStatefulSession();
- session.addEventListener( new DebugAgendaEventListener() );
- session.addEventListener( new DebugWorkingMemoryEventListener() );
-
- final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( session );
- logger.setFileName( "log/poker_c45_bag_fromdrl" );
+// session.addEventListener( new DebugAgendaEventListener() );
+// session.addEventListener( new DebugWorkingMemoryEventListener() );
+//
+// final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( session );
+// logger.setFileName( "log/poker_c45_bag_fromdrl" );
String inputFile = new String("data/poker/poker-hand-training-true.data.txt");
Class<?> obj_class = Poker.class;
- List<Object> facts = ObjectFactory.getObjects(obj_class, inputFile);
- for (Object r : facts) {
- session.insert(r);
- }
+// List<Object> facts = ObjectFactory.getObjects(obj_class, inputFile);
+// for (Object r : facts) {
+// session.insert(r);
+// }
- session.fireAllRules();
+ //session.fireAllRules();
+ ReteStatistics stats = new ReteStatistics(ruleBase);
+ stats.calculateNumberOfNodes();
+ stats.print();
+// logger.writeToDisk();
- logger.writeToDisk();
-
session.dispose();
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/RestaurantExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/RestaurantExample.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/RestaurantExample.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -12,6 +12,8 @@
import org.drools.event.DebugWorkingMemoryEventListener;
import org.drools.learner.DecisionTree;
import org.drools.learner.builder.DecisionTreeFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
// Hello World for Learner
public class RestaurantExample {
@@ -91,6 +93,9 @@
session.fireAllRules();
+ ReteStatistics stats = new ReteStatistics(ruleBase);
+ stats.calculateNumberOfNodes();
+ stats.print(Util.DRL_DIRECTORY + decision_tree.getSignature());
logger.writeToDisk();
session.dispose();
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingClasses.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingClasses.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingClasses.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -5,7 +5,7 @@
public class ShoppingClasses {
public static class Customer {
private String name;
-
+ @FieldAnnotation(discrete = false)
private int discount;
@FieldAnnotation(target = true)
@@ -16,6 +16,9 @@
this.name = name;
this.discount = discount;
}
+ public void setName(String _name) {
+ name = _name;
+ }
public String getName() {
return name;
@@ -36,6 +39,7 @@
public void setDiscount(int discount) {
this.discount = discount;
}
+
}
@@ -44,7 +48,20 @@
private Dress skirt;
// attribute 1
private double salary;
+ public Dress getSkirt() {
+ return skirt;
+ }
+ public void setSkirt(Dress skirt) {
+ this.skirt = skirt;
+ }
+ public double getSalary() {
+ return salary;
+ }
+ public void setSalary(double salary) {
+ this.salary = salary;
+ }
+
}
// target object
@@ -52,6 +69,20 @@
double color;
// target attribute
String value;//classification valuable, normal, cheap
+ public double getColor() {
+ return color;
+ }
+ public void setColor(double color) {
+ this.color = color;
+ }
+ public String getValue() {
+ return value;
+ }
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+
}
public static class Discount {
@@ -71,7 +102,16 @@
public int getAmount() {
return amount;
}
+
+ public void setCustomer(Customer customer) {
+ this.customer = customer;
+ }
+
+ public void setAmount(int amount) {
+ this.amount = amount;
+ }
+
}
public static class Product {
@@ -92,7 +132,15 @@
return price;
}
+ public void setName(String _name) {
+ name = _name;
+ }
+ public void setPrice(float _price) {
+ price = _price;
+ }
+
+
}
public static class Purchase {
@@ -112,5 +160,13 @@
public Product getProduct() {
return product;
}
+ public void setCustomer(Customer _customer) {
+ customer = _customer;
+ }
+
+ public void setProduct(Product _product) {
+ product = _product;
+ }
+
}
}
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingExm.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingExm.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/ShoppingExm.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -88,23 +88,29 @@
public static Object[] getExamples1()
{
Customer mark = new Customer( "mark", 0 );
- mark.setEligible(false);
+ mark.setEligible(true);
Product shoes = new Product( "shoes", 60 );
Product hat = new Product( "hat", 60 );
Purchase purchase_x = new Purchase( mark, shoes );
Purchase purchase_y = new Purchase( mark, hat );
Customer gizil = new Customer( "gizil", 10 );
- mark.setEligible(true);
+ gizil.setEligible(true);
Customer daniel = new Customer( "daniel", 10 );
- mark.setEligible(false);
+ daniel.setEligible(true);
Customer krem = new Customer( "krem", 10 );
- mark.setEligible(true);
+ krem.setEligible(true);
Product skirt = new Product( "skirt", 60 );
Product robe = new Product( "robe", 60 );
Product hat2 = new Product( "hat2", 60 );
+ Customer pervin = new Customer( "pervin", 20 );
+ pervin.setEligible(false);
+
+ Customer ertug = new Customer( "ertug", 30 );
+ ertug.setEligible(false);
+
Object[] facts = {
mark,
shoes,
@@ -115,6 +121,11 @@
new Purchase( gizil, robe ),
new Purchase( daniel, shoes ),
new Purchase( daniel, hat2 ),
+ new Purchase( pervin, hat ),
+ new Purchase( pervin, hat2 ),
+ new Purchase( pervin, shoes ),
+ new Purchase( ertug, skirt ),
+ new Purchase( ertug, hat ),
new Purchase( krem, hat2 )};
return facts;
}
Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredCarExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredCarExample.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredCarExample.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,114 @@
+package org.drools.examples.learner;
+
+import java.util.List;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.audit.WorkingMemoryFileLogger;
+import org.drools.compiler.PackageBuilder;
+import org.drools.event.DebugAgendaEventListener;
+import org.drools.event.DebugWorkingMemoryEventListener;
+import org.drools.learner.DecisionTree;
+import org.drools.learner.builder.DecisionTreeBuilder;
+import org.drools.learner.builder.DecisionTreeFactory;
+import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
+
+import org.drools.examples.learner.structured_car.Car;
+
+public class StructuredCarExample {
+
+
+ public static final void main(final String[] args) throws Exception {
+ // my rule base
+ final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+
+ final StatefulSession session = ruleBase.newStatefulSession(); // LearningSession
+
+ //session.addEventListener( new DebugAgendaEventListener() );
+ //session.addEventListener( new DebugWorkingMemoryEventListener() );
+
+ //final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( session );
+ //logger.setFileName( "log/car" );
+
+ String inputFile = new String("data/car/car.data.txt");
+ Class<?> obj_class = Car.class;
+ List<Object> facts = ObjectFactory.insertStructuredObjects(obj_class, session, inputFile);
+// for (Object r : facts) {
+// session.insert(r);
+// }
+
+ // instantiate a learner for a specific object class and pass session to train
+ DecisionTree decision_tree; int ALGO = 121;
+ /*
+ * Single 1xx, Bag 2xx, Boost 3xx
+ * ID3 x1x, C45 x2x
+ * Entropy xx1, Gain xx2
+ */
+ switch (ALGO) {
+ case 111:
+ decision_tree = DecisionTreeFactory.createSingleID3E(session, obj_class);
+ break;
+ case 112:
+ decision_tree = DecisionTreeFactory.createSingleID3G(session, obj_class);
+ break;
+ case 121:
+ decision_tree = DecisionTreeFactory.createSingleC45E(session, obj_class);
+ break;
+ case 122:
+ decision_tree = DecisionTreeFactory.createSingleC45G(session, obj_class);
+ break;
+ case 221:
+ decision_tree = DecisionTreeFactory.createBagC45E(session, obj_class);
+ break;
+ case 222:
+ decision_tree = DecisionTreeFactory.createBagC45G(session, obj_class);
+ break;
+ case 321:
+ decision_tree = DecisionTreeFactory.createBoostedC45E(session, obj_class);
+ break;
+ case 322:
+ decision_tree = DecisionTreeFactory.createBoostedC45G(session, obj_class);
+ break;
+// case 3:
+// decision_tree = DecisionTreeFactory.createGlobal2(session, obj_class);
+// break;
+// case 400:
+// decision_tree = DecisionTreeFactory.createSingleCVPrunnedC45E(session, obj_class);
+// break;
+// case 500:
+// decision_tree = DecisionTreeFactory.createSingleC45E_Stopped(session, obj_class);
+// break;
+// case 600:
+// decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
+// break;
+// case 601:
+// decision_tree = DecisionTreeFactory.createSingleTestPrunnedStopC45E(session, obj_class);
+// break;
+ default:
+ decision_tree = DecisionTreeFactory.createSingleID3E(session, obj_class);
+
+ }
+
+ final PackageBuilder builder = new PackageBuilder();
+ //this wil generate the rules, then parse and compile in one step
+ builder.addPackageFromTree( decision_tree );
+ /*
+ * get the compiled package (which is serializable) from the builder
+ * add the package to a rulebase (deploy the rule package).
+ */
+ ruleBase.addPackage( builder.getPackage() );
+
+ session.fireAllRules();
+
+ //session.fireAllRules();
+ ReteStatistics stats = new ReteStatistics(ruleBase);
+ stats.calculateNumberOfNodes();
+ stats.print(Util.DRL_DIRECTORY + decision_tree.getSignature());
+ //logger.writeToDisk();
+
+ session.dispose();
+ }
+}
Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredCarExample.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredNurseryExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredNurseryExample.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredNurseryExample.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,114 @@
+package org.drools.examples.learner;
+
+import java.util.List;
+
+import org.drools.RuleBase;
+import org.drools.RuleBaseFactory;
+import org.drools.StatefulSession;
+import org.drools.audit.WorkingMemoryFileLogger;
+import org.drools.compiler.PackageBuilder;
+import org.drools.event.DebugAgendaEventListener;
+import org.drools.event.DebugWorkingMemoryEventListener;
+import org.drools.learner.DecisionTree;
+import org.drools.learner.builder.DecisionTreeBuilder;
+import org.drools.learner.builder.DecisionTreeFactory;
+import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
+
+import org.drools.examples.learner.structured_nursery.Nursery;;
+
+public class StructuredNurseryExample {
+
+
+ public static final void main(final String[] args) throws Exception {
+ // my rule base
+ final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
+
+ final StatefulSession session = ruleBase.newStatefulSession(); // LearningSession
+
+ //session.addEventListener( new DebugAgendaEventListener() );
+ //session.addEventListener( new DebugWorkingMemoryEventListener() );
+
+ //final WorkingMemoryFileLogger logger = new WorkingMemoryFileLogger( session );
+ //logger.setFileName( "log/car" );
+
+ String inputFile = new String("data/nursery/nursery.data.txt");
+ Class<?> obj_class = Nursery.class;
+ List<Object> facts = ObjectFactory.insertStructuredObjects(obj_class, session, inputFile);
+// for (Object r : facts) {
+// session.insert(r);
+// }
+
+ // instantiate a learner for a specific object class and pass session to train
+ DecisionTree decision_tree; int ALGO = 121;
+ /*
+ * Single 1xx, Bag 2xx, Boost 3xx
+ * ID3 x1x, C45 x2x
+ * Entropy xx1, Gain xx2
+ */
+ switch (ALGO) {
+ case 111:
+ decision_tree = DecisionTreeFactory.createSingleID3E(session, obj_class);
+ break;
+ case 112:
+ decision_tree = DecisionTreeFactory.createSingleID3G(session, obj_class);
+ break;
+ case 121:
+ decision_tree = DecisionTreeFactory.createSingleC45E(session, obj_class);
+ break;
+ case 122:
+ decision_tree = DecisionTreeFactory.createSingleC45G(session, obj_class);
+ break;
+ case 221:
+ decision_tree = DecisionTreeFactory.createBagC45E(session, obj_class);
+ break;
+ case 222:
+ decision_tree = DecisionTreeFactory.createBagC45G(session, obj_class);
+ break;
+ case 321:
+ decision_tree = DecisionTreeFactory.createBoostedC45E(session, obj_class);
+ break;
+ case 322:
+ decision_tree = DecisionTreeFactory.createBoostedC45G(session, obj_class);
+ break;
+// case 3:
+// decision_tree = DecisionTreeFactory.createGlobal2(session, obj_class);
+// break;
+// case 400:
+// decision_tree = DecisionTreeFactory.createSingleCVPrunnedC45E(session, obj_class);
+// break;
+// case 500:
+// decision_tree = DecisionTreeFactory.createSingleC45E_Stopped(session, obj_class);
+// break;
+// case 600:
+// decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
+// break;
+// case 601:
+// decision_tree = DecisionTreeFactory.createSingleTestPrunnedStopC45E(session, obj_class);
+// break;
+ default:
+ decision_tree = DecisionTreeFactory.createSingleID3E(session, obj_class);
+
+ }
+
+ final PackageBuilder builder = new PackageBuilder();
+ //this wil generate the rules, then parse and compile in one step
+ builder.addPackageFromTree( decision_tree );
+ /*
+ * get the compiled package (which is serializable) from the builder
+ * add the package to a rulebase (deploy the rule package).
+ */
+// ruleBase.addPackage( builder.getPackage() );
+//
+// session.fireAllRules();
+//
+// //session.fireAllRules();
+// ReteStatistics stats = new ReteStatistics(ruleBase);
+// stats.calculateNumberOfNodes();
+// stats.print(Util.DRL_DIRECTORY + decision_tree.getSignature());
+// //logger.writeToDisk();
+
+ session.dispose();
+ }
+}
Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/StructuredNurseryExample.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/TriangleExample.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/TriangleExample.java 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/TriangleExample.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -9,6 +9,8 @@
import org.drools.learner.DecisionTree;
import org.drools.learner.builder.DecisionTreeFactory;
import org.drools.learner.tools.ObjectFactory;
+import org.drools.learner.tools.ReteStatistics;
+import org.drools.learner.tools.Util;
public class TriangleExample {
@@ -36,7 +38,7 @@
}
// instantiate a learner for a specific object class and pass session to train
- DecisionTree decision_tree; int ALGO = 600;
+ DecisionTree decision_tree; int ALGO = 702;
/*
* Single 1xx, Bag 2xx, Boost 3xx
* ID3 x1x, C45 x2x
@@ -68,14 +70,23 @@
decision_tree = DecisionTreeFactory.createBoostedC45G(session, obj_class);
break;
case 500:
- decision_tree = DecisionTreeFactory.createSingleC45E_StoppingCriteria(session, obj_class);
+ decision_tree = DecisionTreeFactory.createSingleC45E_Stopped(session, obj_class);
break;
- case 600:
- decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
- break;
+// case 600:
+// decision_tree = DecisionTreeFactory.createSingleCrossPrunnedStopC45E(session, obj_class);
+// break;
// case 3:
// decision_tree = DecisionTreeFactory.createGlobal2(session, obj_class);
// break;
+ case 700:
+ decision_tree = DecisionTreeFactory.createSingleC45E_StoppedTest(session, obj_class);
+ break;
+ case 701:
+ decision_tree = DecisionTreeFactory.createBaggC45E_StoppedTest(session, obj_class);
+ break;
+ case 702:
+ decision_tree = DecisionTreeFactory.createBoostedC45E_StopTest(session, obj_class);
+ break;
default:
decision_tree = DecisionTreeFactory.createSingleID3E(session, obj_class);
@@ -94,6 +105,10 @@
long end_time = System.currentTimeMillis();
System.out.println("Total time="+ (end_time-start_time));
+
+ ReteStatistics stats = new ReteStatistics(ruleBase);
+ stats.calculateNumberOfNodes();
+ stats.print( decision_tree.getSignature());
// logger.writeToDisk();
session.dispose();
Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Car.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Car.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Car.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,44 @@
+package org.drools.examples.learner.structured_car;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class Car {
+
+ private Price overall_price;
+ private Tech tech_char;
+
+ @FieldAnnotation(readingSeq = 6, target = true)
+ private String target; //"unacc", "acc", "good", "vgood"
+
+ public Car() {
+
+ }
+ public Price getOverall_price() {
+ return overall_price;
+ }
+
+ public void setOverall_price(Price overall_price) {
+ this.overall_price = overall_price;
+ }
+
+ public Tech getTech_char() {
+ return tech_char;
+ }
+
+ public void setTech_char(Tech tech_char) {
+ this.tech_char = tech_char;
+ }
+
+ public String getTarget() {
+ return target;
+ }
+
+ public void setTarget(String target) {
+ this.target = target;
+ }
+
+
+
+}
+
+
Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Car.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Comfort.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Comfort.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Comfort.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,42 @@
+package org.drools.examples.learner.structured_car;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class Comfort {
+ @FieldAnnotation(readingSeq = 2)
+ private String doors; //"2", "3", "4", "5more"
+ @FieldAnnotation(readingSeq = 3)
+ private String persons; //"2", "4", "more"
+ @FieldAnnotation(readingSeq = 4)
+ private String lug_boot; //"small", "med", "big"
+
+ public Comfort() {
+
+ }
+
+ public String getDoors() {
+ return doors;
+ }
+
+ public void setDoors(String doors) {
+ this.doors = doors;
+ }
+
+ public String getPersons() {
+ return persons;
+ }
+
+ public void setPersons(String persons) {
+ this.persons = persons;
+ }
+
+ public String getLug_boot() {
+ return lug_boot;
+ }
+
+ public void setLug_boot(String lug_boot) {
+ this.lug_boot = lug_boot;
+ }
+
+
+}
Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Comfort.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Price.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Price.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Price.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,32 @@
+package org.drools.examples.learner.structured_car;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class Price {
+
+ @FieldAnnotation(readingSeq = 0)
+ private String buying; //"vhigh", "high", "med", "low"
+ @FieldAnnotation(readingSeq = 1)
+ private String maint; //"vhigh", "high", "med", "low"
+
+ public Price() {
+
+ }
+
+ public String getBuying() {
+ return buying;
+ }
+
+ public void setBuying(String buying) {
+ this.buying = buying;
+ }
+
+ public String getMaint() {
+ return maint;
+ }
+
+ public void setMaint(String maint) {
+ this.maint = maint;
+ }
+
+}
Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Price.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Tech.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Tech.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Tech.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,33 @@
+package org.drools.examples.learner.structured_car;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class Tech {
+
+ private Comfort comfort;
+ @FieldAnnotation(readingSeq = 5)
+ private String safety; //"low", "med", "high"
+
+ public Tech() {
+
+ }
+
+ public Comfort getComfort() {
+ return comfort;
+ }
+
+ public void setComfort(Comfort comfort) {
+ this.comfort = comfort;
+ }
+
+ public String getSafety() {
+ return safety;
+ }
+
+ public void setSafety(String safety) {
+ this.safety = safety;
+ }
+
+
+
+}
Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_car/Tech.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Employ.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Employ.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Employ.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,31 @@
+package org.drools.examples.learner.structured_nursery;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class Employ {
+
+ @FieldAnnotation(readingSeq =0)
+ private String parents; //"usual","pretentious", "great_pret"
+ @FieldAnnotation(readingSeq =1)
+ private String has_nurs; //"proper","less_proper", "improper", "critical", "very_crit"
+
+
+ public Employ() {
+
+ }
+ public String getParents() {
+ return parents;
+ }
+ public void setParents(String parents) {
+ this.parents = parents;
+ }
+ public String getHas_nurs() {
+ return has_nurs;
+ }
+ public void setHas_nurs(String has_nurs) {
+ this.has_nurs = has_nurs;
+ }
+
+
+
+}
Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Employ.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Nursery.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Nursery.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Nursery.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,44 @@
+package org.drools.examples.learner.structured_nursery;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class Nursery {
+
+ @FieldAnnotation(readingSeq =8, target = true)
+ private String classnursery; //"not_recom", "recommend", "very_recom", "priority","spec_prior"
+
+ private Employ employ;
+ private StructFinan structFinance;
+ private SocHealth soc_health;
+
+ public Nursery() {
+
+ }
+ public String getClassnursery() {
+ return classnursery;
+ }
+ public void setClassnursery(String classnursery) {
+ this.classnursery = classnursery;
+ }
+ public Employ getEmploy() {
+ return employ;
+ }
+ public void setEmploy(Employ employ) {
+ this.employ = employ;
+ }
+
+ public StructFinan getStructFinance() {
+ return structFinance;
+ }
+ public void setStructFinance(StructFinan _structFinance) {
+ this.structFinance = _structFinance;
+ }
+ public SocHealth getSoc_health() {
+ return soc_health;
+ }
+ public void setSoc_health(SocHealth soc_health) {
+ this.soc_health = soc_health;
+ }
+
+
+}
Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Nursery.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/SocHealth.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/SocHealth.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/SocHealth.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,29 @@
+package org.drools.examples.learner.structured_nursery;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class SocHealth {
+
+ @FieldAnnotation(readingSeq =6)
+ private String social; //"nonprob","slightly_prob", "problematic"
+ @FieldAnnotation(readingSeq =7)
+ private String health; //"recommended","priority", "not_recom"
+
+ public SocHealth() {
+
+ }
+
+ public String getSocial() {
+ return social;
+ }
+ public void setSocial(String social) {
+ this.social = social;
+ }
+ public String getHealth() {
+ return health;
+ }
+ public void setHealth(String health) {
+ this.health = health;
+ }
+
+}
Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/SocHealth.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/StructFinan.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/StructFinan.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/StructFinan.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,37 @@
+package org.drools.examples.learner.structured_nursery;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class StructFinan {
+
+ private Structure struct;
+
+ @FieldAnnotation(readingSeq =4)
+ private String housing; //"convenient","less_conv", "critical"
+ @FieldAnnotation(readingSeq =5)
+ private String finance; //"convenient","inconv"
+
+ public StructFinan(){
+
+ }
+ public Structure getStruct() {
+ return struct;
+ }
+ public void setStruct(Structure structure) {
+ this.struct = structure;
+ }
+ public String getHousing() {
+ return housing;
+ }
+ public void setHousing(String housing) {
+ this.housing = housing;
+ }
+ public String getFinance() {
+ return finance;
+ }
+ public void setFinance(String finance) {
+ this.finance = finance;
+ }
+
+
+}
Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/StructFinan.java
___________________________________________________________________
Name: svn:eol-style
+ native
Added: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Structure.java
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Structure.java (rev 0)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Structure.java 2008-08-20 11:26:07 UTC (rev 21640)
@@ -0,0 +1,28 @@
+package org.drools.examples.learner.structured_nursery;
+
+import org.drools.learner.tools.FieldAnnotation;
+
+public class Structure {
+
+ @FieldAnnotation(readingSeq =2)
+ private String children; //"1", "2", "3","more"
+ @FieldAnnotation(readingSeq =3)
+ private String form; //"complete","completed", "incomplete", "foster"
+ public Structure() {
+
+ }
+
+ public String getChildren() {
+ return children;
+ }
+ public void setChildren(String children) {
+ this.children = children;
+ }
+ public String getForm() {
+ return form;
+ }
+ public void setForm(String form) {
+ this.form = form;
+ }
+
+}
Property changes on: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/java/org/drools/examples/learner/structured_nursery/Structure.java
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.drl
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.drl 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.drl 2008-08-20 11:26:07 UTC (rev 21640)
@@ -2,75 +2,1321 @@
import org.drools.examples.learner.Car
-rule "#131 target= unacc classifying 576.0 num of facts with rank:0.3333333333333333"
+rule "#132 target= unacc classifying 576.0 num of facts with rank:0.3333333333333333"
when
$car_0 : Car(safety == "low", $target_label : target )
then
System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
end
-rule "#59 target= unacc classifying 192.0 num of facts with rank:0.1111111111111111"
+rule "#60 target= unacc classifying 192.0 num of facts with rank:0.1111111111111111"
when
$car_0 : Car(safety == "med", persons == "2", $target_label : target )
then
System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
end
-rule "#140 target= unacc classifying 192.0 num of facts with rank:0.1111111111111111"
+rule "#141 target= unacc classifying 192.0 num of facts with rank:0.1111111111111111"
when
$car_0 : Car(safety == "high", persons == "2", $target_label : target )
then
System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
end
-rule "#145 target= unacc classifying 16.0 num of facts with rank:0.009259259259259259"
+rule "#146 target= unacc classifying 16.0 num of facts with rank:0.009259259259259259"
when
$car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "small", $target_label : target )
then
System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
end
-rule "#172 target= unacc classifying 16.0 num of facts with rank:0.009259259259259259"
+rule "#173 target= unacc classifying 16.0 num of facts with rank:0.009259259259259259"
when
$car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "small", $target_label : target )
then
System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
end
-rule "#8 target= unacc classifying 12.0 num of facts with rank:0.006944444444444444"
+rule "#9 target= unacc classifying 12.0 num of facts with rank:0.006944444444444444"
when
$car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "vhigh", $target_label : target )
then
System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
end
-rule "#20 target= acc classifying 12.0 num of facts with rank:0.006944444444444444"
+rule "#21 target= acc classifying 12.0 num of facts with rank:0.006944444444444444"
when
$car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "high", $target_label : target )
then
System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
end
-rule "#34 target= acc classifying 12.0 num of facts with rank:0.006944444444444444"
+rule "#35 target= acc classifying 12.0 num of facts with rank:0.006944444444444444"
when
$car_0 : Car(safety == "high", persons == "4", buying == "med", maint == "vhigh", $target_label : target )
then
System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
end
-rule "#41 target= unacc classifying 12.0 num of facts with rank:0.006944444444444444"
+rule "#42 target= unacc classifying 12.0 num of facts with rank:0.006944444444444444"
when
$car_0 : Car(safety == "med", persons == "more", buying == "vhigh", maint == "vhigh", $target_label : target )
then
System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
end
-rule "#43 target= unacc classifying 12.0 num of facts with rank:0.006944444444444444"
+rule "#44 target= unacc classifying 12.0 num of facts with rank:0.006944444444444444"
when
$car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "high", $target_label : target )
then
System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
end
-//THE END: Total number of facts correctly classified= 1052 over 1728.0
-//with 10 number of rules over 10 total number of rules
+rule "#84 target= unacc classifying 12.0 num of facts with rank:0.006944444444444444"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "vhigh", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#93 target= unacc classifying 12.0 num of facts with rank:0.006944444444444444"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "high", maint == "vhigh", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#102 target= acc classifying 12.0 num of facts with rank:0.006944444444444444"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "high", maint == "low", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#117 target= acc classifying 12.0 num of facts with rank:0.006944444444444444"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "med", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#123 target= acc classifying 12.0 num of facts with rank:0.006944444444444444"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "vhigh", maint == "med", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#149 target= acc classifying 12.0 num of facts with rank:0.006944444444444444"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "vhigh", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#155 target= acc classifying 12.0 num of facts with rank:0.006944444444444444"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "med", maint == "high", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#157 target= acc classifying 12.0 num of facts with rank:0.006944444444444444"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "vhigh", maint == "low", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#162 target= acc classifying 12.0 num of facts with rank:0.006944444444444444"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "high", maint == "high", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#169 target= acc classifying 12.0 num of facts with rank:0.006944444444444444"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "high", maint == "med", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#180 target= unacc classifying 12.0 num of facts with rank:0.006944444444444444"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "vhigh", maint == "high", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#2 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "vhigh", maint == "low", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#3 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "vhigh", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#8 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "vhigh", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#11 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "big", maint == "vhigh", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#12 target= good classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "med", maint == "low", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#17 target= good classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "low", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#23 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "high", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#32 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "big", maint == "med", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#33 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "vhigh", maint == "med", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#34 target= good classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "med", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#36 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "2", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#40 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "vhigh", maint == "low", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#48 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "low", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#50 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "vhigh", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#52 target= good classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "med", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#54 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#56 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "vhigh", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#61 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "big", maint == "high", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#64 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "vhigh", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#70 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "med", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#74 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "big", maint == "low", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#76 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "low", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#77 target= vgood classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "low", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#78 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "big", maint == "med", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#79 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "med", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#82 target= good classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "med", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#83 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "med", doors == "2", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#89 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "vhigh", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#92 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "low", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#104 target= vgood classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "low", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#109 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "big", maint == "high", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#112 target= good classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "low", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#116 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "high", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#120 target= vgood classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "med", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#121 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "vhigh", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#122 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "med", maint == "med", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#124 target= good classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "low", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#128 target= vgood classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "high", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#129 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "vhigh", maint == "med", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#133 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "big", maint == "low", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#134 target= vgood classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "med", maint == "low", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#135 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "high", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#143 target= vgood classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "med", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#144 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "vhigh", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#145 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "med", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#151 target= vgood classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "low", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#156 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "big", maint == "vhigh", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#158 target= good classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "low", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#163 target= acc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "high", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#165 target= vgood classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "med", maint == "med", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#168 target= good classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "low", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#172 target= vgood classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "high", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#179 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "high", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#182 target= vgood classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "med", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#185 target= unacc classifying 4.0 num of facts with rank:0.0023148148148148147"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "low", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#1 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "high", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#6 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "high", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#10 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#15 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "high", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#18 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "vhigh", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#31 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "high", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#38 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "med", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#39 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "low", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#43 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "low", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#51 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#55 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "low", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#58 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "high", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#63 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "med", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#66 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "med", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#68 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "vhigh", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#81 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "low", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#90 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "high", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#91 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "low", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#98 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "med", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#101 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "high", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#103 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "low", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#108 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#114 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "high", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#136 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "vhigh", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#140 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "med", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#153 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "high", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#161 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "high", maint == "med", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#171 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "vhigh", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#187 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "vhigh", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#188 target= acc classifying 3.0 num of facts with rank:0.001736111111111111"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "med", maint == "vhigh", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#4 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "med", lug_boot == "med", doors == "2", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#5 target= vgood classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "low", lug_boot == "med", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#7 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "med", lug_boot == "small", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#13 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "high", doors == "2", lug_boot == "med", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#14 target= good classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "low", lug_boot == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#16 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "4", maint == "high", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#19 target= good classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "med", lug_boot == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#20 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "5more", maint == "high", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#22 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "4", maint == "med", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#24 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "vhigh", lug_boot == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#25 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "med", doors == "3", maint == "vhigh", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#26 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "med", lug_boot == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#27 target= vgood classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "high", lug_boot == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#28 target= vgood classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "med", lug_boot == "med", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#29 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "med", doors == "3", maint == "high", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#30 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "low", lug_boot == "small", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#37 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "high", lug_boot == "small", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#41 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "low", lug_boot == "med", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#45 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "low", lug_boot == "med", doors == "2", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#46 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "4", maint == "vhigh", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#47 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "high", lug_boot == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#49 target= vgood classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "low", lug_boot == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#53 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "5more", maint == "vhigh", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#57 target= good classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "med", lug_boot == "med", doors == "2", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#59 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "5more", maint == "med", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#62 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "low", lug_boot == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#65 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "med", lug_boot == "small", doors == "2", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#67 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "low", doors == "2", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#69 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "high", lug_boot == "med", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#71 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "vhigh", lug_boot == "med", doors == "2", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#72 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "high", doors == "2", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#73 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "med", doors == "2", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#75 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "med", lug_boot == "med", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#80 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "low", lug_boot == "small", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#85 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "high", lug_boot == "small", doors == "2", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#86 target= good classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "low", lug_boot == "med", doors == "2", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#87 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "med", doors == "2", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#88 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "low", doors == "2", lug_boot == "med", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#94 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "vhigh", doors == "2", lug_boot == "med", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#95 target= vgood classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "med", lug_boot == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#96 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "vhigh", maint == "low", doors == "2", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#97 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "med", lug_boot == "med", doors == "2", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#99 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "med", doors == "2", lug_boot == "med", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#100 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "high", lug_boot == "med", doors == "2", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#105 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "med", doors == "3", maint == "med", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#106 target= good classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "low", lug_boot == "small", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#107 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "high", lug_boot == "med", doors == "2", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#110 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "low", lug_boot == "med", doors == "2", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#111 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "low", lug_boot == "med", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#113 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "med", lug_boot == "small", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#115 target= good classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "med", lug_boot == "med", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#118 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "vhigh", lug_boot == "med", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#119 target= vgood classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "low", lug_boot == "med", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#125 target= good classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "low", lug_boot == "med", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#126 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "vhigh", lug_boot == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#127 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "med", maint == "high", lug_boot == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#130 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "4", maint == "low", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#131 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "low", lug_boot == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#137 target= good classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "med", lug_boot == "small", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#138 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "med", lug_boot == "med", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#139 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "high", lug_boot == "med", doors == "3", maint == "low", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#142 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "vhigh", lug_boot == "med", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#147 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "low", lug_boot == "small", doors == "2", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+rule "#148 target= good classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "med", lug_boot == "med", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#150 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "med", lug_boot == "small", doors == "3", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#152 target= good classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "low", lug_boot == "small", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#154 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "high", lug_boot == "med", doors == "5more", maint == "low", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#159 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "high", lug_boot == "small", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#160 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "high", doors == "2", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#164 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "med", maint == "high", lug_boot == "med", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#166 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "vhigh", doors == "2", lug_boot == "big", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#167 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "more", buying == "low", maint == "low", lug_boot == "small", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#170 target= vgood classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "med", lug_boot == "med", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#174 target= good classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "med", lug_boot == "small", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#175 target= vgood classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "high", lug_boot == "med", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#176 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "vhigh", maint == "med", lug_boot == "med", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#177 target= good classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "med", persons == "4", buying == "low", maint == "low", lug_boot == "med", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#178 target= good classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "low", lug_boot == "small", doors == "5more", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#181 target= good classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "med", lug_boot == "small", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (good )");
+end
+
+rule "#183 target= acc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "high", lug_boot == "small", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (acc )");
+end
+
+rule "#184 target= vgood classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "4", buying == "low", maint == "high", lug_boot == "med", doors == "4", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (vgood )");
+end
+
+rule "#186 target= unacc classifying 1.0 num of facts with rank:5.787037037037037E-4"
+ when
+ $car_0 : Car(safety == "high", persons == "more", buying == "low", maint == "vhigh", doors == "2", lug_boot == "small", $target_label : target )
+ then
+ System.out.println("[target] Expected value (" + $target_label + "), Classified as (unacc )");
+end
+
+//THE END: Total number of facts correctly classified= 1576 over 1728.0
+//with 188 number of rules over 188 total number of rules
Modified: labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.stats
===================================================================
--- labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.stats 2008-08-20 09:04:59 UTC (rev 21639)
+++ labs/jbossrules/contrib/machinelearning/5.0/drools-examples/drools-examples-drl/src/main/rules/org/drools/examples/learner/car_c45_one.stats 2008-08-20 11:26:07 UTC (rev 21640)
@@ -1,4 +1,7 @@
TESTING results: incorrect 0
TESTING results: correct 1728
TESTING results: unknown 0
-TESTING results: Total Number 1728
\ No newline at end of file
+TESTING results: Total Number 1728
+ & OBJECT_TYPE_NODE & ALPHA_NODE & BETA_NODE & TERMINAL_NODE
+ & 1 & 278 & 0 & 188\\
+
More information about the jboss-svn-commits
mailing list