tfidf矢量化器和tfidf变压器有什么区别

时间:2019-02-18 10:45:54

标签: python scikit-learn nltk tf-idf tfidfvectorizer

我知道tfidf vectorizer的公式是

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

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

3 个答案:

答案 0 :(得分:3)

TfidfVectorizer用于句子,而 TfidfTransformer用于现有的计数矩阵,例如CountVectorizer返回的计数矩阵

答案 1 :(得分:0)

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_transformcountVectoriser_fit_transformtfidfVectoriser

答案 2 :(得分:0)

使用Tfidftransformer,您将使用CountVectorizer计算字数,然后计算IDF值,然后才计算Tf-idf分数。使用Tfidfvectorizer,您将一次完成所有三个步骤。

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