Multi-obj optimization and fit time control
Created by: YanaPolonskaya
-
Была добавлена возможность использования алгоритмов многокритериальной оптимизации. Практически все инструменты для этого я взяла из deap, пришлось немного переделать класс fitness из deap под multi-objective fitness (это вынесено в отдельный файл). В selection можно добавить любой тип многокритериальной селекции из deap(сейчас я добавила SPEA2 и NSGA2 селекции, интересно бы попробовать например selNSGA3WithMemory, но т к тут немного по-другому надо добавлять поскольку это класс с памятью которая должна обновляться подумаю как лучше встроить его чтобы выглядело норм). Пришлось значительно изменить вычисление метрики в gp-composer-е.
-
Добавила так же прерывание fit-а модели при помощи библиотеки multiprocessing (создается процесс, и он прерывается в том случае если модель фитится более заданного ограничения по времени). По умолчанию эта опция отключена, но если передать в GPComposerRequirements параметр model_fit_time_constraint (например сейчас в credit_scoring экспериментах я задала model_fit_time_constraint=900 (15 мин)) то ограничение будет работать, и в случае если обучение модели не входит в рамки заданного кол-ва времени она исключается из популяции.
-
Добавила визуализацию изменчивости Парето-Фронта (зеленые точки - все решения, красным - решения из фронта).
-
Так же из за того что для каждого fit создается процесс начало выскакивать много повторяющихся warning-ов от tensor-flow (которые были до этого). Сделала чтобы warning-и от tensor-flow не выводились. Из за этого возникает проблема в pep8speaks. Дело в том, что в keras eval строку "os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'" необходимо добавлять раньше, чем tf импортирована, а это не по pep8.
-
Добавлено сохранение времени fit цепочки в ее свойствах, чтобы можно было на графике нарисовать (и данная хар-ка включена в качестве метрики сложности отдельной).
-
Визуализация сходимости objectiv-ов при помощи boxplot-ов.
-
Исправлено еще 2 ошибки связанные с зависанием алгоритма (в мутации и скрещивании). Это происходило из-за того что data-models вставали в root в ходе эволцюции. Мы не учитываем что data models в качестве root быть не может и в качестве primary и secondary models во всех экспериментах у нас подаются одинаковые модели. Чтобы такую ошибку нельзя было совершить добавила проверку в builder-е.