コード例 #1
0
        private void SimplePerceptronTrain()
        {
            InitializeWeights();
            decimal tempSum = 0;

            for (int i = 0; i < iterationLimit; i++)
            {
                foreach (Dots member in ExtractData.GetDataTrain())
                {
                    #region Compute Output
                    for (int j = 0; j < numClusters; j++)
                    {
                        decimal a = Activation(member.X, ClusterCenters[j, 0], ClusterSpreads[j]);
                        decimal w = Weights[j];
                        tempSum += a * w;
                    }
                    #endregion

                    #region UpdateWeights
                    decimal delta = 0;
                    for (int j = 0; j < numClusters; j++)
                    {
                        delta       = trainingCoefficient * (member.Y - tempSum) * Activation(member.X, ClusterCenters[j, 0], ClusterSpreads[j]);
                        Weights[j] += delta;
                    }


                    #endregion

                    tempSum = 0;
                }
            }
        }
コード例 #2
0
        private void FindSpreads()
        {
            ClusterSpreads = new decimal[numClusters];

            for (int i = 0; i < numClusters; i++)
            {
                ClusterSpreads[i] = Utils.SimpleDistance(ClusterCenters[i, 0], ExtractData.GetDataTrain().Max(x => x.X)) / 2;
            }
        }
コード例 #3
0
 public RBF(int ParamNumClusters, int numOfIterations)
 {
     iterationLimit = numOfIterations;
     numClusters    = ParamNumClusters;
     AssignClusterCenters(numClusters);
     InitialCluster();
     FindSpreads();
     SimplePerceptronTrain();
     SimplePerceptronValidate();
     List <Dots> asdasd = ExtractData.GetDataTrain();
 }
コード例 #4
0
 private void ReCalculateCenters()
 {
     for (int i = 0; i < numClusters; i++)
     {
         decimal count = Convert.ToDecimal(ExtractData.GetDataTrain().Where(x => x.BelongingCluster[numClusters - 1] == i + 1).Count());
         decimal summ  = ExtractData.GetDataTrain().Where(x => x.BelongingCluster[numClusters - 1] == i + 1).Sum(y => y.X);
         if (count != 0)
         {
             ClusterCenters[i, 0] = summ / count;
         }
     }
 }
コード例 #5
0
        private void InitialCluster()
        {
            foreach (Dots item in ExtractData.GetDataTrain())
            {
                decimal Dist = 500000m;
                for (int i = 0; i < numClusters; i++)
                {
                    item.DistanceToCentersByX[i] = Utils.SimpleDistance(ClusterCenters[i, 0], item.X);
                }

                for (int i = 0; i < numClusters; i++)
                {
                    if (item.DistanceToCentersByX[i] < Dist)
                    {
                        Dist = item.DistanceToCentersByX[i];
                        item.BelongingCluster[numClusters - 1] = i + 1;
                    }
                }
            }

            ReCalculateCenters();


            foreach (Dots item in ExtractData.GetDataValidation())
            {
                decimal Dist = 500000m;
                for (int i = 0; i < numClusters; i++)
                {
                    item.DistanceToCentersByX[i] = Utils.SimpleDistance(ClusterCenters[i, 0], item.X);
                }

                for (int i = 0; i < numClusters; i++)
                {
                    if (item.DistanceToCentersByX[i] < Dist)
                    {
                        Dist = item.DistanceToCentersByX[i];
                        item.BelongingCluster[numClusters - 1] = i + 1;
                    }
                }
            }
        }