List of usage examples for weka.core DistanceFunction setInstances
public void setInstances(Instances insts);
From source file:net.sf.markov4jmeter.behaviormodelextractor.extraction.transformation.clustering.ClusteringMetrics.java
License:Apache License
/** * Calculates the distance between clusters. * //from www .j a v a2 s. com * @param centroids * @return */ protected void calculateInterClusteringSimilarity(Instances centroids) { DistanceFunction euclideanDistance = new EuclideanDistance(); euclideanDistance.setInstances(centroids); double k = (double) centroids.numInstances(); double sumDistance = 0; double sumVariance = 0; for (int i = 0; i < k; i++) { for (int j = i + 1; j < k; j++) { sumDistance += euclideanDistance.distance(centroids.instance(i), centroids.instance(j)); } } this.sampleMeanInterCluster = (1 / (k * (k - 1) / 2)) * sumDistance; for (int i = 0; i < k; i++) { for (int j = i + 1; j < k; j++) { sumVariance += Math.pow((euclideanDistance.distance(centroids.instance(i), centroids.instance(j)) - this.sampleMeanInterCluster), 2); } } this.sampleVarianceInterCluster = (1 / ((k * (k - 1) / 2) - 1)) * sumVariance; this.sampleCoefficientOfVarianceInterCluster = Math.sqrt(this.sampleVarianceInterCluster) / this.sampleMeanInterCluster; }
From source file:net.sf.markov4jmeter.behaviormodelextractor.extraction.transformation.clustering.ClusteringMetrics.java
License:Apache License
/** * Calculates the distance within a cluster. * /*from ww w . j a v a 2 s. com*/ * @param centroids * @return */ protected void calculateIntraClusteringSimilarity(Instances centroids, Instances instances, int[] assignments) { DistanceFunction euclideanDistance = new EuclideanDistance(); euclideanDistance.setInstances(instances); double[] avgIntraClusterSimilarity = new double[centroids.numInstances()]; double k = (double) centroids.numInstances(); double sumDistance = 0; double counter = 0; double sumDistanceAllClusters = 0; double sumVariance = 0; for (int i = 0; i < k; i++) { for (int j = 0; j < instances.numInstances(); j++) { if (assignments[j] == i) { sumDistance += euclideanDistance.distance(instances.instance(j), centroids.instance(i)); counter += 1; } } avgIntraClusterSimilarity[i] = (1 / counter) * sumDistance; sumDistance = 0; counter = 0; } for (double clusterDistance : avgIntraClusterSimilarity) { sumDistanceAllClusters += clusterDistance; } this.sampleMeanIntraCluster = (1 / k) * sumDistanceAllClusters; for (int i = 0; i < k; i++) { sumVariance += Math.pow((avgIntraClusterSimilarity[i] - this.sampleMeanIntraCluster), 2); } this.sampleVarianceIntraCluster = (1 / (k - 1)) * sumVariance; this.sampleCoefficientOfVarianceIntraCluster = Math.sqrt(this.sampleVarianceIntraCluster) / this.sampleMeanIntraCluster; }
From source file:net.sf.markov4jmeter.behaviormodelextractor.extraction.transformation.clustering.KMeansClusteringStrategy.java
License:Apache License
/** * {@inheritDoc}//from w w w . j a v a 2 s. c om * * <p> * This method is specialized for <b>kmeans</b> clustering. */ @Override public BehaviorMix apply(final BehaviorModelAbsolute[] behaviorModelsAbsolute, final UseCaseRepository useCaseRepository) { final ABMToRBMTransformer abmToRbmTransformer = new ABMToRBMTransformer(); // Behavior Mix to be returned; final BehaviorMix behaviorMix = this.createBehaviorMix(); try { // Returns a valid instances set, generated based on the absolut // behavior models Instances instances = getInstances(behaviorModelsAbsolute); // KMeans --> Weka SimpleKMeans kmeans = new SimpleKMeans(); // DistanceFunction manhattanDistance = new ManhattanDistance(); // String[] options = new String[1]; // options[0] = "-D"; // manhattanDistance.setOptions(options); // manhattanDistance.setInstances(instances); // kmeans.setDistanceFunction(manhattanDistance); // distance function with option don*t normalize DistanceFunction euclideanDistance = new EuclideanDistance(); // String[] options = new String[1]; // options[0] = "-D"; // euclideanDistance.setOptions(options); euclideanDistance.setInstances(instances); kmeans.setDistanceFunction(euclideanDistance); kmeans.setPreserveInstancesOrder(true); int[] clustersize = null; int[] assignments = null; // get number of clusters to be generated. int numberOfClusters = Integer.parseInt(CommandLineArgumentsHandler.getNumberOfClustersMin()); // clustering for (int clusterSize = numberOfClusters; clusterSize <= numberOfClusters; clusterSize++) { // must be specified in a fix way kmeans.setNumClusters(clusterSize); // build cluster kmeans.buildClusterer(instances); clustersize = kmeans.getClusterSizes(); assignments = kmeans.getAssignments(); ClusteringMetrics clusteringMetrics = new ClusteringMetrics(); clusteringMetrics.calculateInterClusteringSimilarity(kmeans.getClusterCentroids()); clusteringMetrics.calculateIntraClusteringSimilarity(kmeans.getClusterCentroids(), instances, assignments); clusteringMetrics.calculateBetas(); clusteringMetrics.printErrorMetricsHeader(); clusteringMetrics.printErrorMetrics(kmeans.getClusterCentroids().numInstances()); clusteringMetrics.printClusteringMetrics(clustersize, assignments, instances); // clusteringMetrics.printClusterAssignmentsToSession(assignments, // clusterSize); } Instances resultingCentroids = kmeans.getClusterCentroids(); // for each centroid instance, create new behaviorModelRelative for (int i = 0; i < resultingCentroids.numInstances(); i++) { Instance centroid = resultingCentroids.instance(i); // create a Behavior Model, which includes all vertices only; // the vertices are associated with the use cases, and a // dedicated // vertex that represents the final state will be added; final BehaviorModelAbsolute behaviorModelAbsoluteCentroid = this .createBehaviorModelAbsoluteWithoutTransitions(useCaseRepository.getUseCases()); // install the transitions in between vertices; this.installTransitions(behaviorModelsAbsolute, behaviorModelAbsoluteCentroid, centroid, assignments, i); // convert absolute to relative behaviorModel final BehaviorModelRelative behaviorModelRelative = abmToRbmTransformer .transform(behaviorModelAbsoluteCentroid); // relative Frequency of cluster i double relativeFrequency = (double) clustersize[i] / (double) instances.numInstances(); // create the (unique) Behavior Mix entry to be returned; final BehaviorMixEntry behaviorMixEntry = this.createBehaviorMixEntry( AbstractClusteringStrategy.GENERIC_BEHAVIOR_MODEL_NAME, relativeFrequency, // relative frequency; behaviorModelRelative); // add to resulting behaviorMix behaviorMix.getEntries().add(behaviorMixEntry); } return behaviorMix; } catch (ExtractionException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } // if any error occurs, an ExtractionExeption should be thrown, // indicating the error that occurred; // the classes "NoClusteringStrategy" and "SimpleClusteringStrategy" // should give an idea for handling the Behavior Models and how to // use the helping methods of the (abstract) parent class. return behaviorMix; }
From source file:net.sf.markov4jmeter.behaviormodelextractor.extraction.transformation.clustering.XMeansClusteringStrategy.java
License:Apache License
/** * {@inheritDoc}// w w w . j a v a 2 s.com * * <p> * This method is specialized for <b>xmeans</b> clustering. */ @Override public BehaviorMix apply(final BehaviorModelAbsolute[] behaviorModelsAbsolute, final UseCaseRepository useCaseRepository) { final ABMToRBMTransformer abmToRbmTransformer = new ABMToRBMTransformer(); // Behavior Mix to be returned; final BehaviorMix behaviorMix = this.createBehaviorMix(); try { // Returns a valid instances set, generated based on the absolut // behavior models Instances instances = getInstances(behaviorModelsAbsolute); // XMeans --> Weka XMeans xmeans = new XMeans(); if (CommandLineArgumentsHandler.getSeedValue() != null) { xmeans.setSeed(Integer.parseInt(CommandLineArgumentsHandler.getSeedValue())); } // distance function DistanceFunction euclideanDistance = new EuclideanDistance(); // String[] options = new String[1]; // options[0] = "-D"; // euclideanDistance.setOptions(options); euclideanDistance.setInstances(instances); xmeans.setDistanceF(euclideanDistance); // DistanceFunction manhattanDistance = new ManhattanDistance(); // String[] options = new String[1]; // options[0] = "-D"; // manhattanDistance.setOptions(options); // manhattanDistance.setInstances(instances); // xmeans.setDistanceF(manhattanDistance); int[] clustersize = null; // create new assignments int[] assignments = new int[instances.numInstances()]; // get number of clusters to be generated. int numberOfClustersMin = Integer.parseInt(CommandLineArgumentsHandler.getNumberOfClustersMin()); int numberOfClustersMax = 0; if (CommandLineArgumentsHandler.getNumberOfClustersMax() != "") { numberOfClustersMax = Integer.parseInt(CommandLineArgumentsHandler.getNumberOfClustersMax()); } else { numberOfClustersMax = numberOfClustersMin; } // clustering xmeans.setMinNumClusters(numberOfClustersMin); xmeans.setMaxNumClusters(numberOfClustersMax); // build cluster xmeans.buildClusterer(instances); ClusterEvaluation clusterEvaluation = new ClusterEvaluation(); clusterEvaluation.setClusterer(xmeans); clusterEvaluation.evaluateClusterer(instances); // clusterSize clustersize = new int[xmeans.getClusterCenters().numInstances()]; // set assignments and clustersize for (int s = 0; s < instances.numInstances(); s++) { assignments[s] = xmeans.clusterInstance(instances.instance(s)); clustersize[xmeans.clusterInstance(instances.instance(s))]++; } ClusteringMetrics clusteringMetrics = new ClusteringMetrics(); clusteringMetrics.calculateInterClusteringSimilarity(xmeans.getClusterCenters()); clusteringMetrics.calculateIntraClusteringSimilarity(xmeans.getClusterCenters(), instances, assignments); clusteringMetrics.calculateBetas(); clusteringMetrics.printErrorMetricsHeader(); clusteringMetrics.printErrorMetrics(xmeans.getClusterCenters().numInstances()); clusteringMetrics.printClusteringMetrics(clustersize, assignments, instances); // clusteringMetrics.printClusterAssignmentsToSession(assignments, // xmeans.getClusterCenters().numInstances()); Instances resultingCentroids = xmeans.getClusterCenters(); // for each centroid instance, create new behaviorModelRelative for (int i = 0; i < resultingCentroids.numInstances(); i++) { Instance centroid = resultingCentroids.instance(i); // create a Behavior Model, which includes all vertices only; // the vertices are associated with the use cases, and a // dedicated // vertex that represents the final state will be added; final BehaviorModelAbsolute behaviorModelAbsoluteCentroid = this .createBehaviorModelAbsoluteWithoutTransitions(useCaseRepository.getUseCases()); // install the transitions in between vertices; this.installTransitions(behaviorModelsAbsolute, behaviorModelAbsoluteCentroid, centroid, assignments, i); // convert absolute to relative behaviorModel final BehaviorModelRelative behaviorModelRelative = abmToRbmTransformer .transform(behaviorModelAbsoluteCentroid); // relative Frequency of cluster i double relativeFrequency = (double) clustersize[i] / (double) instances.numInstances(); // create the (unique) Behavior Mix entry to be returned; final BehaviorMixEntry behaviorMixEntry = this.createBehaviorMixEntry( AbstractClusteringStrategy.GENERIC_BEHAVIOR_MODEL_NAME, relativeFrequency, // relative frequency; behaviorModelRelative); // add to resulting behaviorMix behaviorMix.getEntries().add(behaviorMixEntry); } return behaviorMix; } catch (ExtractionException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } // if any error occurs, an ExtractionExeption should be thrown, // indicating the error that occurred; // the classes "NoClusteringStrategy" and "SimpleClusteringStrategy" // should give an idea for handling the Behavior Models and how to // use the helping methods of the (abstract) parent class. return behaviorMix; }
From source file:org.iobserve.analysis.behavior.karlsruhe.data.ClusteringMetrics.java
License:Apache License
private double calculateSumOfSquaredErrors() { final DistanceFunction euclideanDistance = new EuclideanDistance(); euclideanDistance.setInstances(this.instances); final double numberOfCentroids = this.centroids.numInstances(); this.sumOfSquaredErrors = 0; for (int i = 0; i < numberOfCentroids; i++) { for (int j = 0; j < this.instances.numInstances(); j++) { if (this.assignments[j] == i) { this.sumOfSquaredErrors += Math.pow( euclideanDistance.distance(this.instances.instance(j), this.centroids.instance(i)), 2); }/*from w w w .ja v a 2 s . c om*/ } } return this.sumOfSquaredErrors; }