Grid

lazygrid.grid

lazygrid.grid.generate_grid(elements: list, lazy: bool = True, **kwargs) → list

Generate all possible combinations of sklearn Pipelines given the input steps.

Parameters:
  • elements – List of elements used to generate the pipelines
  • lazy – If True it generates LazyPipelines objects; if False it generates standard sklearn Pipeline objects
  • kwargs – Keyword arguments to generate Pipeline objects
Returns:

List of pipelines

Return type:

list

Example

>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.svm import SVC
>>> from sklearn.feature_selection import SelectKBest, f_classif
>>> from sklearn.preprocessing import RobustScaler, StandardScaler
>>> import lazygrid as lg
>>>
>>> preprocessors = [StandardScaler(), RobustScaler()]
>>> feature_selectors = [SelectKBest(score_func=f_classif, k=1), SelectKBest(score_func=f_classif, k=2)]
>>> classifiers = [RandomForestClassifier(random_state=42), SVC(random_state=42)]
>>>
>>> elements = [preprocessors, feature_selectors, classifiers]
>>>
>>> pipelines = lg.grid.generate_grid(elements)

Generate all possible combinations of models.

Parameters:
  • model – Model architecture
  • model_params – Model parameters. For each key the dictionary should contain a list of possible values
  • fit_params – Fit parameters. For each key the dictionary should contain a list of possible values
Returns:

Models and their corresponding fit parameters

Return type:

Tuple

Example

>>> import keras
>>> from keras import Sequential
>>> from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
>>> import lazygrid as lg
>>> from keras.wrappers.scikit_learn import KerasClassifier
>>>
>>> # define keras model generator
>>> def create_keras_model(input_shape, optimizer, n_classes):
...     kmodel = Sequential()
...     kmodel.add(Conv2D(32, kernel_size=(5, 5), strides=(1, 1), activation='relu', input_shape=input_shape))
...     kmodel.add(MaxPooling2D(pool_size=(2, 2)))
...     kmodel.add(Flatten())
...     kmodel.add(Dense(1000, activation='relu'))
...     kmodel.add(Dense(n_classes, activation='softmax'))
...
...     kmodel.compile(loss=keras.losses.categorical_crossentropy,
...                    optimizer=optimizer, metrics=['accuracy'])
...     return kmodel
>>>
>>> # cast keras model into sklearn model
>>> kmodel = KerasClassifier(create_keras_model)
>>>
>>> # define all possible model parameters of the grid
>>> model_params = {"optimizer": ['SGD', 'RMSprop'], "input_shape": [(28, 28, 3)], "n_classes": [10]}
>>> fit_params = {"epochs": [5, 10, 20], "batch_size": [10, 20]}
>>>
>>> # generate all possible models given the parameters' grid
>>> models, fit_parameters = lg.grid.generate_grid_search(kmodel, model_params, fit_params)