2014-09-23 8 views
3

짧은 문서 세트에 분류자를 훈련시키고 이진 분류 작업에 적합한 f1 및 정확도 점수를 얻은 후에 절취했습니다.데이터를 라벨링하기 위해 countVectorizer.fit_transform()과 함께 pickled 분류기를 사용하는 방법

훈련 동안, I는 countVectorizer CV sciki이 배우고 이용하여 기능의 수를 감소 :

cv = CountVectorizer(min_df=1, ngram_range=(1, 3), max_features = 15000) 

을하고 변환 열차 테스트 세트를 획득하기 위해 상기 fit_transform()transform() 방법을 사용했을

transformed_feat_train = numpy.zeros((0,0,)) 
    transformed_feat_test = numpy.zeros((0,0,)) 

    transformed_feat_train = cv.fit_transform(trainingTextFeat).toarray() 
    transformed_feat_test = cv.transform(testingTextFeat).toarray() 

분류기를 테스트하고 테스트 할 때 모두 잘되었습니다. 그러나 fit_transform()transform()을 사용하여 눈에 보이지 않은 레이블이없는 데이터의 레이블을 예측하기 위해 피클 레이션 된 분류 된 버전을 사용하는 방법을 잘 모르겠습니다.

내가 일을 정확히 레이블이없는 데이터를 같은 방식으로 기능을 추출하고있는 동안 교육/분류 테스트 :

## load the pickled classifier for labeling 
pickledClassifier = joblib.load(pickledClassifierFile) 

## transform data 
cv = CountVectorizer(min_df=1, ngram_range=(1, 3), max_features = 15000) 
cv.fit_transform(NOT_SURE) 

transformed_Feat_unlabeled = numpy.zeros((0,0,)) 
transformed_Feat_unlabeled = cv.transform(unlabeled_text_feat).toarray() 

## predict label on unseen, unlabeled data 
l_predLabel = pickledClassifier.predict(transformed_feat_unlabeled) 

오류 메시지가 :

Traceback (most recent call last): 
     File "../clf.py", line 615, in <module> 
     if __name__=="__main__": main() 
     File "../clf.py", line 579, in main 
     cv.fit_transform(pickledClassifierFile) 
     File "../sklearn/feature_extraction/text.py", line 780, in fit_transform 
     vocabulary, X = self._count_vocab(raw_documents, self.fixed_vocabulary) 
     File "../sklearn/feature_extraction/text.py", line 727, in _count_vocab 
     raise ValueError("empty vocabulary; perhaps the documents only" 
    ValueError: empty vocabulary; perhaps the documents only contain stop words 

답변

3

당신은 같은 벡터화를 사용해야을 트레이닝 및 테스트 데이터를 변환하기위한 인스턴스. 벡터 라이저 + 분류기를 사용하여 파이프 라인을 만들고 트레이닝 세트에서 파이프 라인을 교육하고 전체 파이프 라인을 산란하여이를 수행 할 수 있습니다. 나중에 pickled 파이프 라인을로드하고 그에 대한 예측을 호출하십시오.

이 관련 질문보기 : Bringing a classifier to production.

+0

감사합니다, Olivier (@ogrisel). 귀하의 솔루션은 깔끔하게 보입니다. 나는 그것을 시도 할 것이다. 그러나 나는 순수한 접근 방식을 사용하여 해결책을 찾았습니다 : 1) 훈련 데이터와 별도로 트레이닝 기능, 트레이닝 레이블 및 분류기를 절편 처리했습니다. 2) 'pickled training- 4) "pickeled-classifier"를 변형 된 training-features 및 'pickled labels'에 맞추고, 5) 변형 된 unlabeledData- 풍모. –