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

3

我正在这样使用 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的值?
在许多其他示例中,我看到人们将语料库分成训练集和测试集。然而,由于我正在使用带有kfold交叉验证的GridSearchCV,所以我不需要这样做。那么我该如何从GridSearchCV获取这些值?

只是一个问题,gs_clf.fit(x, y) 是否会返回 None - BallpointBen
@BallpointBen 为什么不会呢?x和y包含数据。 - user3813234
2个回答

5
如果您有GridSearchCV对象:
from sklearn.metrics import classification_report
clf = GridSearchCV(....)
clf.fit(x_train, y_train)
classification_report(y_test,clf.best_estimator_.predict(x_test))

如果您已经保存了最佳估算器并加载它,那么:
classifier = joblib.load(filepath)
classification_report(y_test,classifier.predict(x_test))

2
最佳模型位于clf.best_estimator_中。您需要将训练数据拟合到此模型中,然后预测测试数据并使用ytest和ypreds进行分类报告。

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - user3813234
是的。如果您希望分数可靠,那么它们需要针对与用于拟合的数据集不同的数据集进行测量。 - simon
或者如果您有足够的数据,您可以在进行网格搜索之前将数据拆分。 - simon
那么,我只需要将X_train传递给GridSearch,而不是传递corpus.data吗? - user3813234

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接