tf-idf vectorizer для задачи классификации по нескольким меткам - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть проект классификации по нескольким меткам для большого количества текстов.Я использовал векторизатор tf-Idf для текстов (train_v ['doc_text']) следующим образом:

tfidf_transformer = TfidfTransformer()
X_counts = count_vect.fit_transform(train_v['doc_text']) 
X_tfidf = tfidf_transformer.fit_transform(X_counts) 
x_train_tfidf, x_test_tfidf, y_train_tfidf, y_test_tfidf = train_test_split(X_tfidf_r, label_vs, test_size=0.33, random_state=9000)
sgd = SGDClassifier(loss='hinge', penalty='l2', random_state=42, max_iter=25, tol=None, fit_intercept=True, alpha = 0.000009  )

сейчас мне нужно использовать один и тот же векторизатор для набора функций (test_v ['doc_text')]) для прогнозирования меток.однако, когда я использую следующее

X_counts_test = count_vect.fit_transform(test_v['doc_text']) 
X_tfidf_test = tfidf_transformer.fit_transform(X_counts_test) 
predictions_test = clf.predict(X_tfidf_test)

, я получаю сообщение об ошибке

ValueError: X has 388894 features per sample; expecting 330204

любая идея о том, как с этим справиться?

Спасибо.

1 Ответ

0 голосов
/ 13 февраля 2019

Проблема в том, что вы используете fit_transform, который устанавливает TfidfTransform() на test data, а затем преобразует его.

Вместо этого используйте transform метод.

Кроме того, вы должны использовать TfidfVectorizer

На мой взгляд, код должен быть:

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_transformer = TfidfVectorizer()
# X_counts = count_vect.fit_transform(train_v['doc_text']) 
X_tfidf = tfidf_transformer.fit_transform(train_v['doc_text']) 
x_train_tfidf, x_test_tfidf, y_train_tfidf, y_test_tfidf = train_test_split(X_tfidf, label_vs, test_size=0.33, random_state=9000)
sgd = SGDClassifier(loss='hinge', penalty='l2', random_state=42, max_iter=25, tol=None, fit_intercept=True, alpha = 0.000009  )

# X_counts_test = count_vect.fit_transform(test_v['doc_text']) 
X_tfidf_test = tfidf_transformer.transform(test_v['doc_text']) 
predictions_test = clf.predict(X_tfidf_test)

Кроме того, почему вы используете count_vect Я думаю, что он не имеет смысла здесь и вtrain_test_split вы используете X_tfidf_r, который нигде не упоминается.

...