00001
00002
00003
00004 package edu.tum.cs.bayesnets.core;
00005
00006 import weka.core.Instance;
00007 import weka.filters.Filter;
00008 import weka.filters.UnsupervisedFilter;
00009 import edu.tum.cs.bayesnets.learning.FilterNamer;
00010
00015 public class WEKADiscretizationFilter implements DiscretizationFilter {
00016
00020 protected String[] outputValues;
00024 protected Filter filter;
00025
00032 public <F extends Filter> WEKADiscretizationFilter(F filter, FilterNamer<? super F> namer) {
00033 if (filter instanceof UnsupervisedFilter) {
00034 throw new IllegalArgumentException("Cannot use unsupervised filter for descretization (the instances are handled one by one)!");
00035 }
00036 this.filter = filter;
00037 outputValues = namer.getNames(filter);
00038 }
00039
00040
00041
00042
00043 public String[] getOutputValues() {
00044 return outputValues;
00045 }
00046
00047
00048
00049
00050 public String getValueForContinuous(double continuous) {
00051 Instance inst = new Instance(1);
00052 inst.setValue(0, continuous);
00053 try {
00054 filter.input(inst);
00055 filter.batchFinished();
00056 Instance newInst=filter.output();
00057 int value = (int)newInst.value(0);
00058 return outputValues[value];
00059 } catch (Exception e) {
00060 e.printStackTrace();
00061 return null;
00062 }
00063 }
00064
00065
00066
00067
00068 public void addOutputValue(String outputValue) {
00069 throw new IllegalArgumentException("Cannot recreate filter from output values, yet!");
00070 }
00071
00072
00073
00074
00075 public double getExampleValue(int bin) {
00076 throw new IllegalArgumentException("Cannot sample from WEKADiscretization filter!");
00077 }
00078
00079
00080
00081
00082 public double[] getIntervals(int bin) {
00083 throw new IllegalArgumentException("Cannot sample from WEKADiscretization filter!");
00084 }
00085 }