Добавление рассылки тем (результат модели тем) в панде - PullRequest
0 голосов
/ 28 ноября 2018

Я рассчитал модель темы, пока все хорошо.

Прежде всего мой фрейм данных выглядит так:

identifier     comment_cleaned
1              some cleaned comment
2              another cleaned comment
8              
...            ...

Затем я рассчитал свои модели следующим образом:

import lda
import pandas as pd
import numpy as np
from sklearn.feature_extraction.text import CountVectorizer

def remove_allzerorows(smatrix):
    nonzero_row_indice, _ = smatrix.nonzero()
    unique_nonzero_indice = np.unique(nonzero_row_indice)
    return smatrix[unique_nonzero_indice]

univectorizer = CountVectorizer(analyzer = "word", min_df = 0.001, ngram_range = (1,1)) 
unicorpus = univectorizer.fit_transform(df["comment_cleaned"])
unicorpus = remove_allzerorows(unicorpus)
unigrams = univectorizer.get_feature_names()

n_topics = [2, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100, 110, 120]
n_iter = 2000
alpha = 0.1
beta = 0.01

for topics in n_topics:
    print("start with number of topics:", topics)
    lda_model = lda.LDA(
                    n_topics = topics, n_iter = n_iter,
                    alpha = alpha, eta = beta,
                    random_state = 42
                   )
    lda_model.fit(unicorpus)
    joblib.dump(lda_model, f"models/lda_{topics}topics.pkl") 

После этого я оценил темы и выбрал количество тем, которые лучше всего представляют мой набор данных.Это было 80 тем.Теперь я хотел бы добавить: добавьте 80 столбцов к моему фрейму данных, которые представляют распределение тем.В конце концов это выглядело бы так:

identifier     comment_cleaned          topic_1      topic_2     ...
1              some cleaned comment     0.11         0.0         ...
2              another cleaned comment  0.30         0.1         ...
8                                       0.00         0.0         ...
...            ...                      ...          ...         ...

В основном я понимаю, как создать матрицу документа-темы.Но я не понимаю, как добавить мой исходный кадр данных с помощью:

best_lda_model = joblib.load(f"models/lda_80topics.pkl")
lda_output = best_lda_model.transform(unicorpus)
df_document_topic = pd.DataFrame(np.round(lda_output, 2))

Любая помощь?Спасибо!

1 Ответ

0 голосов
/ 28 ноября 2018

Если ваш фрейм данных имеет длину N строк, и у вас есть матрица M, равная NxT, где T - количество тем - тогда, чтобы добавить эту матрицу в фрейм данных, все, что вам нужно сделать, это сгенерировать список Tстроки для использования в качестве имен новых столбцов, например:

new_column_names = ["topic_{t}".format(t=t) for t in range(0,M.shape[1])]

Затем вы можете просто вставить значения матрицы в кадр данных следующим образом:

df_document_topic[new_column_names] = M

Панды должны понимать, что вы 'мы пытаемся применить и применить данные.

Возможно, вам придется поработать с размерами массива результатов, но, пока они правильные, Pandas должен управлять деталями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...