/// <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; }
/// <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; }
/// <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; }
/// <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; }
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; }
/// <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; }