public static double Calculate(LinkageFunctionTypes linkageFunction, DistanceMeasurementTypes distanceMeasurement, List <double[]> firstClusterDatapoints, List <double[]> secondClusterDatapoints)
        {
            switch (linkageFunction)
            {
            case LinkageFunctionTypes.Single:
                return(CalculateSingle(distanceMeasurement, firstClusterDatapoints, secondClusterDatapoints));

            case LinkageFunctionTypes.Complete:
                return(CalculateComplete(distanceMeasurement, firstClusterDatapoints, secondClusterDatapoints));
            }

            return(default(double));
        }
Ejemplo n.º 2
0
        public void ComputeDistance(LinkageFunctionTypes linkageFunction, DistanceMeasurementTypes distanceMeasurement)
        {
            if (Child == null)
            {
                Distance = LinkageFunctionHelper.Calculate(linkageFunction, distanceMeasurement, new List <double[]> {
                    FirstDatapoint
                }, new List <double[]> {
                    SecondDatapoint
                });;
                return;
            }

            Distance = LinkageFunctionHelper.Calculate(linkageFunction, distanceMeasurement, new List <double[]> {
                FirstDatapoint
            }, Child.GetAllDatapoints());
            Child.ComputeDistance(linkageFunction, distanceMeasurement);
        }
Ejemplo n.º 3
0
        public static double Calculate(DistanceMeasurementTypes distanceMeasurementType, double[] vector1, double[] vector2)
        {
            switch (distanceMeasurementType)
            {
            case DistanceMeasurementTypes.Canberra:
                return(CalculateCanberraDistance(vector1, vector2));

            case DistanceMeasurementTypes.Euclidian:
                return(CalculateEucledianDistance(vector1, vector2));

            case DistanceMeasurementTypes.Manhattan:
                return(CalculateManhattanDistance(vector1, vector2));

            case DistanceMeasurementTypes.Maximum:
                return(CalculateMaxDistance(vector1, vector2));
            }

            return(default(double));
        }
        public static double CalculateComplete(DistanceMeasurementTypes distanceMeasurement, List <double[]> firstClusterDatapoints, List <double[]> secondClusterDatapoints)
        {
            double max = 0;

            for (int i = 0; i < firstClusterDatapoints.Count(); i++)
            {
                for (int j = 0; j < secondClusterDatapoints.Count(); j++)
                {
                    var firstDatapoint  = firstClusterDatapoints[i];
                    var secondDatapoint = secondClusterDatapoints[j];
                    var distance        = DistanceCalculationHelper.Calculate(distanceMeasurement, firstDatapoint, secondDatapoint);
                    if (distance > max)
                    {
                        max = distance;
                    }
                }
            }

            return(max);
        }
        public static double CalculateSingle(DistanceMeasurementTypes distanceMeasurement, List <double[]> firstClusterDatapoints, List <double[]> secondClusterDatapoints)
        {
            double min = double.MaxValue;

            for (int i = 0; i < firstClusterDatapoints.Count(); i++)
            {
                for (int j = 0; j < secondClusterDatapoints.Count(); j++)
                {
                    var firstDatapoint  = firstClusterDatapoints[i];
                    var secondDatapoint = secondClusterDatapoints[j];
                    var distance        = DistanceCalculationHelper.Calculate(distanceMeasurement, firstDatapoint, secondDatapoint);
                    if (distance < min)
                    {
                        min = distance;
                    }
                }
            }

            return(min);
        }
 public static double Calculate(LinkageFunctionTypes linkageFunction, DistanceMeasurementTypes distanceMeasurement, Cluster firstCluster, Cluster secondCluster)
 {
     return(Calculate(linkageFunction, distanceMeasurement, firstCluster.GetAllDatapoints(), secondCluster.GetAllDatapoints()));
 }
Ejemplo n.º 7
0
 public RootCluster(Cluster firstCluster, Cluster secondCluster, LinkageFunctionTypes linkageFunction, DistanceMeasurementTypes distanceMeasurement)
 {
     FirstCluster  = firstCluster;
     SecondCluster = secondCluster;
     Distance      = LinkageFunctionHelper.Calculate(linkageFunction, distanceMeasurement, FirstCluster, SecondCluster);
     FirstCluster.ComputeDistance(linkageFunction, distanceMeasurement);
     SecondCluster.ComputeDistance(linkageFunction, distanceMeasurement);
 }