Настройка количества функций для регрессионного анализа тональности TF-IDF / logisti c - PullRequest
0 голосов
/ 14 июля 2020

Я делаю проект по анализу настроений в наборе данных Twitter. Я использовал извлечение функций TF-IDF и регрессионную модель logisti c для классификации. До сих пор я обучал модель с помощью следующего:

def get_tfidf_features(train_fit, ngrams=(1,1)):
    vector = TfidfVectorizer(ngrams, sublinear_tf=True)
    vector.fit(train_fit)
    return vector

X = tf_vector.transform(traintest['text'])

y = traintest['sentiment']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.01, random_state = 42)

LR_model = LogisticRegression(solver='lbfgs')
LR_model.fit(X_train, y_train)
y_predict_lr = LR_model.predict(X_test)

Эта регрессионная модель logisti c была обучена на наборе данных из примерно 1,5 миллиона твитов. У меня есть набор из 1,7 миллиона твитов, для которых я пытаюсь использовать эту модель анализа настроений, df_april. С первой попытки я извлекаю функции следующим образом:

tfidf = TfidfVectorizer(ngram_range = unigrams, max_features = None, sublinear_tf = True)
X_april = tfidf.fit_transform(df_april['text'].values.astype('U'))

Моя первая мысль заключалась в том, чтобы просто вызвать прогноз на X_april, но это выдает ошибку:

y_predict_april = LR_model.predict(X_april)

ValueError: X has 208976 features per sample; expecting 271794

Это имело смысл для меня: форма этих векторов признаков была другой:

X.shape
(1578614, 271794)

X_april.shape
(1705758, 208976)

Итак, я знаю, что мне нужно как-то отрегулировать количество функций для соответствия между X и X_april, чтобы вызвать прогноз X_april. Моя попытка сделать это была:

x = pd.DataFrame.sparse.from_spmatrix(X)
x_april = pd.DataFrame.sparse.from_spmatrix(X_april)

not_existing_cols = [c for c in x.columns.tolist() if c not in x_april]
x_april = x_april.reindex(x_april.columns.tolist() + not_existing_cols, axis=1)
x_april = x_april[x.columns.tolist()]

Я работаю в ноутбуке Jupyter, и этот код приводит к мертвому ядру каждый раз, когда я его пробовал. Как я могу настроить функции так, чтобы я мог вызывать модель регрессии logisti c?

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