package classifier; import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Packet; import weka.clusterers.SimpleKMeans; import weka.core.Instance; import weka.core.Instances; /** * Unsupervised Example: K Means Clustering * * @author Andreas T. Meyer-Berg */ public class KMeansClustering extends BasicPacketClassifier { /** * Clusterer */ private SimpleKMeans clusterer; /** * Number of Clusters */ protected int NUMBER_OF_CLUSTERS = 2; /** * Initializes the k means clusterer */ public KMeansClustering() { super(); clusterer = new SimpleKMeans(); clusterer.setSeed(42); try { clusterer.setNumClusters(this.NUMBER_OF_CLUSTERS); } catch (Exception e) { System.out.println("Error while building cluster"); e.printStackTrace(); } } @Override public void trainModel(Instances instances) { try { clusterer.buildClusterer(instances); } catch (Exception e) { System.out.println("Failed while training the classifier"); e.printStackTrace(); } } @Override public void classifyInstance(Instance instance, Packet origin) { try { clusterer.clusterInstance(instance); } catch (Exception e) { System.out.println("Anomaly Detected on Packet: "+origin.getTextualRepresentation()); } } @Override public long getClassificationStart() { return 10000; } }