tfidf_CountVectorizerとTfidfTransformerの保存とテスト

5258 ワード

nlpをする場合、tf-idf、sklearnでCountVectorizerとTfidfTransformerの2つのクラスを使う場合は、次の2つのクラスについて説明します

一、訓練及びテスト


CountVectorizerとTfidfTransformerは訓練データを処理する際にfit_を使うtransformメソッド、テストセットでtransformメソッドを使用します.fitは訓練の意味を含んで、訓練が終わってテストに行くことを表して、もしテストの集中でfit_を使うならばtransform、それは明らかに結果の誤りを招いた.変数:content_trainトレーニングセット、content_testテストセットvectorizer=CountVectorizer()tfidftransformer=TfidfTransformer()#トレーニング用fit_transformcount_train=vectorizer.fit_transform(content_train)tfidf = tfidftransformer.fit_transform(count_train)#テストcount_test=vectorizer.transform(content_test)test_tfidf = tfidftransformer.transform(count_test)テストセットのif-idftest_weight = test_tfidf.toarray()

二、tf-idf辞書の保存


tf-idfの辞書を保存し、テストセットのtfidfを計算する必要があります.ここでsklearnにはpickleとjoblibの2つの方法が保存されていることに注意してください.ここでpickleを使います
 
 1 train_content = segmentWord(X_train)
 2 test_content = segmentWord(X_test)
 3 # replace  , 
 4 vectorizer = CountVectorizer(decode_error="replace")
 5 tfidftransformer = TfidfTransformer()
 6 #  vectorizer.fit_transform、tfidftransformer.fit_transform
 7 #  vectorizer.transform、tfidftransformer.transform
 8 vec_train = vectorizer.fit_transform(train_content)
 9 tfidf = tfidftransformer.fit_transform(vec_train)
10 
11 #  fit vectorizer    fit tfidftransformer, 
12 feature_path = 'models/feature.pkl'
13 with open(feature_path, 'wb') as fw:
14     pickle.dump(vectorizer.vocabulary_, fw)
15 
16 tfidftransformer_path = 'models/tfidftransformer.pkl'
17 with open(tfidftransformer_path, 'wb') as fw:
18     pickle.dump(tfidftransformer, fw)

 
注意:vectorizerとtfidftransformerは保存され、fit_しか保存されません.transformはその後保存され、vectorizerとtfidftransformerが訓練セットで訓練されたことを示します.

三、tf-idfロード、新しいデータのテスト

1 #  
2 feature_path = 'models/feature.pkl'
3 loaded_vec = CountVectorizer(decode_error="replace", vocabulary=pickle.load(open(feature_path, "rb")))
4 #  TfidfTransformer
5 tfidftransformer_path = 'models/tfidftransformer.pkl'
6 tfidftransformer = pickle.load(open(tfidftransformer_path, "rb"))
7 # transform, , list
8 test_tfidf = tfidftransformer.transform(loaded_vec.transform(test_content))

 
転載先:https://www.cnblogs.com/demo-deng/p/10139233.html