KMeansClustering.java 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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 = 16;
  20. /**
  21. * Initializes the k means clusterer
  22. */
  23. public KMeansClustering() {
  24. super();
  25. clusterer = new SimpleKMeans();
  26. clusterer.setSeed(42);/*
  27. clusterer.setCanopyPeriodicPruningRate(100);
  28. clusterer.setCanopyT1(0.5);
  29. clusterer.setCanopyT2(1.0);*/
  30. try {
  31. clusterer.setNumClusters(this.NUMBER_OF_CLUSTERS);
  32. } catch (Exception e) {
  33. System.out.println("Error while building cluster");
  34. e.printStackTrace();
  35. }
  36. }
  37. @Override
  38. public void trainModel(Instances instances) {
  39. try {
  40. clusterer.buildClusterer(instances);
  41. } catch (Exception e) {
  42. System.out.println("Failed while training the classifier");
  43. e.printStackTrace();
  44. }
  45. }
  46. @Override
  47. public double classifyInstance(Instance instance, Packet origin) throws Exception {
  48. /**
  49. * Id of the closest cluster centroid
  50. */
  51. int x = clusterer.clusterInstance(instance);
  52. /**
  53. * centroid instance
  54. */
  55. Instance center = clusterer.getClusterCentroids().get(x);
  56. return clusterer.getDistanceFunction().distance(center, instance);
  57. }
  58. @Override
  59. public long getClassificationStart() {
  60. return 3600000;
  61. }
  62. @Override
  63. public String getAlgoName() {
  64. return "KNN";
  65. }
  66. }