- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我搜索了很多以了解这一点,但我做不到。我知道默认情况下 TfidfVectorizer 将对术语频率应用 l2
规范化。 This文章解释了它的方程式。我在用古吉拉特语编写的文本上使用 TfidfVectorizer。以下是有关它的输出的详细信息:
我的两个文件是:
ખુબ વખાણ કરે છે
ખુબ વધારે છે
我使用的代码是:
vectorizer = TfidfVectorizer(tokenizer=tokenize_words, sublinear_tf=True, use_idf=True, smooth_idf=False)
这里,tokenize_words
是我对单词进行分词的函数。我的数据的TF-IDF列表是:
[[ 0.6088451 0.35959372 0.35959372 0.6088451 0. ]
[ 0. 0.45329466 0.45329466 0. 0.76749457]]
功能列表:
['કરે', 'ખુબ', 'છે.', 'વખાણ', 'વધારે']
idf的值:
{'વખાણ': 1.6931471805599454, 'છે.': 1.0, 'કરે': 1.6931471805599454, 'વધારે': 1.6931471805599454, 'ખુબ': 1.0}
请在这个例子中解释一下我的两个文档中每个词的词频是多少。
最佳答案
好的,现在让我们看一下 documentation I gave in comments一步一步:
文件:
`ખુબ વખાણ કરે છે
ખુબ વધારે છે`
特征
):['કરે', 'ખુબ', 'છે.', 'વખાણ', 'વધારે']
计算文档中每个术语的频率:-
一个。文档 1 中出现的每个术语 [ખુબ વખાણ કરે છે]
出现一次,વધારે 不出现。`
所以词频向量(按特征排序):[1 1 1 1 0]
在 document2 上应用步骤 a 和 b,我们得到 [0 1 1 0 1]
所以我们最终的词频向量是 [[1 1 1 1 0], [0 1 1 0 1]]
注意:这是你想要的词频
现在找到 IDF(这是基于特征,而不是基于文档):
idf(term) = log(文档数/包含这个词的文档数) + 1
1 被添加到 idf 值以防止零除法。它由默认为 True 的 "smooth_idf"
参数控制。
idf('કરે') = log(2/1)+1 = 0.69314.. + 1 = 1.69314..
idf('ખુબ') = log(2/2)+1 = 0 + 1 = 1
idf('છે.') = log(2/2)+1 = 0 + 1 = 1
idf('વખાણ') = log(2/1)+1 = 0.69314.. + 1 = 1.69314..
idf('વધારે') = log(2/1)+1 = 0.69314.. + 1 = 1.69314..
注意:这对应于您在问题中显示的数据。
现在计算 TF-IDF(这也是按文档计算的,根据特征排序计算):
一个。对于文档 1:
For 'કરે', tf-idf = tf(કરે) x idf(કરે) = 1 x 1.69314 = 1.69314
For 'ખુબ', tf-idf = tf(કરે) x idf(કરે) = 1 x 1 = 1
For 'છે.', tf-idf = tf(કરે) x idf(કરે) = 1 x 1 = 1
For 'વખાણ', tf-idf = tf(કરે) x idf(કરે) = 1 x 1.69314 = 1.69314
For 'વધારે', tf-idf = tf(કરે) x idf(કરે) = 0 x 1.69314 = 0
所以对于 document1,最终的 tf-idf 向量是 [1.69314 1 1 1.69314 0]
现在归一化完成了(l2 Euclidean):
dividor = sqrt(sqr(1.69314)+sqr(1)+sqr(1)+sqr(1.69314)+sqr(0))
= sqrt(2.8667230596 + 1 + 1 + 2.8667230596 + 0)
= sqrt(7.7334461192)
= 2.7809074272977876...
将 tf-idf 数组的每个元素除以除数,我们得到:
[0.6088445 0.3595948 0.3595948548 0.6088445 0]
注意:这是您发布的第一个有问题的文档的 tfidf。
现在对文档 2 执行相同的步骤 a 和 b,我们得到:
[ 0. 0.453294 0.453294 0. 0.767494]
更新:关于 sublinear_tf = True OR False
您的原始词频向量是 [[1 1 1 1 0], [0 1 1 0 1]]
您的理解是正确的,即使用 sublinear_tf = True 会改变词频向量。
new_tf = 1 + log(tf)
现在,上面的行仅适用于术语频率中的非零元素。因为对于 0,log(0) 是未定义的。
所有非零条目都是 1。log(1)
是 0 和 1 + log(1) = 1 + 0 = 1`。
您会看到值为 1 的元素的值将保持不变。因此您的 new_tf = [[1 1 1 1 0], [0 1 1 0 1]] = tf(original)
.
由于 sublinear_tf
,您的词频正在发生变化,但它仍然保持不变。
因此,如果您使用 sublinear_tf=True
或 sublinear_tf=False
,则以下所有计算都相同,输出也相同。
现在,如果您更改词频向量包含 1 和 0 以外的元素 的文档,您将使用 sublinear_tf
获得差异。
希望您的疑虑现在已经消除。
关于python-3.x - 如何在 TfidfVectorizer 中计算词频?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42440621/
我认为函数 TfidfVectorizer 没有正确计算 IDF 因子。例如,从 tf-idf feature weights using sklearn.feature_extraction.tex
我将大型语料库拆分为 5K 个文件,我正在尝试使用 TF-IDF 转换生成基于 IDF 的词汇表。 这是代码:基本上我有一个迭代器,它循环遍历 .tsv 文件的目录,读取每个文件并产生。 import
假设我用于单个文档 text="bla agao haa" singleTFIDF = TfidfVectorizer(analyzer='char_wb', ngram_range= (4,6),p
我尝试在语料库上使用 TfidfVectorizer,但每次都会出现此错误 File "sparsefuncs.pyx", line 117, in sklearn.utils.sparsefuncs
虽然有六个不同的词。结果只打印了5个字。如何根据所有单词(6列向量)获得结果? from sklearn.feature_extraction.text import TfidfVectorizer
我正在尝试使用 sklearn 的 TfidfVectorizer 输出由两个一元组组成的输入列表的 tf-idf 分数和二元组。 这是我正在做的事情的本质: comprehensive_ngrams
我正在寻找一种方法来加载我之前使用 scikit-learn 的 TfidfVectorizer 生成的向量。总的来说,我希望更好地了解 TfidfVectorizer 的数据持久性。 例如,到目前为
就我而言,不存在这样的问题。我正在 Kaggle 中从事 NLP 和情感分析项目,首先我正在准备我的数据。数据框是一个文本列,后跟 0 到 9 之间的数字,用于对行(文档)所属的簇进行分类。我在 sk
我使用 TfIdfVectorizer 和 MultinomialNB 训练了我的模型,并将其保存到 pickle 文件中。 现在我正尝试使用另一个文件中的分类器来预测看不见的数据,我不能这样做,因为
我有一个大型语料库,存储为 25 个列表的字典,我想使用 SKLearn 的 TfidfVectorizer 进行分析。每个列表包含许多字符串。现在,我既关心整个语料库中的总体词频 (tf),也关心
我对 skelearn 的 TfidfVectorizer 在我不知道的情况下到底做了什么感到有点困惑。 我有这样的句子: sentence_1 = 'Sum: 1 Mean: 1 Min:1' 但是
给出以下代码: import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer import urlli
我正在使用 sklearn Pipeline 和 FeatureUnion 从文本文件创建特征,我想打印出特征名称。 首先,我将所有转换收集到一个列表中。 In [225]:components Ou
我想确保我了解属性 use_idf 和 sublinear_tf 在 TfidfVectorizer 对象中的作用。这几天我一直在研究这个。我正在尝试对不同长度的文档进行分类,目前使用 tf-idf
我正在测试 TfidfVectorizer举个简单的例子,我想不出结果。 corpus = ["I'd like an apple", "An apple a day keeps
在 scikit-learn TfidfVectorizer允许我们拟合训练数据,然后使用相同的向量化器来转换我们的测试数据。 训练数据转换的输出是一个矩阵,表示给定文档的每个单词的 tf-idf 分
我正在尝试删除 TfidfVectorizer 中法语和英语的停用词。到目前为止,我只成功地从英语中删除了停用词。当我尝试为 stop_words 输入法语时,收到一条错误消息,指出它不是内置的。 事
我正在尝试在一组上训练 NLP 模型,保存词汇和模型,然后将其应用于单独的验证集。代码正在运行,但我如何确定它按我的预期工作? 换句话说,我从训练集中保存了词汇和 nmodel,然后使用保存的词汇创建
我有一个相当简单的 NLTK 和 sklearn 分类器(我对此完全是菜鸟)。 我进行通常的导入 import pandas as pd import matplotlib.pyplot as plt
我正在绘制一组二维文本文档,我注意到一些异常值,我希望能够找出这些异常值是什么。我使用原始文本,然后使用 SKLearn 内置的 TfidfVectorizer。 vectorizer = Tfi
我是一名优秀的程序员,十分优秀!