提问者:小点点

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


我正在尝试使用Scikit learn中的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_矩阵训练一个SVM模型,并使用它预测相应测试集的类/标签:test_data\u df['text']。我遇到的问题是:

>

  • 只使用训练数据来构建TfIdfVectorzer是正确的,还是我应该同时使用训练和测试文本数据来构建矢量?
  • 主要问题是:如何得到测试数据的矩阵表示?目前,我不确定如何从测试集中不同文档的矢量化器中获得tfidf分数。我尝试的是循环使用Pandas系列test_data_df['text'],然后执行:

    tfidf_matrix.todense(list(text)
    

    对于系列中的每个文本,将结果放入一个列表中,最后从中生成一个numpy数组,但我得到一个内存错误。


  • 共1个答案

    匿名用户

    >

    使用

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

    现在可以将tfidf_matrix_test提供给分类器。

    附笔。:

    尽量避免将矢量器的稀疏矩阵输出强制转换为列表或密集数组。因为它是内存密集型的,并且分类器在训练/预测时也会花费更多的计算时间。