テキストのtfidf値表示
3382 ワード
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_transform count_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-idf test_weight = test_tfidf.toarray()
tf-idfの辞書を保存し、テストセットのtfidfを計算する必要があります.ここでsklearnにはpickleとjoblibの2つの方法が保存されていることに注意してください.ここでpickleを使います
注意:vectorizerとtfidftransformerは保存され、fit_しか保存されません.transformはその後保存され、vectorizerとtfidftransformerが訓練セットで訓練されたことを示します.
###訓練セット:train_texts
train_tfidf = vectorizer.fit_transform(train_texts)
train_X = train_tfidf.toarray()の結果はマトリクス形式です
# train_tfidf結果はtf-idfのマトリクスであり,上の2つは同じマトリクスを返す
print('train_tfidfの結果形式:',train_X.shape)
###テストセット:test_texts
##分類器訓練
##分類器テスト
一、訓練及びテスト
CountVectorizerとTfidfTransformerは訓練データを処理する際にfit_を使うtransformメソッド、テストセットでtransformメソッドを使用します.fitは訓練の意味を含んで、訓練が終わってテストに行くことを表して、もしテストの集中でfit_を使うならばtransform、それは明らかに結果の誤りを招いた.変数:content_trainトレーニングセット、content_testテストセットvectorizer=CountVectorizer()tfidftransformer=TfidfTransformer()#トレーニング用fit_transform count_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-idf test_weight = test_tfidf.toarray()
二、tf-idf辞書の保存
tf-idfの辞書を保存し、テストセットのtfidfを計算する必要があります.ここでsklearnにはpickleとjoblibの2つの方法が保存されていることに注意してください.ここでpickleを使います
train_content = segmentWord(X_train)
test_content = segmentWord(X_test)
# replace ,
vectorizer = CountVectorizer(decode_error="replace")
tfidftransformer = TfidfTransformer()
# vectorizer.fit_transform、tfidftransformer.fit_transform
# vectorizer.transform、tfidftransformer.transform
vec_train = vectorizer.fit_transform(train_content)
tfidf = tfidftransformer.fit_transform(vec_train)
# fit vectorizer fit tfidftransformer,
feature_path = 'models/feature.pkl'
with open(feature_path, 'wb') as fw:
pickle.dump(vectorizer.vocabulary_, fw)
tfidftransformer_path = 'models/tfidftransformer.pkl'
with open(tfidftransformer_path, 'wb') as fw:
pickle.dump(tfidftransformer, fw)
注意:vectorizerとtfidftransformerは保存され、fit_しか保存されません.transformはその後保存され、vectorizerとtfidftransformerが訓練セットで訓練されたことを示します.
三、tf-idfロード、新しいデータのテスト
#
feature_path = 'models/feature.pkl'
loaded_vec = CountVectorizer(decode_error="replace", vocabulary=pickle.load(open(feature_path, "rb")))
# TfidfTransformer
tfidftransformer_path = 'models/tfidftransformer.pkl'
tfidftransformer = pickle.load(open(tfidftransformer_path, "rb"))
# transform, , list
test_tfidf = tfidftransformer.transform(loaded_vec.transform(test_content))
四、TfidfVectorizerを利用して直接一歩tfidf値に着く
# tf-idf ( )
vectorizer = TfidfVectorizer(stop_words=stpwrdlst,use_idf=True,smooth_idf=True)
words_sets = vectorizer.get_feature_names()
#
print(' :',words_sets)
print(' :',len(words_sets))
###訓練セット:train_texts
train_tfidf = vectorizer.fit_transform(train_texts)
train_X = train_tfidf.toarray()の結果はマトリクス形式です
# train_tfidf結果はtf-idfのマトリクスであり,上の2つは同じマトリクスを返す
print('train_tfidfの結果形式:',train_X.shape)
###テストセット:test_texts
test_tfidf = vectorizer.transform(test_texts).toarray()
##分類器訓練
clf1 = MultinomialNB(alpha=0.001).fit(train_tfidf,train_y)
train_predicted = clf1.predict(train_tfidf)
train_predicted_proba = clf1.predict_proba(train_tfidf)
##分類器テスト
test_predicted = clf1.predict(test_tfidf)