CountVectorizer+TfidfTransformer 和 TfidfVectorizer 有啥区别
Posted
技术标签:
【中文标题】CountVectorizer+TfidfTransformer 和 TfidfVectorizer 有啥区别【英文标题】:What is the difference between CountVectorizer+TfidfTransformer and TfidfVectorizerCountVectorizer+TfidfTransformer 和 TfidfVectorizer 有什么区别 【发布时间】:2021-02-09 12:24:58 【问题描述】:要对文本应用 ML 算法,它必须用数字表示。使用 sklearn 的一些方法是:
CountVectorizer
CountVectorizer + TfidfTransformer
TfidfVectorizer
CountVectorizer+TfidfTransformer和TfidfVectorizer有什么区别?
【问题讨论】:
【参考方案1】:无,见上方documentation page:
sklearn.feature_extraction.text.TfidfVectorizer
...
Equivalent to CountVectorizer followed by TfidfTransformer.
【讨论】:
【参考方案2】:使用 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
【讨论】:
【参考方案3】:以下代码演示了文档(根据 mbatchkarov 所说的“跟进”的含义:将两个函数的输出相乘,然后进行归一化。
import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import (
CountVectorizer, TfidfTransformer, TfidfVectorizer
)
corpus = ['apple banana orange onion corn',
'banana banana orange pineapple coffee',
'orange lemon lime orange',
'lime vodka gin orange apple apple',
'potato potato tomato pineapple',
'coffee']
tf = CountVectorizer()
idf = TfidfTransformer()
tf_ft = tf.fit_transform(corpus)
idf.fit(tf_ft)
vocab = [ti[0] for ti in sorted(list(tf.vocabulary_.items()),
key=lambda x: x[1])]
tf = pd.DataFrame(tf_ft.toarray(), columns=vocab)
idf = pd.Series(idf.idf_, index=vocab)
tfidf_manual = tf * idf
tfidf_manual /= np.sqrt(np.sum(np.square(tfidf_manual.values),
axis=1,
keepdims=True))
tfidf_function = pd.DataFrame(TfidfVectorizer()
.fit_transform(corpus)
.toarray(),
columns=vocab)
assert np.allclose(tfidf_manual, tfidf_function)
tfidf_manual
【讨论】:
以上是关于CountVectorizer+TfidfTransformer 和 TfidfVectorizer 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章