2016-10-18 18 views
2

私のように特徴ベクトルを生成するsklearnからTfidfVectorizerを使用する場合:tf-idfで新しい文書を分類するには?

features = TfidfVectorizer(min_df=0.2, ngram_range=(1,3)).fit_transform(myDocuments)

どのように私は、新しい文書を分類する特徴ベクトルを生成するのでしょうか? 1つのドキュメントのtf-idfを計算することはできません。

feature_names = TfidfVectorizer.get_feature_names()

、その後feature_namesに応じて新しい文書のための用語頻度を数える:

それはと機能名を抽出するために、正しいアプローチだろうか?

しかし、私は単語の重要性の情報を持つ重みを取得しません。

答えて

0

TfidfVectorizerのインスタンスを保存する必要があります。これは、それに適合するために使用された用語の頻度と語彙を覚えています。

vec = TfidfVectorizer(min_df=0.2, ngram_range=(1,3)) 
vec.fit(myDocuments) 
features = vec.transform(myDocuments) 
new_features = fec.transform(myNewDocuments) 
0

私はむしろ、元コーパスのラッパーとしてLatent Semantic Indexingでgensim使用します:むしろfit_transformを使用するよりも、あなたが別途fittransformを使用している場合、それは物事明確意味をなさないことbow-> tfidf-> LSI

あなたがトレーニングを続行する必要がある場合は、次に
tfidf = models.TfidfModel(corpus) 
corpus_tfidf = tfidf[corpus] 
lsi = models.LsiModel(corpus_tfidf, id2word=dictionary, num_topics=300) 
corpus_lsi = lsi[corpus_tfidf] # create a double wrapper over the original corpus: bow->tfidf->fold-in-lsi 

new_tfidf = models.TfidfModel(corpus) 
new_corpus_tfidf = new_tfidf[corpus] 
lsi.add_documents(another_tfidf_corpus) # now LSI has been trained on corpus_tfidf + another_tfidf_corpus 
lsi_vec = model[tfidf_vec] # convert some new document into the LSI space 

コーパスは、袋のワードである

tutorialsで読むことができます:
LSIトレーニングは、より多くのトレーニングドキュメントを提供するだけで、いつでも "トレーニング"を続けることができるという点でユニークです。これは、オンライントレーニングと呼ばれるプロセスで、基礎となるモデルの増分更新によって行われます。この機能のために、入力ドキュメントストリームは無限であってもかまいません。到着時にLSIの新しいドキュメントを供給し続ける一方で、計算された変換モデルを読み込み専用として使用します。

sci-kitが好きな場合は、gensimもcompatible with numpy

です
関連する問題