【问题标题】:tf-idf vectorizer for multi-label classification problem用于多标签分类问题的 tf-idf 矢量化器
【发布时间】:2019-07-06 17:42:06
【问题描述】:

我有一个针对大量文本的多标签分类项目。 我在文本(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】:

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

    【讨论】:

    • 嗨,非常感谢您的帮助。 “X_tfidf_r”就是“X_tfidf”。我只是在尝试一些没有用的东西。但是,当我在 test_v['doc_text'] 上使用转换时,我收到此错误“ValueError:无法将字符串转换为浮点数:”您对如何克服这个问题有什么建议吗?谢谢
    • 我能够解决这个问题。但是我需要使用 count_vec 来做到这一点。非常感谢您的帮助。
    • 以上提供的解决方案对您有帮助吗?并发布您的答案。
    • 是的,它有帮助,尤其是在使用变换而不是拟合变换时。除了转换问题外,我的解决方案与原始解决方案相同。谢谢。
    猜你喜欢
    • 2021-02-10
    • 2023-03-17
    • 2020-08-25
    • 2020-01-05
    • 1970-01-01
    • 2020-12-19
    • 2019-02-10
    • 2023-03-19
    • 2020-08-27
    相关资源
    最近更新 更多