是一个计数器,与使用use_idf=false的tfidfvectorizer相同



如标题所述:当use_idf=false时,countvectorizer是否与tfidfvectorizer相同?如果不是,为什么不呢?

所以这也意味着在这里添加tfidftransformer是多余的吗?

vect = CountVectorizer(min_df=1)
tweets_vector = vect.fit_transform(corpus)
tf_transformer = TfidfTransformer(use_idf=False).fit(tweets_vector)
tweets_vector_tf = tf_transformer.transform(tweets_vector)

不,它们不一样。TfidfVectorizer将其结果归一化,即其输出的每个向量都有范数1:

>>> CountVectorizer().fit_transform(["foo bar baz", "foo bar quux"]).A
array([[1, 1, 1, 0],
       [1, 0, 1, 1]])
>>> TfidfVectorizer(use_idf=False).fit_transform(["foo bar baz", "foo bar quux"]).A
array([[ 0.57735027,  0.57735027,  0.57735027,  0.        ],
       [ 0.57735027,  0.        ,  0.57735027,  0.57735027]])

这样做是为了使行上的点积是余弦相似度。此外,TfidfVectorizer也可以在给定选项sublinear_tf=True时使用对数折现频率。

要使TfidfVectorizer的行为像CountVectorizer一样,给它一个构造函数选项use_idf=False, normalize=None

正如larsmans所说,TfidfVectorizer(use_idf=False, normalize=None,…)的行为应该与countvvectorizer相同。

在当前版本(0.14.1)中,有一个bug, TfidfVectorizer(binary=True,…)静默地留下binary=False,这可能会在网格搜索最佳参数时使您偏离。(相反,CountVectorizer可以正确设置二进制标志。)这似乎在未来的版本(0.14.1之后)中得到修复。

相关内容

  • 没有找到相关文章

最新更新