2016-10-18 8 views
2

Если я использую TfidfVectorizer от sklearn для генерации векторов признаков, как:Как классифицировать новые документы с помощью tf-idf?

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

Как бы то генерировать векторы признаков для классификации нового документа? Поскольку вы не можете вычислить tf-idf для одного документа.

Будет ли это правильный подход, чтобы извлечь имена функций с:

feature_names = TfidfVectorizer.get_feature_names()

, а затем подсчитывает частоту термина для нового документа в соответствии с feature_names?

Но тогда я не получу веса, которые имеют информацию о важности слова.

ответ

0

Вам необходимо сохранить экземпляр TfidfVectorizer, он будет помнить термин частоты и словарь, который использовался для его соответствия. Это может сделать вещи более четкое смысл, если вместо того, чтобы использовать fit_transform, вы используете fit и transform отдельно:

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

Я предпочел бы использовать gensim с Latent Semantic Indexing как обертка над оригинальной корпус: bow-> tfidf-> БИС

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-комплект, gensim также compatible with numpy