[scikit-learn] Specifying exceptions to ParameterGrid
Roman Yurchak
rth.yurchak at gmail.com
Fri Nov 25 09:52:12 EST 2016
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.
More information about the scikit-learn
mailing list