python - countvectorizer 是否与 use_idf=false 的 tfidfvectorizer 相同?

标签 python scikit-learn

如标题所述:countvectorizer 是否与具有 use_idf=false 的 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]])

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

要使 TfidfVectorizer 的行为与 CountVectorizer 相同,请为其提供构造函数选项 use_idf=False, normalize=None

关于python - countvectorizer 是否与 use_idf=false 的 tfidfvectorizer 相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22489264/

相关文章:

python - 在阻塞脚本的线程中循环

python - pyvirtualdisplay 在 Xvfb 上的工作剂量是多少,或者 pyvirtualdisplay 可以打开多少个 Xvfb?

python - Pandas 根据索引将系列分配给列

machine-learning - 随机森林分类器 class_weight

machine-learning - K-folds我们还需要实现train_test_split吗?

python - 立即在所有列上运行 sklearn labelencoder

Python:非侵入式处理 XML 文件

Python key 错误 : '0' on printing a dictionary value

python - 多类逻辑分类中的 Predicted_proba

python - 将 scikit-learn (sklearn) 预测添加到 pandas 数据框