sklearn GridSearchCV:如何获得分类报告?

时间:2016-11-15 18:35:47

标签: scikit-learn classification grid-search

我正在使用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 个答案:

答案 0 :(得分:2)

最好的模型是clf.best_estimator_。您需要将训练数据与此相符合;然后预测您的测试数据,并使用ytest和ypreds进行分类报告。

答案 1 :(得分:1)

如果你有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)