Объект 'GridSearchCV' не имеет атрибута 'best_params_' при использовании LogisticRegression - PullRequest
0 голосов
/ 20 марта 2020

Ниже приведен код, который я пытаюсь выполнить

# Train a logistic regression model, report the coefficients and model performance 
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
from sklearn.model_selection import cross_val_score
from sklearn import metrics

clf = LogisticRegression().fit(X_train, y_train)
params = {'penalty':['l1','l2'],'dual':[True,False],'C':[0.001, 0.01, 0.1, 1, 10, 100, 1000], 'fit_intercept':[True,False],
        'solver':['saga']}
gridlog = GridSearchCV(clf, params, cv=5, n_jobs=2, scoring='roc_auc')

cv_scores = cross_val_score(gridlog, X_train, y_train)

#find best parameters
print('Logistic Regression parameters: ',gridlog.best_params_) # throws error

Последняя строка кода выше - это то, откуда выдается ошибка. Я использовал этот же код для запуска других моделей. Есть идеи, почему я могу столкнуться с этой проблемой?

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Вы должны соответствовать gridlog сначала. cross_val_score не сделает этого, он возвращает результаты и ничего больше. Следовательно, поскольку gridlog не обучен, он выдает ошибку.

Ниже код прекрасно работает:

from sklearn import datasets
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
diabetes = datasets.load_breast_cancer()
x = diabetes.data[:150]
y = diabetes.target[:150]
clf = LogisticRegression().fit(x, y)
params = {'C':[0.001, 0.01, 0.1, 1, 10, 100, 1000]}
gridlog = GridSearchCV(clf, params, cv=2, n_jobs=2, 
scoring='roc_auc')
gridlog.fit(x,y) # <- missing in your code
cv_scores = cross_val_score(gridlog, x, y)
print(cv_scores)
#find best parameters
print('Logistic Regression parameters: ',gridlog.best_params_)
# result:
Logistic regression parameters: {'C': 1}
0 голосов
/ 21 марта 2020

Ваш код должен быть обновлен так, чтобы классификатор LogisticRegression передавался в GridSearch (не подходит):

from sklearn.datasets import load_breast_cancer # For example only
X_train, y_train = load_breast_cancer(return_X_y=True)

params = {'penalty':['l1', 'l2'],'dual':[True, False],'C':[0.001, 0.01, 0.1, 1, 10, 100, 1000], 'fit_intercept':[True, False],
        'solver':['saga']}

gridlog = GridSearchCV(LogisticRegression(), params, cv=5, n_jobs=2, scoring='roc_auc')
gridlog.fit(X_train, y_train)

#find best parameters
print('Logistic Regression parameters: ', gridlog.best_params_) # Now it displays all the parameters selected by the grid search

Результаты

Logistic Regression parameters:  {'C': 0.1, 'dual': False, 'fit_intercept': True, 'penalty': 'l2', 'solver': 'saga'}

Примечание Как указал @desertnaut, вы не используете cross_val_score для GridSearchCV.

Полный пример использования GridSearch здесь . В примере используется классификатор SV C вместо LogisticRegression, но подход тот же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...