CountVectorizer + TfidfTransformer和TfidfVectorizer有什么区别

问题描述

要将ML算法应用于文本,必须以数字表示。使用sklearn进行此操作的一些方法是:

  1. CountVectorizer

  2. CountVectorizer + TfidfTransformer

  3. TfidfVectorizer

CountVectorizer + TfidfTransformer和TfidfVectorizer有什么区别?

解决方法

没有,请参见documentation page的顶部:

sklearn.feature_extraction.text.TfidfVectorizer
...
Equivalent to CountVectorizer followed by TfidfTransformer. 
,

使用 Tfidftransformer,您将使用 CountVectorizer 系统地计算字数,然后计算逆文档频率 (IDF) 值,然后才计算 Tf-idf 分数。

相反,使用 Tfidfvectorizer,您将同时完成所有三个步骤。实际上,它使用相同的数据集计算字数、IDF 值和 Tf-idf 分数。

所以现在您可能想知道,如果您可以通过两个步骤完成所有工作,为什么要使用不必要的步骤。好吧,在某些情况下,您想在 Tfidfvectorizer 上使用 Tfidftransformer,但有时并不那么明显。以下是一般准则:

  • 如果您需要不同任务的词频(词数)向量,请使用 Tfidftransformer。
  • 如果您需要计算“训练”数据集中文档的 tf-idf 分数,请使用 Tfidfvectorizer
  • 如果您需要计算“训练”数据集之外的文档的 tf-idf 分数,请使用其中之一,两者都可以。

参考:https://kavita-ganesan.com/tfidftransformer-tfidfvectorizer-usage-differences/#.YHybLOhKhPY

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...