123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package classifier;
- import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Packet;
- import weka.clusterers.EM;
- import weka.core.Instance;
- import weka.core.Instances;
- /**
- * Expectation Maximization Clustering Approach
- * @author Andreas T. Meyer-Berg
- */
- public class EMClustering extends BasicPacketClassifier {
- /**
- * EM cluster which is used
- */
- private EM clusterer;
-
- /**
- * Initialize the clusterer
- */
- public EMClustering() {
- clusterer = new EM();
- }
-
- @Override
- public void trainModel(Instances instances) {
- try {
- clusterer.buildClusterer(instances);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- @Override
- public double classifyInstance(Instance instance, Packet origin) throws Exception {
- /**
- * Id of the closest cluster
- */
- int x = clusterer.clusterInstance(instance);
- /*
- System.out.println(origin.getTextualRepresentation()+": cluster: "+x+" Dens: "+clusterer.logDensityForInstance(instance)+" joined: ");
- double[] joined = clusterer.logJointDensitiesForInstance(instance);
- for(int i = 0;i<joined.length;) {
- System.out.print(joined[i]);
- if(++i<joined.length)
- System.out.print(", ");
- else
- System.out.println("");
- }
- System.out.println("Distribution:");
- double[] distribution = clusterer.distributionForInstance(instance);
- for(int i = 0;i<distribution.length;) {
- System.out.print(distribution[i]);
- if(++i<distribution.length)
- System.out.print(", ");
- else
- System.out.println("");
- }
-
- double[] priors = clusterer.clusterPriors();
- System.out.println("Priors: ");
- for(int i = 0; i<priors.length; i++) {
- System.out.println("i="+i+": "+priors[i]);
- }
- double[][][] rest = clusterer.getClusterModelsNumericAtts();
- double[][] posteriori = rest[x];
- for(int i = 0; i<posteriori.length; i++) {
- System.out.println("Att "+i+": Mean: "+posteriori[i][0]+" Std: "+posteriori[i][1]+" ???: "+posteriori[i][2]+" Real: "+instance.value(i));
- }*/
- return (1-clusterer.distributionForInstance(instance)[x])*800;
- }
- @Override
- public long getClassificationStart() {
- return 3600000;
- }
- @Override
- public String getAlgoName() {
- return "EM";
- }
- }
|