2016-11-15 5 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에 필요한 값을 얻었습니까?

다른 많은 예에서 사람들이 코퍼스를 트래킹 세트와 테스트 세트로 나눕니다. 그러나 kfold-cross-validation과 함께 GridSearchCV을 사용하고 있으므로이 작업을 수행 할 필요가 없습니다. 그런 값을 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 내 경우) 사용하지만 최고의 분류 자, 나는 x_test, X_train, Y_test, Y_train train_test_split 사용하여 데이터를 분할 할? – 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) 
관련 문제