Я только начал изучать NEAT (Нейроэволюция расширенных топологий) и заметил, что основное внимание уделяется применению алгоритма для задач обучения с подкреплением. После игры с исходным кодом из: https://github.com/CodeReclaimers/neat-python я хотел посмотреть, как алгоритм работает над контролируемыми задачами обучения, такими как прогнозирование цен на жилье.
Мой набор данных имеет 10 функций (room_count, year_build, price, bathroom_count ...), и я выполнил часть обработки данных и стандартизацию числовых значений. У меня проблема с применением алгоритма NEAT для прогнозирования значений в столбце цены.
Основная проблема, с которой я столкнулся, связана с функцией фитнеса. Как я должен измерить оценку пригодности каждой популяции? Я пытался вычислить оценку Rˆ2 для каждого генома, но конечный результат был очень медленным (на завершение 5000 строк ушло более часа, а конечный результат был не таким уж большим)
def eval_genomes(genomes, config):
for genome_id, genome in genomes:
output = []
genome.fitness = 0
net = neat.nn.FeedForwardNetwork.create(genome, config)
for i in range(0,x_train.shape[0]): // x_train.shape[0] = number of rows in my training dataset
output.append(net.activate(x_train.iloc[i])[0]) // pass all the row values (room_count, year_build, bathroom_count...) of the training set
genome.fitness = metrics.r2_score(output, Y_train)
Я был бы признателен за любой вид помощь / подсказка для определения хорошей фитнес-функции.