/// <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 }); }
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]); } }
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); }
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)); }
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)); }
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); }
public double elucideanDistance(KPoint point) { return(Math.Sqrt(distanceSquared(point))); }