Saltar al contenido

Alterne diferentes modelos en Pipeline para GridSearchCV

Nuestros mejores desarrolladores han agotado sus reservas de café, buscando a tiempo completo por la respuesta, hasta que Armando encontró el arreglo en Bitbucket así que en este momento la comparte con nosotros.

Solución:

Supongamos que desea utilizar PCA y TruncatedSVD como paso de reducción de la dimensionalidad.

pca = decomposition.PCA()
svd = decomposition.TruncatedSVD()
svm = SVC()
n_components = [20, 40, 64]

Puedes hacerlo:

pipe = Pipeline(steps=[('reduction', pca), ('svm', svm)])

# Change params_grid -> Instead of dict, make it a list of dict
# In the first element, pass parameters related to pca, and in second related to svd

params_grid = [
'svm__C': [1, 10, 100, 1000],
'svm__kernel': ['linear', 'rbf'],
'svm__gamma': [0.001, 0.0001],
'reduction':pca,
'reduction__n_components': n_components,
,

'svm__C': [1, 10, 100, 1000],
'svm__kernel': ['linear', 'rbf'],
'svm__gamma': [0.001, 0.0001],
'reduction':svd,
'reduction__n_components': n_components,
'reduction__algorithm':['randomized']
]

y ahora simplemente pase el objeto de canalización a gridsearchCV

grd = GridSearchCV(pipe, param_grid = params_grid)

Vocación grd.fit() buscará los parámetros en ambos elementos de la lista params_grid, utilizando todos los valores de one a la vez

Mire mi otra respuesta para obtener más detalles: tubería “paralela” para obtener el mejor modelo usando gridsearch

Una solución alternativa que no requiere prefix los nombres de los estimadores en la grilla de parámetros son los siguientes:

from sklearn.ensemble import RandomForestClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression

# the models that you want to compare
models = 
    'RandomForestClassifier': RandomForestClassifier(),
    'KNeighboursClassifier': KNeighborsClassifier(),
    'LogisticRegression': LogisticRegression()


# the optimisation parameters for each of the above models
params = 
    'RandomForestClassifier': 
            "n_estimators"      : [100, 200, 500, 1000],
            "max_features"      : ["auto", "sqrt", "log2"],
            "bootstrap": [True],
            "criterion": ['gini', 'entropy'],
            "oob_score": [True, False]
            ,
    'KNeighboursClassifier': 
        'n_neighbors': np.arange(3, 15),
        'weights': ['uniform', 'distance'],
        'algorithm': ['ball_tree', 'kd_tree', 'brute']
        ,
    'LogisticRegression': 
        'solver': ['newton-cg', 'sag', 'lbfgs'],
        'multi_class': ['ovr', 'multinomial']
          

y puedes definir:

from sklearn.model_selection import GridSearchCV

def fit(train_features, train_actuals):
        """
        fits the list of models to the training data, thereby obtaining in each 
        case an evaluation score after GridSearchCV cross-validation
        """
        for name in models.keys():
            est = models[name]
            est_params = params[name]
            gscv = GridSearchCV(estimator=est, param_grid=est_params, cv=5)
            gscv.fit(train_features, train_actuals)
            print("best parameters are: ".format(gscv.best_estimator_))

básicamente recorriendo los diferentes modelos, cada modelo se refiere a su propio conjunto de parámetros de optimización a través de un diccionario. Por supuesto no olvides pasar el diccionario de modelos y parámetros al fit función, en caso de que no las tenga como variables globales. Eche un vistazo a este proyecto de GitHub para obtener una descripción general más completa.

Aquí tienes las comentarios y puntuaciones

Si tienes algún impasse o capacidad de desarrollar nuestro enunciado eres capaz de ejecutar una explicación y con placer lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *