KMeansClustering.java 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package classifier;
  2. import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Packet;
  3. import weka.clusterers.SimpleKMeans;
  4. import weka.core.Instance;
  5. import weka.core.Instances;
  6. /**
  7. * Unsupervised Example: K Means Clustering
  8. *
  9. * @author Andreas T. Meyer-Berg
  10. */
  11. public class KMeansClustering extends BasicPacketClassifier {
  12. /**
  13. * Clusterer
  14. */
  15. private SimpleKMeans clusterer;
  16. /**
  17. * Number of Clusters
  18. */
  19. protected int NUMBER_OF_CLUSTERS = 2;
  20. /**
  21. * Initializes the k means clusterer
  22. */
  23. public KMeansClustering() {
  24. super();
  25. clusterer = new SimpleKMeans();
  26. clusterer.setSeed(42);
  27. try {
  28. clusterer.setNumClusters(this.NUMBER_OF_CLUSTERS);
  29. } catch (Exception e) {
  30. System.out.println("Error while building cluster");
  31. e.printStackTrace();
  32. }
  33. }
  34. @Override
  35. public void trainModel(Instances instances) {
  36. try {
  37. clusterer.buildClusterer(instances);
  38. } catch (Exception e) {
  39. System.out.println("Failed while training the classifier");
  40. e.printStackTrace();
  41. }
  42. }
  43. @Override
  44. public void classifyInstance(Instance instance, Packet origin) {
  45. try {
  46. clusterer.clusterInstance(instance);
  47. } catch (Exception e) {
  48. System.out.println("Anomaly Detected on Packet: "+origin.getTextualRepresentation());
  49. }
  50. }
  51. @Override
  52. public long getClassificationStart() {
  53. return 10000;
  54. }
  55. }