Browse Source

Adds further Clusterers

* EM
* Hierarchical Clustering
Andreas T. Meyer-Berg 4 years ago
parent
commit
5747bc357a

+ 4 - 5
examples/classifier/BasicPacketClassifier.java

@@ -66,7 +66,11 @@ public abstract class BasicPacketClassifier implements PacketSniffer {
 	 */
 	protected HashSet<String> protocol_mappings = new HashSet<String>();
 	
+	/**
+	 * Number of packets which are used to calculate the current transmission speed
+	 */
 	protected int NUMBER_OF_PACKETS = 200;
+	
 	/**
 	 * Initializes the different maps
 	 */
@@ -78,11 +82,6 @@ public abstract class BasicPacketClassifier implements PacketSniffer {
 		protocol_mappings.add("unknown");
 	}
 	
-	/**
-	 * Initialize the Algorithm parameters
-	 */
-	protected abstract void initializeAlgorithm();
-	
 	@Override
 	public void processPackets(HashMap<Link, LinkedList<Packet>> packets) {
 		if(training && !packets.entrySet().isEmpty() && !packets.entrySet().iterator().next().getValue().isEmpty() && packets.entrySet().iterator().next().getValue().getFirst().getTimestamp()>getClassificationStart()) {

+ 51 - 0
examples/classifier/EMClustering.java

@@ -0,0 +1,51 @@
+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 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;
+	}
+
+}

+ 53 - 0
examples/classifier/HierarchicalClustering.java

@@ -0,0 +1,53 @@
+package classifier;
+
+import de.tu_darmstadt.tk.SmartHomeNetworkSim.core.Packet;
+import weka.clusterers.HierarchicalClusterer;
+import weka.core.EuclideanDistance;
+import weka.core.Instance;
+import weka.core.Instances;
+
+/**
+ * Hierarchical Clustering Approach
+ * @author Andreas T. Meyer-Berg
+ */
+public class HierarchicalClustering extends BasicPacketClassifier {
+
+	/**
+	 * Hierarchical cluster which is used
+	 */
+	private HierarchicalClusterer clusterer;
+	
+	/**
+	 * Initialize the clusterer
+	 */
+	public HierarchicalClustering() {
+		clusterer = new HierarchicalClusterer();
+		clusterer.setDistanceFunction(new EuclideanDistance());
+	}
+	
+	@Override
+	public void trainModel(Instances instances) {
+		try {
+			clusterer.buildClusterer(instances);
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			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;
+	}
+
+}

+ 1 - 6
examples/classifier/KMeansClustering.java

@@ -23,15 +23,10 @@ public class KMeansClustering extends BasicPacketClassifier {
 	protected int NUMBER_OF_CLUSTERS = 2;
 	
 	/**
-	 * 
+	 * Initializes the k means clusterer
 	 */
 	public KMeansClustering() {
 		super();
-		initializeAlgorithm();
-	}
-
-	@Override
-	protected void initializeAlgorithm() {
 		clusterer = new SimpleKMeans();
 		clusterer.setSeed(42);
 		try {