用于多标签分类问题的tf-idf矢量化器

问题描述 投票:1回答:1

我有一个针对大量文本的多标签分类项目。我在文本(train_v ['doc_text'])上使用了tf-Idf矢量化器,如下所示:

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

关于如何处理这个问题的任何想法?

谢谢。

python nlp tf-idf multilabel-classification tfidfvectorizer
1个回答
0
投票

问题是你在这里使用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在任何地方都没有提到。

© www.soinside.com 2019 - 2024. All rights reserved.