I had a meeting with Grey Nearing (NASA - Goddard) to discuss hyperparameterization in hydrology, for statistical models as in Elm or for physical hydrology models. We discussed a few improvements to do on the evolutionary algorithms for statistical models:
nsga_control = {
'select_method': 'selNSGA2',
'crossover_method': 'cxTwoPoint', # TODO can we modify for float/int
'mutate_method': 'mutUniformInt', # TODO same comment as ^^
'init_pop': 'random',
'indpb': 0.6, # probability of each attribute changing
'mutpb': 0.9, # probability of mutation
'cxpb': 0.5, # probability of crossover
'eta': 20, # eta: Crowding degree of the crossover
# A high eta will produce children resembling
# to their parents, while a small eta will
# produce solutions much more different.
'ngen': 3, # Number of generations
'mu': 64, # Population size
'k': 24, # Number selected to move to next generation
'early_stop': {'threshold': [0, 1, 1], 'agg': all},
# alternatively 'early_stop': {'abs_change': [10], 'agg': 'all'},
# alternatively early_stop: {percent_change: [10], agg: all}
# alternatively early_stop: {threshold: [10], agg: any}
}
I had a meeting with Grey Nearing (NASA - Goddard) to discuss hyperparameterization in hydrology, for statistical models as in Elm or for physical hydrology models. We discussed a few improvements to do on the evolutionary algorithms for statistical models:
elm.pipeline.evolve_trainand related code) where some parameters are continuous variables rather than enumerated choices. This would involve writing a mutation method that is custom for each parameter, usingmutUniformInt(see example below) for discrete choice problems, and a different mutation method fromdeapfor continuous parameters.np.random.lognormal?ensembleorfit_ensemblewhere custom model selection functions are used, we need to consider cases where the model structure is changing throughout the optimization, e.g. choices for number of components in a PCA preprocessing step that are[4, 5, None]to indicate 4 or 5 components or no PCA at all.[2,3,4]foraand one of[10,20,30]forbbut never the combination of(2,20)fora,b. I think this is handled by the param grid specification in scikit-learn and we should follow that convention.Example NSGA-2 control specification for
elm.pipeline.evolve_trainas it works currently from Phase I: