private void SetAverageCoordinates(Centroid centroid) { var samplePoints = SamplePoints.Where(point => point.NearsetPointId == centroid.Id).ToArray(); if (samplePoints.Length != 0) { List <double> averages = new List <double>(); for (var i = 0; i < samplePoints.First().Coordinates.Count; i++) { averages.Add(0.0); } foreach (var samplePoint in samplePoints) { for (var i = 0; i < averages.Count; i++) { averages[i] += samplePoint.Coordinates[i]; } } for (var i = 0; i < averages.Count; i++) { averages[i] /= samplePoints.Length; } MaxCentroidShift = Euclides.CalculateDistance(new SamplePoint(averages), centroid); centroid.Coordinates = averages; } }
private double MeanDistanceToKNearestCentroids(Centroid centroid) { List <double> distances = new List <double>(); foreach (var examinedCentorid in Centroids.Where(e => centroid.Id != e.Id)) { distances.Add(Euclides.CalculateDistance(examinedCentorid, centroid)); } distances.Sort(); return(distances.Where(e => e <= distances[NeighbourNumber]).Sum() / NeighbourNumber); }
public double CalculateNetworkOutput(SamplePoint samplePoint) { List <double> hiddenLayerOutput = new List <double>(); for (int i = 0; i < HiddenNeuronsNumber; i++) { hiddenLayerOutput.Add(BasisFunction(Euclides.CalculateDistance(samplePoint, Centroids[i]), _betas[i])); } _neuron.Inputs = hiddenLayerOutput; _neuron.CalculateOutput(); return(_neuron.Output); }
private void CalculateHiddenLayerOutputs() { _hiddenLayerOutputs.Clear(); for (var j = 0; j < SamplePoints.Count; j++) { SamplePoint samplePoint = SamplePoints[j]; _hiddenLayerOutputs.Add(new List <double>()); for (int i = 0; i < HiddenNeuronsNumber; i++) { _hiddenLayerOutputs[j] .Add(BasisFunction(Euclides.CalculateDistance(samplePoint, Centroids[i]), _betas[i])); } } }
private int GetTheNearestCentroidsId(SamplePoint samplePoint) { int nearestCentroidId = Centroids.First().Id; double nearestDistance = Euclides.CalculateDistance(samplePoint, Centroids.First()); foreach (var centroid in Centroids) { double distance = Euclides.CalculateDistance(samplePoint, centroid); if (distance < nearestDistance) { nearestCentroidId = centroid.Id; nearestDistance = distance; } } return(nearestCentroidId); }