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); }
private void generarLlavesPrivadas() { bool bandera; //Se obtiene el modulo n = ToBigInteger(operaciones.obtenerModulo(1)); // Se genera na que es un no invertible do { nb = RandomBigInteger(2, n); } while (Euclides.moduloInverso(n, nb)); // Se genera ka1 que es un invertible do { kb1 = RandomBigInteger(2, n); bandera = Euclides.moduloInverso(n, kb1); kb1_inv = Euclides.inv; } while (!bandera); // Se genera ka2 que es un invertible do { kb2 = RandomBigInteger(2, n); bandera = Euclides.moduloInverso(n, kb2); kb2_inv = Euclides.inv; if (bandera) { if (kb2 == kb1) { bandera = false; } } } while (!bandera); // Se genera ka3 que es un invertible do { kb3 = RandomBigInteger(2, n); bandera = Euclides.moduloInverso(n, kb3); kb3_inv = Euclides.inv; if (bandera) { if (kb2 == kb3 || kb3 == kb1) { bandera = false; } } } while (!bandera); }