2016-11-15 7 views
0

私はこのようなGridSearchCVを使用しています:sklearn 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からこれらの値を取得するにはどうすればよいですか?

+0

問題だけではなく、 'gs_clf.fit(X、Yを行います) 'return' None'? – BallpointBen

+0

@BallpointBenなぜでしょうか? xとyにはデータが含まれています – user3813234

答えて

1

最高のモデルはclf.best_estimator_です。これにトレーニングデータを合わせる必要があります。テストデータを予測し、分類レポートにytestとypredsを使用します。

+0

あなたの返信ありがとう!だから私はGridSearchCVのためにすべてのデータ(私の場合はcorpus、data、corpus.target)を使用しますが、最良の分類子のために、私はtrain_test_splitを使ってx_test、X_train、Y_test、Y_trainにデータを分割しますか? – user3813234

+0

はい。スコアを信頼できるものにするには、フィッティングに使用するセットとは異なるデータセットに対して測定する必要があります。 – simon

+0

または十分なデータがある場合は、gridsearchを実行する前にデータを分割することができます。 – simon

0

あなたは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) 
関連する問題