示例#1
0
        /// <summary>
        /// Calculates the minimum and maximum values for each attribute
        /// </summary>
        /// <returns>Returns min and max KPoints</returns>
        public MinMaxWeigts GetMinMaxWeights()
        {
            KPoint min = PointList[0].Clone();
            KPoint max = PointList[0].Clone();

            for (int i = 1; i < Count; i++)
            {
                for (int k = 0; k < Dimensions; k++)
                {
                    double attributeValue = this[i][k];
                    if (attributeValue < min[k])
                    {
                        min[k] = attributeValue;
                    }
                    else if (attributeValue > max[k])
                    {
                        max[k] = attributeValue;
                    }
                }
            }

            return(new MinMaxWeigts {
                Min = min, Max = max
            });
        }
示例#2
0
        public KPoint(KPoint min, KPoint max, Random rng)
        {
            Dimensions  = min.Dimensions;
            Coordinates = new double[Dimensions];

            //generate random coordinates
            for (int k = 0; k < Dimensions; k++)
            {
                Coordinates[k] = min[k] + rng.NextDouble() * (max[k] - min[k]);
            }
        }
示例#3
0
        public double distanceSquared(KPoint point)
        {
            if (Dimensions != point.Dimensions)
            {
                throw new Exception("Incompatible Dimensions");
            }

            double sum = 0.0;

            for (int i = 0; i < Dimensions; i++)
            {
                sum += Math.Pow(point[i] - this[i], 2);
            }
            return(sum);
        }
示例#4
0
        public double GetDistance(KPoint point, DistType type)
        {
            switch (type)
            {
            case DistType.Euclidean:
                return(elucideanDistance(point));

            case DistType.PMCC:
                return(1.0 - getPMCC(point));

            case DistType.Manhattan:
                return(minkowskiDistance(point, 1.0));

            case DistType.Chebyshev:
                return(minkowskiDistance(point, 20.0));
            }
            return(elucideanDistance(point));
        }
示例#5
0
        public double minkowskiDistance(KPoint point, double p)
        {
            if (Dimensions != point.Dimensions)
            {
                throw new Exception("Incompatible Dimensions");
            }
            if (p < 1.0)
            {
                throw new Exception("Invalid Metric");
            }

            double sum = 0.0;

            for (int i = 0; i < Dimensions; i++)
            {
                sum += Math.Pow(Math.Abs(point[i] - this[i]), p);
            }
            return(Math.Pow(sum, 1 / p));
        }
示例#6
0
        public double getPMCC(KPoint endPoint)
        {
            double ux, uy, vx, vy, w;

            ux = uy = vx = vy = w = 0.0;
            for (int i = 0; i < Coordinates.Length; i++)
            {
                ux += Coordinates[i];
                uy += endPoint[i];

                vx += Coordinates[i] * Coordinates[i];
                vy += endPoint[i] * endPoint[i];

                w += Coordinates[i] * endPoint[i];
            }
            double n           = (double)Coordinates.Length;
            double numerator   = n * w - ux * uy;
            double denominator = Math.Sqrt((n * vx - ux * ux) * (n * vy - uy * uy));

            return(numerator / denominator);
        }
示例#7
0
 public double elucideanDistance(KPoint point)
 {
     return(Math.Sqrt(distanceSquared(point)));
 }