Example #1
0
        public void TestPredictionWindowSize()
        {
            using (StreamWriter sw = new StreamWriter(@"E:\repos\RBFNetwork\windowSize.txt"))
            {
                for (int i = 10; i <= 10; i++)
                {
                    var    data         = GetTemperatureDataAsync(95, i).Result;
                    int    accuracy     = 0;
                    var    topology     = new Topology(data.trainData.ClassesNames?.Count ?? 1, 0.01, data.trainData.ColumnCount);
                    var    network      = new RBFNeuralNetwork(topology);
                    double error        = network.Train(data.trainData, 100, false);
                    double predictError = 0;
                    foreach (Record record in data.testData.Records)
                    {
                        var expected = record.Expected[0];
                        var output   = network.Predict(record.InputData)[0];
                        var diff     = expected - output;
                        predictError += diff * diff;

                        if ((expected * data.inputsSum - output * data.inputsSum) <= 2)
                        {
                            accuracy++;
                        }
                    }
                    predictError = Math.Sqrt(predictError / (data.testData.RowCount - 1));
                    Trace.WriteLine($"Current accuracy: {accuracy} of {data.testData.Records.Count} = {accuracy * 100 / data.testData.Records.Count}%");
                    var predicted = accuracy * 100 / data.testData.RowCount;
                    sw.WriteLine($"{i}   {predictError}   {predicted}");
                }
            }
        }
Example #2
0
        // Прогнозирование
        public List <DataPoint> Predict()
        {
            List <DataPoint> result = new List <DataPoint>();
            int k = 1;

            // Для нормализации
            double inputsSum = testDataset.Records.Sum(r => r.InputData.Sum(x => x * x) + r.Expected.Sum(x => x * x));

            inputsSum = Math.Sqrt(inputsSum);

            // Нормализация
            testDataset.Normalize();

            foreach (Record record in testDataset.Records)
            {
                var expected = record.Expected[0];
                var output   = neuralNetwork.Predict(record.InputData)[0];

                // Разница между ожидаемым и выходным
                var diff = expected - output;

                // Набор точек на графике
                // к - точка на графике
                var dp = new DataPoint(expected * inputsSum, output * inputsSum, diff * diff, k);
                result.Add(dp);
                k++;
            }
            return(result);
        }