Search in sources :

Example 1 with XMeans

use of weka.clusterers.XMeans in project iobserve-analysis by research-iobserve.

the class XMeansClustering method getClusteringResults.

private Optional<ClusteringResults> getClusteringResults(final Instances instances) {
    final XMeans xMeansClusterer = new XMeans();
    xMeansClusterer.setSeed(new Random().nextInt(Integer.MAX_VALUE));
    xMeansClusterer.setDistanceF(this.distanceMetric);
    xMeansClusterer.setMinNumClusters(this.minClusters);
    xMeansClusterer.setMaxNumClusters(this.maxClusters);
    try {
        xMeansClusterer.buildClusterer(instances);
        /**
         * Code used from org.iobserve.analysis.userbehavior.XMeansClustering to use
         * org.iobserve.analysis.userbehavior.ClusteringResults
         */
        int[] clustersize = null;
        final int[] assignments = new int[instances.numInstances()];
        clustersize = new int[xMeansClusterer.getClusterCenters().numInstances()];
        for (int s = 0; s < instances.numInstances(); s++) {
            assignments[s] = xMeansClusterer.clusterInstance(instances.instance(s));
            clustersize[xMeansClusterer.clusterInstance(instances.instance(s))]++;
        }
        final ClusteringMetrics clusteringMetrics = new ClusteringMetrics(xMeansClusterer.getClusterCenters(), instances, assignments);
        clusteringMetrics.calculateSimilarityMetrics();
        final ClusteringResults xMeansClusteringResults = new ClusteringResults("X-Means", xMeansClusterer.getClusterCenters().numInstances(), assignments, clusteringMetrics);
        return Optional.of(xMeansClusteringResults);
    } catch (final Exception e) {
        // NOPMD NOCS api dependency
        XMeansClustering.LOGGER.error("Clustering failed.", e);
    }
    return Optional.empty();
}
Also used : XMeans(weka.clusterers.XMeans) Random(java.util.Random) ClusteringResults(org.iobserve.analysis.userbehavior.data.ClusteringResults) ClusteringMetrics(org.iobserve.analysis.userbehavior.data.ClusteringMetrics)

Example 2 with XMeans

use of weka.clusterers.XMeans in project iobserve-analysis by research-iobserve.

the class XMeansClustering method clusterSessionsWithXMeans.

/**
 * @param instances
 *            data to cluster in Weka format
 * @param numberOfUserGroupsFromInputUsageModel
 *            is the input number of clusters
 * @param varianceOfUserGroups
 *            enables the creation of a minimum and maximum number of clusters
 * @param seed
 *            states a random determination of the initial centroids
 * @return the clustering results that contain the number of cluster and the assignments
 */
public ClusteringResults clusterSessionsWithXMeans(final Instances instances, final int numberOfUserGroupsFromInputUsageModel, final int varianceOfUserGroups, final int seed) {
    ClusteringResults xMeansClusteringResults = null;
    try {
        final XMeans xmeans = new XMeans();
        xmeans.setSeed(seed);
        final NormalizableDistance manhattenDistance = new ManhattanDistance();
        manhattenDistance.setDontNormalize(false);
        manhattenDistance.setInstances(instances);
        xmeans.setDistanceF(manhattenDistance);
        int[] clustersize = null;
        final int[] assignments = new int[instances.numInstances()];
        // Determines the range of clusters
        // The X-Means clustering algorithm determines the best fitting number of clusters
        // within this range by itself
        int numberOfClustersMin = numberOfUserGroupsFromInputUsageModel - varianceOfUserGroups;
        int numberOfClustersMax = numberOfUserGroupsFromInputUsageModel + varianceOfUserGroups;
        if (numberOfClustersMax < 2) {
            numberOfClustersMax = 1;
            numberOfClustersMin = 1;
        } else {
            if (numberOfClustersMin < 2) {
                numberOfClustersMin = 2;
            }
        }
        xmeans.setMinNumClusters(numberOfClustersMin);
        xmeans.setMaxNumClusters(numberOfClustersMax);
        xmeans.buildClusterer(instances);
        clustersize = new int[xmeans.getClusterCenters().numInstances()];
        for (int s = 0; s < instances.numInstances(); s++) {
            assignments[s] = xmeans.clusterInstance(instances.instance(s));
            clustersize[xmeans.clusterInstance(instances.instance(s))]++;
        }
        final ClusteringMetrics clusteringMetrics = new ClusteringMetrics(xmeans.getClusterCenters(), instances, assignments);
        clusteringMetrics.calculateSimilarityMetrics();
        xMeansClusteringResults = new ClusteringResults("X-Means", xmeans.getClusterCenters().numInstances(), assignments, clusteringMetrics);
    } catch (final Exception e) {
        // NOPMD NOCS due to broken xmeans implementation triggering
        // Exception
        e.printStackTrace();
    }
    return xMeansClusteringResults;
}
Also used : XMeans(weka.clusterers.XMeans) ClusteringResults(org.iobserve.analysis.userbehavior.data.ClusteringResults) NormalizableDistance(weka.core.NormalizableDistance) ClusteringMetrics(org.iobserve.analysis.userbehavior.data.ClusteringMetrics) ManhattanDistance(weka.core.ManhattanDistance)

Aggregations

ClusteringMetrics (org.iobserve.analysis.userbehavior.data.ClusteringMetrics)2 ClusteringResults (org.iobserve.analysis.userbehavior.data.ClusteringResults)2 XMeans (weka.clusterers.XMeans)2 Random (java.util.Random)1 ManhattanDistance (weka.core.ManhattanDistance)1 NormalizableDistance (weka.core.NormalizableDistance)1