private static void CreateClusters(IDataset data, string target, int contours, out IClusteringModel contourCluster, out Dictionary <int, string> contourNames, out double[][] borders) { var cpd = new ClusteringProblemData((Dataset)data, new[] { target }); contourCluster = KMeansClustering.CreateKMeansSolution(cpd, contours, 3).Model; borders = Enumerable.Range(0, contours).Select(x => new[] { double.MaxValue, double.MinValue }).ToArray(); var clusters = contourCluster.GetClusterValues(cpd.Dataset, cpd.AllIndices).ToArray(); var targetvalues = cpd.Dataset.GetDoubleValues(target).ToArray(); foreach (var i in cpd.AllIndices) { var cl = clusters[i] - 1; var clv = targetvalues[i]; if (borders[cl][0] > clv) { borders[cl][0] = clv; } if (borders[cl][1] < clv) { borders[cl][1] = clv; } } contourNames = new Dictionary <int, string>(); for (var i = 0; i < contours; i++) { contourNames.Add(i, "[" + borders[i][0] + ";" + borders[i][1] + "]"); } }
private KMeansClustering(KMeansClustering original, Cloner cloner) : base(original, cloner) { }