用于多标签分类问题的 tf-idf 向量化器
tf-idf vectorizer for multi-label classification problem
我有一个针对大量文本的多标签分类项目。
我在文本 (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
知道如何处理这个问题吗?
谢谢。
问题是您在此处使用 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
,但在任何地方都没有提到。
我有一个针对大量文本的多标签分类项目。 我在文本 (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
知道如何处理这个问题吗?
谢谢。
问题是您在此处使用 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
,但在任何地方都没有提到。