C#: перекрестная проверка для алгоритма NEAT - ENCOG - PullRequest
0 голосов
/ 23 февраля 2020

Я собрал приведенный ниже код для создания и тестирования нейронной сети NEAT с использованием библиотеки машинного обучения ENCOG. Это модифицированная версия примера XOR, представленного в документации , и она работает и работает относительно хорошо.

Однако, хотя я хотел бы включить перекрестную проверку, чтобы сделать результаты более надежными и во избежание чрезмерной подгонки моей сети, кажется, нигде не упоминается, как этого можно достичь.

Подобные вопросы были заданы здесь и здесь , но имеют не очень много дало с помощью ответа.

Есть ли способ сделать это, используя функции, встроенные в библиотеку ENCOG, или каким-либо альтернативным способом? Как уже упоминалось, найденная мною документация мало чем помогла.

static void Main(string[] args)
        {
            // Load the data that we will attempt to model.
            string dataFile;
            dataFile = "C:/Users/`/Desktop/C# Projects/Trainer/Data-train.csv";
            if (File.Exists(dataFile))
            {
                Console.WriteLine("File located");
            }
            else
            {
                Console.WriteLine("File not found");
                Console.ReadKey();
                Environment.Exit(0);
            }

            var data = new VersatileMLDataSet(new CSVDataSource(dataFile, false,
                CSVFormat.DecimalPoint));
            data.DefineSourceColumn("TD3$CURMON", 1, ColumnType.Continuous);
            data.DefineSourceColumn("TD3$+1_M", 2, ColumnType.Continuous);
            data.DefineSourceColumn("TD3$+2_M", 3, ColumnType.Continuous);
            data.DefineSourceColumn("TD3$+3_M", 4, ColumnType.Continuous);

            ColumnDefinition outputColumn = data.DefineSourceColumn("14DAY-AHEAD$TD3$CURMON", 5,
                ColumnType.Nominal);

            data.Analyze();
            data.DefineSingleOutputOthersInput(outputColumn);

            var model = new EncogModel(data);
            model.SelectMethod(data, MLMethodFactory.TypeNEAT);

            data.Normalize();

            NEATPopulation pop = new NEATPopulation(39, 1, 2000);
            pop.Reset();
            pop.InitialConnectionDensity = 1.0; // not required, but speeds processing.

            IMLDataSet trainingSet = data;
            ICalculateScore score = new TrainingSetScore(trainingSet);

            // train the neural network
            TrainEA train = NEATUtil.ConstructNEATTrainer(pop, score);
            EncogUtility.TrainToError(train, 0.11);

            // test the neural network
            Console.WriteLine(@"Neural Network Results:");
            NEATNetwork network = (NEATNetwork)train.CODEC.Decode(train.BestGenome);
            EncogUtility.Evaluate(network, trainingSet);

Редактировать: Я нашел упоминание об алгоритмах NEAT, которые используются с 10-кратной перекрестной проверкой в ​​ENCOG здесь , поэтому Кажется очевидным, что это возможно.

...