machine learning - Lightweight incremental classification of 1 dimensional data in java -


i have set of pairs of observations (value, class). values natural numbers. there 2 classes. expect quite easy separate classes @ single decision point, e.g., class if value < 10, class b if value >= 10. difficulty there overlap between classes , values near decision boundary.

is there fast , lightweight way update observations , classify new data point in java problem? ideally like:

classifier.addobservation(observation); classifier.classify(value);    

a solution demonstration of java package , justification of choice of algorithm.

after searching ended using weka. in particular used naive bayes classifier. data structures little esoteric works , fast.

package agent.agenttype.ijcai; import weka.classifiers.classifier; import weka.classifiers.bayes.naivebayes; import weka.core.attribute; import weka.core.fastvector; import weka.core.instance; import weka.core.instances; import weka.core.sparseinstance;  public class example {       public static enum classlabel {a, b};       instances trainingset;      fastvector att = new fastvector(2);      fastvector cl = new fastvector(2);       public example(){          //add class labels          cl.addelement(classlabel.values()[0].name());          cl.addelement(classlabel.values()[1].name());          //set name of our value attribute          attribute attribute1 = new attribute("value");           //set name of our class label atrribute          attribute classattribute = new attribute("label", cl);                att.addelement(attribute1);          att.addelement(classattribute);              //create training set uses our attributes interpret instances          trainingset = new instances("trainingset", att, 2);          trainingset.setclassindex(1);//tell our training set index 2 of instances class label      }      public void addobservationtoedge(int value, classlabel classlabel){             instance instance = new sparseinstance(2);             instance.setvalue((attribute)att.elementat(0), value); //set value             instance.setvalue((attribute)att.elementat(1), classlabel.name());//set our             trainingset.add(instance);     }      public classlabel classifyvalue( int value) throws exception{           instance instanceforclassification = new sparseinstance(1);          instanceforclassification.setvalue((attribute)att.elementat(0), value);          instanceforclassification.setdataset(trainingset);//make instance inherit attribute labels training set           classifier cmodel = (classifier)new naivebayes();//create naive bayes classifier          cmodel.buildclassifier(trainingset);           int labelnumber = (int) cmodel.classifyinstance(instanceforclassification);          return classlabel.values()[labelnumber];     }      public static void main(string[] args){         example example = new example();         example.addobservationtoedge(1, classlabel.a);         example.addobservationtoedge(2, classlabel.a);         example.addobservationtoedge(5, classlabel.a);         example.addobservationtoedge(11, classlabel.a);         example.addobservationtoedge(9, classlabel.b);         example.addobservationtoedge(12, classlabel.b);         example.addobservationtoedge(15, classlabel.b);         example.addobservationtoedge(20, classlabel.b);          try {         //print classification results         for(int = 0; i<20; i++){             system.out.println("value: " + + " class label:" + example.classifyvalue(i));         }         } catch (exception e) {         // todo auto-generated catch block         e.printstacktrace();         }            }  } 

output:

value: 0 class label:a value: 1 class label:a value: 2 class label:a value: 3 class label:a value: 4 class label:a value: 5 class label:a value: 6 class label:a value: 7 class label:a value: 8 class label:a value: 9 class label:a value: 10 class label:b value: 11 class label:b value: 12 class label:b value: 13 class label:b value: 14 class label:b value: 15 class label:b value: 16 class label:b value: 17 class label:b value: 18 class label:b value: 19 class label:b 

Comments

Popular posts from this blog

python - Mongodb How to add addtional information when aggregating? -

java - Spring Data JPA: Why findOne(id) executing delete query internally? -

java - Incorrect order of records in M-M relationship in hibernate -