[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