Я собрал приведенный ниже код для создания и тестирования нейронной сети 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 здесь , поэтому Кажется очевидным, что это возможно.