private void Initialize(int id, bool malignant, TumourFeatures mean, TumourFeatures standardError, TumourFeatures extreme) { Id = id; Malignant = malignant; Mean = mean; StandardError = standardError; Extreme = extreme; }
public double CalculateSimilarity(TumourFeatures other, List <float> weights) { float maxRadius = 30; float maxTexture = 31; float maxPerimeter = 200; float maxArea = 2500; float maxConcavity = 140; float maxConcavePoints = 340; float maxSymmetry = 400; float maxFractalDimension = 250; float minRadius = 1; float minTexture = 1; float minPerimeter = 1; float minArea = 100; float minConcavity = 1; float minConcavePoints = 10; float minSymmetry = 0; float minFractalDimension = 0; List <float> similarities = new List <float>() { 1 - (Math.Abs(other.Radius - this.Radius) / maxRadius - minRadius), 1 - (Math.Abs(other.Texture - this.Texture) / maxTexture - minTexture), 1 - (Math.Abs(other.Perimeter - this.Perimeter) / maxPerimeter - minPerimeter), 1 - (Math.Abs(other.Area - this.Area) / maxArea - minArea), 1 - (Math.Abs(other.Concavity - this.Concavity) / maxConcavity - minConcavity), 1 - (Math.Abs(other.ConcavePoints - this.ConcavePoints) / maxConcavePoints - minConcavePoints), 1 - (Math.Abs(other.Symmetry - this.Symmetry) / maxSymmetry - minSymmetry), 1 - (Math.Abs(other.FractalDimension - this.FractalDimension) / maxFractalDimension - minFractalDimension) }; float similarityTotal = 0; float weightSum = 0; for (int index = 0; index < similarities.Count; index++) { similarityTotal += weights[index] * similarities[index]; weightSum += weights[index]; } similarityTotal = similarityTotal / weightSum; return(similarityTotal); }