Clusterizator.Krab.KrabClusterization.Cluster C# (CSharp) Метод

Cluster() публичный Метод

Clusterization method for given groups number.
public Cluster ( int clustersCount, double data ) : int[]
clustersCount int /// Groups count. ///
data double /// Characteristics values for every object. /// First dimension represents objects. /// Second Dimension represents characteristics. ///
Результат int[]
        public int[] Cluster(int clustersCount, double[][] data)
        {
            // all connections (pairs of elements)
            var connections = new List<Connection>();

            // all elements
            var elements = new List<GraphElement>();

            for (int i = 0; i < data.Length; i++)
            {
                elements.Add(new GraphElement(data[i], i));
            }

            for (int j = 0; j < elements.Count - 1; j++)
            {
                for (int k = j + 1; k < elements.Count; k++)
                {
                    connections.Add(new Connection(j, k));
                }
            }

            manager = new GraphManager(connections, elements);

            // calculating distances
            CommonCalculator.CalculateCharacteristic(manager, normalizedDistanceWeight, distanceWeight);
            manager.ConnectGraph();
            GraphManager tempManager = manager.Clone();
            ChooseDivision(clustersCount, 0, manager);
            var result = new int[data.Length];

            // extracting clusters from the graph
            for (int j = 0; j < optimalDivide.Elements.Count; j++)
            {
                result[j] = optimalDivide.Elements[j].TaxonNumber;
            }

            manager = tempManager;
            return result;
        }

Usage Example

        public void ClusterizationTest()
        {
            var krab = new KrabClusterization(4, 2, 1);

            var data = new[]
                           {
                               new[] { 2.0, 2.0 },
                               new[] { 5.0, 2.0 },
                               new[] { 4.0, 3.0 },
                               new[] { 3.0, 6.0 },
                               new[] { 8.0, 8.0 },
                               new[] { 9.0, 7.0 }
                           };

            var result = krab.Cluster(2, data);

            Assert.AreEqual(result[0], 2);
            Assert.AreEqual(result[1], 2);
            Assert.AreEqual(result[2], 2);
            Assert.AreEqual(result[3], 2);

            Assert.AreEqual(result[4], 1);
            Assert.AreEqual(result[5], 1);
        }