You may use the ClassMaker this way:
// ClassesMaker (double vMin, double vMax, int nClasses) ClassesMaker cm = new ClassesMaker (1, 10, 2); double w = cm.getClassWidth (); int index = cm.whichClass (3.2); double center = cm.getClassCenter (index);
The main method of ClassesMaker contains a test:
ClassesMaker vMin 1.0 vMax 10.0 nClasses 5 EPSILON 1.0E-5 classWidth 1.8 classes limits 1 2.8 4.6 6.4 8.2 10 class (1) 0 class (1.2) 0 class (5) 2 class (9) 4 class (10) 5 ClassesMaker vMin 2.0 vMax 10.0 nClasses 2 EPSILON 1.0E-5 classWidth 4.0 classes limits 2 6 10 cm.getClassWidth () 4.0 cm.whichClass (6.1) 1 cm.getClassCenter (1) 8.0
You may use the Classifier, itself based on the ClassMaker:
Collection list = new ArrayList (); list.add (new Double (0)); list.add (new Double (1.1)); list.add (new Double (2)); list.add (new Double (8.1)); list.add (new Double (8.2)); list.add (new Double (10)); // Which value must be used for the objects in the list (other e.g. ((Tree) o).getDbh ()) ClassifierCriterion cc = new ClassifierCriterion() { @Override public double getValue (Object o) { return ((Double) o).doubleValue (); } }; // min bound: 0, classWidth: 1 Classifier c = new Classifier (list, cc, 0, 1); int rc = c.execute (); System.out.println (c.toString ()); // Available methods: c.getDistribution (); c.getN (); c.getMinLabels (); c.getCenterLabels (); c.getMaxLabels (); //...
What the Classifier.toString () method returns in this case:
Classifier vMin: 0.0 vMax: 11.0 classWidth: 1.0 n: 11 0.5 [0,1[: 1 1.5 [1,2[: 1 2.5 [2,3[: 1 3.5 [3,4[: 0 4.5 [4,5[: 0 5.5 [5,6[: 0 6.5 [6,7[: 0 7.5 [7,8[: 0 8.5 [8,9[: 2 9.5 [9,10[: 0 10.5 [10,11[: 1