4

I am trying to apply nested cross-validation with pipeline from the Sklearn library as seen below:

pipeline = imbpipeline(steps=[['smote', SMOTE(random_state=11)],                               
                              ['scaler', MinMaxScaler()],
                              ['classifier', LogisticRegression(random_state=11,
                                                                max_iter=1000)]])
cv_inner = KFold(n_splits=3, shuffle=True, random_state=1)
cv_outer = KFold(n_splits=10, shuffle=True, random_state=1)

param_grid = {'classifier__C':[0.001, 0.01, 0.1, 1.0, 10.0, 100.0, 1000.0]}
grid_search = GridSearchCV(estimator=pipeline,
                           param_grid=param_grid,
                           scoring='accuracy',
                           cv=cv_inner,
                           n_jobs=-1,
                           refit=True)


scores = cross_val_score(grid_search, 
                         train_set, 
                         train_labels, 
                         scoring='accuracy', 
                         cv=cv_outer, 
                         n_jobs=-1)
print('Accuracy: %.3f (%.3f)' % (np.mean(scores), np.std(scores)))

The code works just fine but I can't figure out how to extract the best parameters found with the above procedure.

As per documentation I tried:

grid_search.best_params_

but I get :

AttributeError: 'GridSearchCV' object has no attribute 'best_params_'

which I can't really understand.
Any thoughts?

Danylo Baibak
  • 2,106
  • 1
  • 11
  • 18
paparaki
  • 41
  • 1

1 Answers1

1

Before you can get the best parameters, you need to fit the data. You should add one line:

grid_search.fit(X_train, y_train)
Danylo Baibak
  • 2,106
  • 1
  • 11
  • 18