Scikit learn SKCV:如何获取分类报告?

Scikit learn SKCV:如何获取分类报告?,scikit-learn,classification,grid-search,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', CountVectoriz

我使用的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)
我的问题是:从哪里获得
分类报告所需的值

在许多其他例子中,我看到人们将语料库分为训练集和测试集。 但是,由于我正在使用带有kfold交叉验证的
GridSearchCV
,所以我不需要这样做。
那么我如何从
GridSearchCV
中获得这些值呢?

最好的模型是在clf中。您需要将培训数据与此相匹配;然后预测您的测试数据,并使用ytest和YPLED作为分类报告。

最佳模型是clf。最佳估计器。您需要将培训数据与此相匹配;然后预测您的测试数据,并在分类报告中使用ytest和ypreds。

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

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

只是一个问题,
gs_clf.fit(x,y)
是否返回
None
?@BallpointBen为什么?x和y包含数据只是一个问题,
gs_clf.fit(x,y)
返回
None
?@BallpointBen为什么?x和y包含数据感谢您的回复!所以我要明确一点:对于GridSearchCV,我使用了所有的数据(在我的例子中是corpus、data和corpus.target),但是对于最好的分类器,我使用train\u-test\u-split将数据划分为x\u-test、x\u-train、Y\u-test、Y\u-train?是的。如果你想让分数可靠,那么他们需要根据不同的数据集进行测量,而不是用于拟合的数据集。或者如果你有足够的数据,你可以在进行gridsearch之前分割数据。然后,我只通过X_列,而不是将corpus.data传递给gridsearch?谢谢你的回复!所以我要明确一点:对于GridSearchCV,我使用了所有的数据(在我的例子中是corpus、data和corpus.target),但是对于最好的分类器,我使用train\u-test\u-split将数据划分为x\u-test、x\u-train、Y\u-test、Y\u-train?是的。如果你希望分数是可靠的,那么他们需要根据不同的数据集进行测量,而不是用于拟合的数据集。或者如果你有足够的数据,你可以在进行gridsearch之前分割数据。然后,我只通过X_train,而不是将corpus.data传递给gridsearch?