首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TfidfVectorizer toarray()和HashingVectorizer的意义

TfidfVectorizer toarray()和HashingVectorizer的意义
EN

Stack Overflow用户
提问于 2019-02-06 21:30:47
回答 2查看 1.5K关注 0票数 0

我在试着理解python中的向量器。我正在使用下面的示例代码:

代码语言:javascript
复制
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_)

产出如下:

代码语言:javascript
复制
['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()为不同的word..for示例产生重复的数字--有0.36388646,4,times..and,0.27674503,2,times..what --会出现这个数字吗?神经网络用来自我训练的数字是用vectorizer.vocabulary_打印出来的。

与散列向量器相反,我有以下代码:

代码语言:javascript
复制
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())

这就是输出:

代码语言:javascript
复制
(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)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-07 08:58:35

  • 在第一种情况下,您会看到重复的数字,因为您的“语料库”中有多个单词,有相同的IDF (反向文档频率)。例如,单词狗和狐狸在你的文本中有着完全相同的发生模式,所以他们有相同的以色列国防军;这两个词用1.28768207值表示。单词The出现在每个文本中,所以它用1来表示。词汇表中的其余单词在第一篇文本中出现一次,而在另外两篇中没有出现,因此它们都具有完全相同的以色列国防军。您可以看到哪个功能与vectorizer.get_feature_names()对应的哪个单词。
  • 使用HashingVectorizer,您已经选择了功能的数量为20,但是文本中唯一的单词总数少于20个,所以您将有许多特性为0。您得到的非零元素少于8个,因为存在一些散列冲突--这是因为20功能太少,无法避免冲突(请考虑默认值为2^20)。如果您选择一个更高的n_features,您将得到确切的8个非零元素。您有重复的值,因为,再次,几乎所有的特征都有相同的频率在该文本。
  • 对于标题中的问题, method将学习使用的稀疏矩阵的高效表示转换为普通可读的密集ndarray表示。
票数 1
EN

Stack Overflow用户

发布于 2019-02-07 09:32:58

TfidfVectorizer()

将原始文档集合转换为TF-以色列国防军功能矩阵。你在跑

Vectorizer.fit(文本)

只是我建议你跑

Vectorizer.fit_transform(文本)

然后它标记您的文本,为您的文本创建一个功能。因为你的文本有8个功能({‘s’:7,'lazy':6,'brown':0,'fox':2,‘跃’:3,'over':5,‘懒惰’:4,‘狗’:1}返回了与它们对应的8个频率。您还可以通过运行

打印(vectorizer.get_feature_names())

这会给你‘布朗’,‘狗’,‘狐狸’,‘跳跃’,‘懒惰’,‘结束’,‘快速’,‘’

打印(vectorizer.fit_transform(文本).shape)

会给你

(3、8)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54562820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档