如何将TfidfVectorizer的输出馈送到Sklearn中的LinearSVC分类器?

时间:2019-03-17 11:39:18

标签: python machine-learning scikit-learn

我正在尝试使用Scikit learning中的LinearSVC构建线性分类器。我决定使用tf-idf向量化来对文本输入进行向量化。我写的代码是:

review_corpus = list(train_data_df['text'])
vectorizer = TfidfVectorizer(max_df = 0.9,stop_words = 'english')
%timeit tfidf_matrix = vectorizer.fit_transform(review_corpus)

我现在想使用此tfidf_matrix训练SVM模型,并用它来预测相应测试集test_data_df['text']的类/标签。 我遇到的问题:

  1. 仅使用训练数据来构建TfIdfVectorizer是正确的还是应该同时使用训练和测试文本数据来构建矢量化器?
  2. 主要问题是:如何获得测试数据的矩阵表示形式?目前,我不确定如何从矢量化仪中获取测试集中不同文档的tfidf分数。我想做的是遍历熊猫系列test_data_df['text']然后做:

    tfidf_matrix.todense(list(text)
    

对于系列中的每个文本,将结果放入列表中,最后从中创建一个numpy数组,但出现内存错误。

1 个答案:

答案 0 :(得分:0)

  1. 您应该仅使用训练数据来构建TfIdfVectorizer()。这将确保您在培训过程中不会泄漏有关测试数据的任何信息。

  2. 使用

    tfidf_matrix_test = vectorizer.transform(test_data_df['text'])
    

现在,您可以将tfidf_matrix_test输入分类器了。

P.S .:

尽量避免将Vectorizer的sparse_matrix输出强制转换为列表或密集数组。因为它占用大量内存,并且分类器在训练/预测时也将花费更多的计算时间。