Coeficientes de retorno del objeto Pipeline en sklearn

He encajado un objeto Pipeline con RandomizedSearchCV

 pipe_sgd = Pipeline([('scl', StandardScaler()), ('clf', SGDClassifier(n_jobs=-1))]) param_dist_sgd = {'clf__loss': ['log'], 'clf__penalty': [None, 'l1', 'l2', 'elasticnet'], 'clf__alpha': np.linspace(0.15, 0.35), 'clf__n_iter': [3, 5, 7]} sgd_randomized_pipe = RandomizedSearchCV(estimator = pipe_sgd, param_distributions=param_dist_sgd, cv=3, n_iter=30, n_jobs=-1) sgd_randomized_pipe.fit(X_train, y_train) 

Quiero acceder al atributo coef_ del best_estimator_ pero no puedo hacer eso. He intentado acceder a coef_ con el siguiente código.

sgd_randomized_pipe.best_estimator_.coef_

Sin embargo me sale el siguiente AttributeError …

AttributeError: el objeto ‘Pipeline’ no tiene el atributo ‘coef_’

Los documentos de scikit-learn dicen que coef_ es un atributo de SGDClassifier , que es la clase de mi base_estimator_ .

¿Qué estoy haciendo mal?

Siempre puede usar los nombres que les asignó al hacer la canalización utilizando el dict de named_steps .

 scaler = sgd_randomized_pipe.best_estimator_.named_steps['scl'] classifier = sgd_randomized_pipe.best_estimator_.named_steps['clf'] 

y luego acceda a todos los atributos como coef_ , intercept_ , etc. que están disponibles para el estimador ajustado correspondiente.

Este es el atributo formal expuesto por el Oleoducto como se especifica en la documentación :

named_steps : dict

Atributo de solo lectura para acceder a cualquier parámetro de paso por nombre de usuario. Las claves son nombres de pasos y los valores son parámetros de pasos.

He encontrado una manera de hacer esto mediante la indexación encadenada con el atributo de steps

sgd_randomized_pipe.best_estimator_.steps[1][1].coef_

¿Es esta mejor práctica, o hay otra manera?

Creo que esto debería funcionar:

 sgd_randomized_pipe.named_steps['clf'].coef_