On Wed, Nov 23, 2016 at 12:59 PM, Joel Nothman <joel.noth...@gmail.com> wrote:
> Raghav's example of > > > [{'learning_rate': ['constant', 'invscaling', 'adaptive'], 'solver': > 'sgd'}, {'solver': 'adam'}] > > was not correct. > Oops sorry. Ah I ran into that, corrected it in the snipped but forgot to update the line before the snippet... :) > Should be > > > [{'learning_rate': ['constant', 'invscaling', 'adaptive'], 'solver': > ['sgd']}, {'solver': ['adam']}] > > (Note all values of dicts are lists) > > On 23 November 2016 at 22:52, Jaidev Deshpande <deshpande.jai...@gmail.com > > wrote: > >> >> >> On Wed, 23 Nov 2016 at 16:29 Raghav R V <rag...@gmail.com> wrote: >> >>> Hi! >>> >>> What you could do is specify lists of dicts to group the parameters >>> which apply together in one dict... >>> >>> [{'learning_rate': ['constant', 'invscaling', 'adaptive'], 'solver': >>> 'sgd'}, {'solver': 'adam'}] >>> >>> ```py >>> from sklearn.neural_network import MLPClassifier >>> from sklearn.model_selection import GridSearchCV >>> from sklearn.datasets import make_classification >>> >>> from pandas import DataFrame >>> >>> X, y = make_classification(random_state=42) >>> >>> gs = GridSearchCV(MLPClassifier(random_state=42), >>> param_grid=[{'learning_rate': ['constant', >>> 'invscaling', 'adaptive'], >>> 'solver': ['sgd',]}, >>> {'solver': ['adam',]}]) >>> >>> DataFrame(gs.fit(X, y).cv_results_) >>> ``` >>> >>> Would give >>> >>> [image: image.png] >>> >>> HTH :) >>> >> >> Haha, this is perfect. I didn't know you could pass a list of dicts to >> param_grid. >> >> Thanks! >> >> >>> >>> On Wed, Nov 23, 2016 at 11:15 AM, Jaidev Deshpande < >>> deshpande.jai...@gmail.com> wrote: >>> >>> Hi, >>> >>> Sometimes when using GridSearchCV, I realize that in the grid there are >>> certain combinations of hyperparameters that are either incompatible or >>> redundant. For example, when using an MLP, if I specify the following grid: >>> >>> grid = {'solver': ['sgd', 'adam'], 'learning_rate': ['constant', >>> 'invscaling', 'adaptive']} >>> >>> then it yields the following ParameterGrid: >>> >>> [{'learning_rate': 'constant', 'solver': 'sgd'}, >>> {'learning_rate': 'constant', 'solver': 'adam'}, >>> {'learning_rate': 'invscaling', 'solver': 'sgd'}, >>> {'learning_rate': 'invscaling', 'solver': 'adam'}, >>> {'learning_rate': 'adaptive', 'solver': 'sgd'}, >>> {'learning_rate': 'adaptive', 'solver': 'adam'}] >>> >>> Now, three of these are redundant, since learning_rate is used only for >>> the sgd solver. Ideally I'd like to specify these cases upfront, and for >>> that I have a simple hack (https://github.com/jaidevd/ja >>> rvis/blob/master/jarvis/cross_validation.py#L38). Using that yields a >>> ParameterGrid as follows: >>> >>> [{'learning_rate': 'constant', 'solver': 'adam'}, >>> {'learning_rate': 'invscaling', 'solver': 'adam'}, >>> {'learning_rate': 'adaptive', 'solver': 'adam'}] >>> >>> which is then simply removed from the original ParameterGrid. >>> >>> I wonder if there's a simpler way of doing this. Would it help if we had >>> an additional parameter (something like "grid_exceptions") in GridSearchCV, >>> which would remove these dicts from the list of parameters? >>> >>> Thanks >>> >>> _______________________________________________ >>> scikit-learn mailing list >>> scikit-learn@python.org >>> https://mail.python.org/mailman/listinfo/scikit-learn >>> >>> >>> >>> >>> -- >>> Raghav RV >>> https://github.com/raghavrv >>> >>> _______________________________________________ >>> scikit-learn mailing list >>> scikit-learn@python.org >>> https://mail.python.org/mailman/listinfo/scikit-learn >>> >> >> _______________________________________________ >> scikit-learn mailing list >> scikit-learn@python.org >> https://mail.python.org/mailman/listinfo/scikit-learn >> >> > > _______________________________________________ > scikit-learn mailing list > scikit-learn@python.org > https://mail.python.org/mailman/listinfo/scikit-learn > > -- Raghav RV https://github.com/raghavrv
_______________________________________________ scikit-learn mailing list scikit-learn@python.org https://mail.python.org/mailman/listinfo/scikit-learn