Генетические алгоритмы: фитнес-функция не работает должным образом

У меня есть двоичный набор данных (m x n) m экземпляров и n функций с m >> n. И есть целевая переменная или атрибут класса, также двоичный. Я хочу сделать выбор функции с использованием генетического алгоритма. Я решил использовать 0/ 1 строки в GA, где 0, если функция не выбрана, и 1, если функция выбрана. Я генерировал случайные K наборов битовых строк. Таким образом, каждая K из этих битовых строк представляет возможный выбор признаков. Чтобы разработать фитнес-функцию, я тренирую нейронную сеть с каждым из этих K наборов функций (моделей), а затем на основе точности отдельного набора валидации я создал эту фитнес-функцию для каждой модели:-

fitness=tradeoffk*Valacc+(1-tradeoffk)*(ones(no_of_models,1)*n-featSel)/maxFeat;

Эта функция пригодности подобна компромиссу между количеством функций, переданных для обучения (featSel), и точностью проверки, сообщенной нейронной сетью. Я устанавливаю различные значения для tradeoffk, такие как 0,5, 0,2 и 0,8.

Я провел 10 итераций ГА. Каждая итерация была сделана для 20 генераций и пыталась проверить, как растет фитнес-функция. Тем не менее, нет никаких существенных изменений в фитнес-функции. В GA, как правило, ожидается, что фитнес-функция будет расти, а затем стабилизироваться, но здесь она будет расти очень незначительно.

Например, это пример вывода одной из следующих итераций:

gen=001  avgFitness=0.808   maxFitness=0.918
gen=002  avgFitness=0.808   maxFitness=0.918
gen=003  avgFitness=0.815   maxFitness=0.918
gen=004  avgFitness=0.815   maxFitness=0.918
gen=005  avgFitness=0.817   maxFitness=0.918
gen=006  avgFitness=0.818   maxFitness=0.918
gen=007  avgFitness=0.818   maxFitness=0.918
gen=008  avgFitness=0.819   maxFitness=0.918
gen=009  avgFitness=0.819   maxFitness=0.918
gen=010  avgFitness=0.819   maxFitness=0.918
gen=011  avgFitness=0.819   maxFitness=0.918
gen=012  avgFitness=0.819   maxFitness=0.918
gen=013  avgFitness=0.819   maxFitness=0.918
gen=014  avgFitness=0.819   maxFitness=0.918
gen=015  avgFitness=0.819   maxFitness=0.918
gen=016  avgFitness=0.819   maxFitness=0.918
gen=017  avgFitness=0.819   maxFitness=0.918

Кроме того, нейронной сети требуется много времени для обучения ( > 2 часа в течение 20 поколений). Может ли кто-нибудь дать дальнейшие предложения, и где это может пойти не так?!

1 ответ

Вы можете использовать линейно-дискриминантный анализ (LDA) для своей модели валидации вместо нейронной сети. Это гораздо быстрее обучать, но, конечно, не может представлять нелинейные отношения. Вы пробовали генетическое программирование? У него есть встроенный выбор объектов, поскольку он пытается построить модель и выбрать объекты одновременно. Вы можете попробовать HeuristicLab, который имеет довольно мощную реализацию генетического программирования, которая также включает в себя классификацию.

Другие вопросы по тегам