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)