コード例 #1
0
        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;
            }
        }
コード例 #2
0
ファイル: Classification.cs プロジェクト: Buk1m/RDFNetwork
        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);
        }
コード例 #3
0
ファイル: Classification.cs プロジェクト: Buk1m/RDFNetwork
        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);
        }
コード例 #4
0
 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]));
         }
     }
 }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }