KMeansClustering.java 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. *
  22. */
  23. public KMeansClustering() {
  24. super();
  25. initializeAlgorithm();
  26. }
  27. @Override
  28. protected void initializeAlgorithm() {
  29. clusterer = new SimpleKMeans();
  30. clusterer.setSeed(42);
  31. try {
  32. clusterer.setNumClusters(this.NUMBER_OF_CLUSTERS);
  33. } catch (Exception e) {
  34. System.out.println("Error while building cluster");
  35. e.printStackTrace();
  36. }
  37. }
  38. @Override
  39. public void trainModel(Instances instances) {
  40. try {
  41. clusterer.buildClusterer(instances);
  42. } catch (Exception e) {
  43. System.out.println("Failed while training the classifier");
  44. e.printStackTrace();
  45. }
  46. }
  47. @Override
  48. public void classifyInstance(Instance instance, Packet origin) {
  49. try {
  50. clusterer.clusterInstance(instance);
  51. } catch (Exception e) {
  52. System.out.println("Anomaly Detected on Packet: "+origin.getTextualRepresentation());
  53. }
  54. }
  55. @Override
  56. public long getClassificationStart() {
  57. return 10000;
  58. }
  59. }