/// <summary>
 ///     Creates a new <see cref="ModifiedGammaStatistic{TInstance}" /> with given dissimilarity metric.
 /// </summary>
 /// <param name="dissimilarityMetric">The metric used to calculate dissimilarity between cluster elements.</param>
 /// <param name="centroidFunc">
 ///     A function to get an element representing the centroid of a <see cref="Cluster{TInstance}" />.
 /// </param>
 public ModifiedGammaStatistic(
     IDissimilarityMetric <TInstance> dissimilarityMetric, CentroidFunction <TInstance> centroidFunc)
 {
     this._centroidFunc       = centroidFunc;
     this.DissimilarityMetric = dissimilarityMetric;
 }
Exemplo n.º 2
0
 /// <summary>
 ///     Creates a new <see cref="XieBeniIndex{TInstance}" /> with given dissimilarity metric.
 /// </summary>
 /// <param name="dissimilarityMetric">The metric used to calculate dissimilarity between cluster elements.</param>
 /// <param name="centroidFunc">
 ///     A function to get an element representing the centroid of a <see cref="Cluster{TInstance}" />.
 /// </param>
 public XieBeniIndex(
     IDissimilarityMetric <TInstance> dissimilarityMetric, CentroidFunction <TInstance> centroidFunc)
 {
     this._centroidFunc       = centroidFunc;
     this.DissimilarityMetric = dissimilarityMetric;
 }
 /// <summary>
 ///     Creates a new <see cref="DaviesBouldinIndex{TInstance}" /> with given dissimilarity metric.
 /// </summary>
 /// <param name="dissimilarityMetric">The metric used to calculate dissimilarity between cluster elements.</param>
 /// <param name="centroidFunc">
 ///     A function to get an element representing the centroid of a <see cref="Cluster{TInstance}" />.
 /// </param>
 public DaviesBouldinIndex(
     IDissimilarityMetric <TInstance> dissimilarityMetric, CentroidFunction <TInstance> centroidFunc)
 {
     this._centroidFunc       = centroidFunc;
     this.DissimilarityMetric = dissimilarityMetric;
 }
Exemplo n.º 4
0
 /// <summary>
 ///     Creates a new <see cref="RSquared{TInstance}" /> with given dissimilarity metric.
 /// </summary>
 /// <param name="dissimilarityMetric">The metric used to calculate dissimilarity between cluster elements.</param>
 /// <param name="centroidFunc">
 ///     A function to get an element representing the centroid of a <see cref="Cluster{TInstance}" />.
 /// </param>
 public RSquared(IDissimilarityMetric <TInstance> dissimilarityMetric,
                 CentroidFunction <TInstance> centroidFunc)
 {
     this._centroidFunc       = centroidFunc;
     this.DissimilarityMetric = dissimilarityMetric;
 }
 /// <summary>
 ///     Creates a new <see cref="WithinBetweenRatio{TInstance}" /> with given dissimilarity metric.
 /// </summary>
 /// <param name="dissimilarityMetric">The metric used to calculate dissimilarity between cluster elements.</param>
 /// <param name="centroidFunc">
 ///     A function to get an element representing the centroid of a <see cref="Cluster{TInstance}" />.
 /// </param>
 public WithinBetweenRatio(IDissimilarityMetric <TInstance> dissimilarityMetric,
                           CentroidFunction <TInstance> centroidFunc)
 {
     this._centroidFunc       = centroidFunc;
     this.DissimilarityMetric = dissimilarityMetric;
 }
Exemplo n.º 6
0
 /// <summary>
 ///     Creates a new <see cref="RootMeanSquareStdDev{TInstance}" /> with given dissimilarity metric.
 /// </summary>
 /// <param name="dissimilarityMetric">The metric used to calculate dissimilarity between cluster elements.</param>
 /// <param name="centroidFunc">
 ///     A function to get an element representing the centroid of a <see cref="Cluster{TInstance}" />.
 /// </param>
 public RootMeanSquareStdDev(
     IDissimilarityMetric <TInstance> dissimilarityMetric, CentroidFunction <TInstance> centroidFunc)
 {
     this._centroidFunc       = centroidFunc;
     this.DissimilarityMetric = dissimilarityMetric;
 }
Exemplo n.º 7
0
        private static void Main(string[] args)
        {
            var globalPerf = new PerformanceMeasure();

            globalPerf.Start();

            // loads points from csv file
            var dataSetFile = args.Length > 0 ? args[0] : DATASET_FILE;
            var filePath    = Path.GetFullPath(dataSetFile);

            Console.WriteLine($"Loading data-points from {filePath}...");
            var parser     = new CsvParser();
            var dataPoints = parser.Load(filePath);

            Console.WriteLine($"Clustering {dataPoints.Count} data-points...");

            // performs hierarchical clustering
            var clusterPerf = new PerformanceMeasure();

            clusterPerf.Start();
            var metric        = new DataPoint(); // Euclidean distance
            var linkage       = new AverageLinkage <DataPoint>(metric);
            var clusteringAlg = new AgglomerativeClusteringAlgorithm <DataPoint>(linkage);
            var clustering    = clusteringAlg.GetClustering(dataPoints);

            clusterPerf.Stop();

            Directory.CreateDirectory(Path.GetFullPath(RESULTS_PATH));
            clustering.SaveD3DendrogramFile(Path.GetFullPath(Path.Combine(RESULTS_PATH, "dendrogram.json")));
            clustering.SaveToCsv(Path.GetFullPath(Path.Combine(RESULTS_PATH, "clustering.csv")));
            Console.WriteLine($"Finished clustering: {clusterPerf}");

            // evaluates the clustering according to several criteria
            //CentroidFunction<DataPoint> centroidFunc = DataPoint.GetMedoid;
            CentroidFunction <DataPoint> centroidFunc = DataPoint.GetCentroid;
            var criteria =
                new Dictionary <string, IInternalEvaluationCriterion <DataPoint> >
            {
                { "Silhouette coefficient", new SilhouetteCoefficient <DataPoint>(metric) },
                { "Dunn index", new DunnIndex <DataPoint>(metric) },
                { "Davies-Bouldin index", new DaviesBouldinIndex <DataPoint>(metric, centroidFunc) },
                { "Calinski-Harabasz index", new CalinskiHarabaszIndex <DataPoint>(metric, centroidFunc) },
                { "Modified Gamma statistic", new ModifiedGammaStatistic <DataPoint>(metric, centroidFunc) },
                { "Xie-Beni index", new XieBeniIndex <DataPoint>(metric, centroidFunc) },
                { "Within-Between ratio", new WithinBetweenRatio <DataPoint>(metric, centroidFunc) },
                { "I-index", new IIndex <DataPoint>(metric, centroidFunc) },
                { "Xu index", new XuIndex <DataPoint>(metric, centroidFunc) }

                //{"RMSSD", new RootMeanSquareStdDev<DataPoint>(metric, centroidFunc)},
                //{"R-squared", new RSquared<DataPoint>(metric, centroidFunc)},
            };

            foreach (var criterion in criteria)
            {
                GetBestPartition(clustering, criterion.Value, criterion.Key);
            }

            globalPerf.Stop();
            Console.WriteLine($"\nFinished: {globalPerf}");
            Console.ReadKey();
        }
 /// <summary>
 ///     Creates a new <see cref="DaviesBouldinIndex{TInstance}" /> with given dissimilarity metric.
 /// </summary>
 /// <param name="dissimilarityMetric">The metric used to calculate dissimilarity between cluster elements.</param>
 /// <param name="centroidFunc">
 ///     A function to get an element representing the centroid of a <see cref="Cluster{TInstance}" />.
 /// </param>
 public CalinskiHarabaszIndex(
     IDissimilarityMetric <TInstance> dissimilarityMetric, CentroidFunction <TInstance> centroidFunc)
 {
     this._centroidFunc       = centroidFunc;
     this.DissimilarityMetric = dissimilarityMetric;
 }
Exemplo n.º 9
0
 /// <summary>
 ///     Creates a new <see cref="WardsMinimumVarianceLinkage{TInstance}" /> with given dissimilarity metric and centroid
 ///     function.
 /// </summary>
 /// <param name="metric">The metric used to calculate dissimilarity between cluster elements.</param>
 /// <param name="centroidFunc">
 ///     A function to get an element representing the centroid of a <see cref="Cluster{TInstance}" />.
 /// </param>
 public WardsMinimumVarianceLinkage(
     IDissimilarityMetric <TInstance> metric, CentroidFunction <TInstance> centroidFunc)
 {
     this.DissimilarityMetric = metric;
     this._centroidFunc       = centroidFunc;
 }