sklearn GridSearchCV: как получить классификационный отчет?

Я использую GridSearchCV, как это:

corpus = load_files('corpus')

with open('stopwords.txt', 'r') as f:
    stop_words = [y for x in f.read().split('\n') for y in (x, x.title())]

x = corpus.data

y = corpus.target

pipeline = Pipeline([
    ('vec', CountVectorizer(stop_words=stop_words)),
    ('classifier', MultinomialNB())])

parameters = {'vec__ngram_range': [(1, 1), (1, 2)],
              'classifier__alpha': [1e-2, 1e-3],
              'classifier__fit_prior': [True, False]}

gs_clf = GridSearchCV(pipeline, parameters, n_jobs=-1, cv=5, scoring="f1", verbose=10)

gs_clf = gs_clf.fit(x, y)

joblib.dump(gs_clf.best_estimator_, 'MultinomialNB.pkl', compress=1)

Затем в другом файле, чтобы классифицировать новые документы (не из корпуса), я делаю это:

  classifier = joblib.load(filepath) # path to .pkl file
  result = classifier.predict(tokenlist)

Мой вопрос: где взять значения, необходимые для classification_report?

Во многих других примерах я вижу, как люди разделяют корпус на набор для проверки и набор для тестирования. Тем не менее, так как я использую GridSearchCV с помощью kfold-cross-validation мне не нужно этого делать. Так как я могу получить эти значения из GridSearchCV?

2 ответа

Решение

Лучшая модель в clf.best_estimator_. Вы должны приспособить данные обучения к этому; затем спрогнозируйте ваши тестовые данные и используйте ytest и ypreds для отчета о классификации.

Если у вас есть объект GridSearchCV:

from sklearn.metrics import classification_report
clf = GridSearchCV(....)
clf.fit(x_train, y_train)
classification_report(clf.best_estimator_.predict(x_test), y_test)

Если вы сохранили лучший оценщик и загрузили его, то:

classifier = joblib.load(filepath)
classification_report(classifier.predict(x_test), y_test)
Другие вопросы по тегам