python - 如何将 TfidfVectorizer 的输出提供给 Sklearn 中的 LinearSVC 分类器?

标签 python machine-learning scikit-learn

我正在尝试在 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_matrix 训练 SVM 模型,并使用它来预测相应测试集的类/标签:test_data_df['text']。 我遇到的问题:

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

    tfidf_matrix.todense(list(text)
    

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

最佳答案

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

  2. 使用

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

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

附注:

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

关于python - 如何将 TfidfVectorizer 的输出提供给 Sklearn 中的 LinearSVC 分类器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55206629/

相关文章:

python - 无法从 sklearn PCA 中提取因子载荷

python - Python中子进程读取线超时

python - 使用 Sphinx 的 sphinx-apidoc 实用程序从 python 代码自动生成文档

machine-learning - PyTorch-BCELoss : ValueError: Target and input must have the same number of elements

python-3.x - Sklearn - 线性回归

python - 使用 Flask-FlatPages 列出特定文件夹中的文件

matlab - 将函数 fminunc 与逻辑回归的 BFGS 方法进行比较

python - 如何使用 scikit-learn 获取每个 k-means 集群的惯性值?

python - scikit-learn分区数据中的LassoCV如何实现?

python - 如何在 scikit-learn (python) 的 KernelDensity 中使用用户定义的指标