gpt4 book ai didi

python - TfidfVectorizer toarray() 和 HashingVectorizer 的含义

转载 作者:行者123 更新时间:2023-11-30 09:44:16 24 4
gpt4 key购买 nike

我正在尝试理解 python 中的向量化器..我正在使用这个示例代码:

from sklearn.feature_extraction.text import TfidfVectorizer
# list of text documents
text = ["The quick brown fox jumped over the lazy dog.", "The dog.", "The fox"]
print(text)
# create the transform
vectorizer = TfidfVectorizer()
# tokenize and build vocab
vectorizer.fit(text)
# summarize
print(vectorizer.idf_)
# encode document
vector = vectorizer.transform([text[0]])
# summarize encoded vector
print(vector.shape)
print(vector.toarray())
print(vectorizer.vocabulary_)

输出是这样的:

['The quick brown fox jumped over the lazy dog.', 'The dog.', 'The fox']
[1.69314718 1.28768207 1.28768207 1.69314718 1.69314718 1.69314718
1.69314718 1. ]
(1, 8)
[[0.36388646 0.27674503 0.27674503 0.36388646 0.36388646 0.36388646
0.36388646 0.42983441]]
{'the': 7, 'quick': 6, 'brown': 0, 'fox': 2, 'jumped': 3, 'over': 5,
'lazy': 4, 'dog': 1}

我不明白为什么 vector.toarray() 会为不同的单词产生重复的数字..例如有 0.36388646 四次..和 0.27674503 两次..这个数字代表什么?神经网络用于 self 训练的数字是用vectorizer.vocabulary_打印的数字?

使用哈希向量化器,我有以下代码:

from sklearn.feature_extraction.text import HashingVectorizer
# list of text documents
text = ["The quick brown fox jumped over the lazy dog."]
# create the transform
vectorizer = HashingVectorizer(n_features=20)
# encode document
vector = vectorizer.fit_transform(text)
# summarize encoded vector
print(vector.shape)
print(vector.toarray())

这就是输出:

(1, 20)
[[ 0. 0. 0. 0. 0. 0.33333333
0. -0.33333333 0.33333333 0. 0. 0.33333333
0. 0. 0. -0.33333333 0. 0.
-0.66666667 0. ]]

是否使用了 0. 值?什么现成的?为什么即使在那里它也会打印重复的值? (0.3333333 和 -0.33333333)

最佳答案

  • 在第一种情况下您会看到重复的数字,因为您的“语料库”中有多个具有相同 IDF(逆文档频率)的单词。例如,单词 dogfox 在文本中具有完全相同的出现模式,因此它们具有相同的 IDF;这两个值由 1.28768207 表示。单词 the 在每个文本中都出现,因此用 1 表示。词汇表中的其余单词在第一个文本中出现一次,而在其他两个文本中没有出现,因此它们都具有完全相同的以色列国防军。您可以使用 vectorizer.get_feature_names() 查看哪个特征对应于哪个单词。
  • 使用 HashingVectorizer,您选择的特征数量为 20,但文本中唯一单词的总数少于 20,因此您将拥有很多为 0 的特征。您得到的非特征少于 8 个-零元素,因为存在一些哈希冲突 - 这是因为 20 的特征太少,无法避免冲突(考虑默认值为 2^20)。如果您选择更高的 n_features,您将获得正好 8 个非零元素。您有重复的值,因为几乎所有功能在该文本中都具有相同的频率。
  • 对于您标题中的问题,toarray() method将 sklearn 使用的稀疏矩阵的有效表示转换为普通可读的密集 ndarray 表示。

关于python - TfidfVectorizer toarray() 和 HashingVectorizer 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54562820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com