On Fri, 25 Nov 2016 at 20:24 Roman Yurchak <rth.yurchak@gmail.com> wrote:
On 24/11/16 09:00, Jaidev Deshpande wrote:
well, `param_grid` in GridSearchCV can also be a list of
dictionaries,
so you could directly specify the cases you are interested in
(instead
of the full grid - exceptions), which might be simpler?
Actually now that I think of it, I don't know if it will be necessarily simpler. What if I have a massive grid and only few exceptions? Enumerating the complement of that small subset would be much more expensive than specifying the exceptions.
The solution indicated by Raghav is most concise if that works for you.
Otherwise, in general, if you want to define the parameters as the full grid with a few exceptions, without changing the GirdSearchCV API, you could always try something like,
``` from sklearn.model_selection import GridSearchCV, ParameterGrid from sklearn.neural_network import MLPClassifier
grid_full = {'solver': ['sgd', 'adam'], 'learning_rate': ['constant', 'invscaling', 'adaptive']}
def exception_handler(args): # custom function shaping the domain of valid parameters if args['solver'] == 'adam' and args['learning_rate'] != 'constant': return False else: return True
def wrap_strings(args): # all values of dicts provided to GridSearchCV must be lists return {key: [val] for key, val in args.items()}
grid_tmp = filter(exception_handler, ParameterGrid(grid_full)) grid = [wrap_strings(el) for el in grid_tmp]
gs = GridSearchCV(MLPClassifier(random_state=42), param_grid=grid) ``` That's quite similar to what you were suggesting in the original post.
Yes, also a lot more concise I guess. This way I just have to keep writing an exception handler instead of subclassing. Thanks!
_______________________________________________ scikit-learn mailing list scikit-learn@python.org https://mail.python.org/mailman/listinfo/scikit-learn