2016-11-14 2 views
4

Я использую подмодули NMF и LDA sklearn для анализа немеченого текста. Я прочитал документацию, но я не уверен, что функции преобразования в этих модулях (NMF и LDA) такие же, как и задняя функция в тематических моделях R (см. Predicting LDA topics for new data). В принципе, я ищу функцию, которая позволит мне предсказать темы в тестовом наборе, используя модель, подготовленную по данным обучающих наборов. Я предсказал темы по всему набору данных. Затем я разделил данные на тренировочные и тестовые наборы, обучил модель набора поездов и преобразовал тестовый набор с использованием этой модели. хотя ожидалось, что я не получу одинаковых результатов, сравнивая две темы тем, не уверяя меня, что функция преобразования выполняет ту же функцию, что и пакет R. Буду признателен за ваш ответ.python - sklearn Скрытое преобразование распределения Дирихле v. Fittransform

спасибо

+0

, что scikit-узнать версию вы используете? –

+0

также, что указывало, что результаты разные? –

+0

спасибо, Михаил, v 0.18. моя цель понять, действительно ли функция преобразования обеспечивает функциональность для прогнозирования тем в тестовом наборе. спасибо – valearner

ответ

6

Вызов transform на LatentDirichletAllocation модели возвращает тему распределения ненормализованного документа. Чтобы получить правильные вероятности, вы можете просто нормализовать результат. Вот пример:

from sklearn.feature_extraction.text import TfidfVectorizer 
from sklearn.decomposition import LatentDirichletAllocation 
from sklearn.datasets import fetch_20newsgroups 
import numpy as np 

# grab a sample data set 
dataset = fetch_20newsgroups(shuffle=True, remove=('headers', 'footers', 'quotes')) 
train,test = dataset.data[:100], dataset.data[100:200] 

# vectorizer the features 
tf_vectorizer = TfidfVectorizer(max_features=25) 
X_train = tf_vectorizer.fit_transform(train) 

# train the model 
lda = LatentDirichletAllocation(n_topics=5) 
lda.fit(X_train) 

# predict topics for test data 
# unnormalized doc-topic distribution 
X_test = tf_vectorizer.transform(test) 
doc_topic_dist_unnormalized = np.matrix(lda.transform(X_test)) 

# normalize the distribution (only needed if you want to work with the probabilities) 
doc_topic_dist = doc_topic_dist_unnormalized/doc_topic_dist_unnormalized.sum(axis=1) 

Чтобы найти топ рейтинга тему вы можете сделать что-то вроде:

doc_topic_dist.argmax(axis=1) 
+0

Спасибо, Райан, что-то, о чем я подумал: модель NMF и LDA, я считаю, по крайней мере, модуль lda (не sklearn), создает две матрицы W и H. Было бы хорошо предсказать тестовые данные, заданные первым X_test = tf_vectorizer .transform (test), а затем X_test * HT? – valearner

Смежные вопросы