tfidf vectorizer 和 tfidf transformer 有什么区别

what is the difference between tfidf vectorizer and tfidf transformer

我知道 tfidf vectorizer 的公式是

Count of word/Total count * log(Number of documents / no.of documents where word is present)

我看到 scikit 学习中有 tfidf 转换器,我只是想区分它们。我找不到任何有用的东西。

TfidfVectorizer 用于句子,而 TfidfTransformer is used on an existing count matrix, such as one returned by CountVectorizer

Artem 的回答几乎概括了差异。 为了使事情更清楚,这里引用了 here 中的示例。

TfidfTransformer可以这样使用:

from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer


train_set = ["The sky is blue.", "The sun is bright."] 

vectorizer = CountVectorizer(stop_words='english')
trainVectorizerArray =   vectorizer.fit_transform(article_master['stemmed_content'])

transformer = TfidfTransformer()
res = transformer.fit_transform(trainVectorizerArray)

print ((res.todense()))


## RESULT:  

Fit Vectorizer to train set
[[1 0 1 0]
 [0 1 0 1]]

[[0.70710678 0.         0.70710678 0.        ]
 [0.         0.70710678 0.         0.70710678]]

使用 TfidfVectorizer 可以在一次操作中完成计数特征的提取、TF-IDF 归一化和逐行欧几里得归一化:

from sklearn.feature_extraction.text import TfidfVectorizer

tfidf = TfidfVectorizer(stop_words='english')
res1 = tfidf.fit_transform(train_set)
print ((res1.todense()))


## RESULT:  

[[0.70710678 0.         0.70710678 0.        ]
 [0.         0.70710678 0.         0.70710678]]

这两个过程都会生成一个包含相同值的稀疏矩阵。
其他有用的参考资料是 tfidfTransformer.fit_transform, countVectoriser_fit_transform and tfidfVectoriser

使用 Tfidftransformer,您将使用 CountVectorizer 计算字数,然后计算 IDF 值,然后才计算 Tf-idf 分数。使用 Tfidfvectorizer,您将同时执行所有三个步骤。

我认为你应该阅读 this article which sums it up with an example