首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中使用HashingVectorizer获取特性名称?

如何在python中使用HashingVectorizer获取特性名称?
EN

Stack Overflow用户
提问于 2014-04-04 06:36:29
回答 2查看 2.9K关注 0票数 5

我想要制作一个二维二进制数组(n_samples,n_features),其中每个示例都是一个文本字符串,每个特性都是一个单词(Unigram)。

问题是样本数为350000,特征数为40000,但我的内存大小仅为4GB。

  1. 使用CountVectorizer后,我会收到内存错误。那么,还有其他方法(比如迷你批次)来做这件事吗?
  2. 如果我使用HashingVectorizer,那么如何获得feature_names?也就是说,哪个列对应于哪个特性?,因为get_feature_names()方法在HashingVectorizer中不可用。
EN

回答 2

Stack Overflow用户

发布于 2014-04-04 16:25:42

  1. 迷你批次不支持在计数器。但是,sklearn的散列向量器有您可以使用的partial_fit()
  2. 引用sklearn文档的话说:“没有办法计算逆变换(从特征索引到字符串特征名),当试图内省哪些特性对模型最重要时,这可能是一个问题。
票数 3
EN

Stack Overflow用户

发布于 2016-12-12 21:26:06

要获取HashingVectorizer的特征名,您可以获取文档的随机样本,为它们计算散列,并通过这种方式了解哪个哈希对应于哪个标记。这并不完美,因为可以有与给定列对应的其他标记,并且可能会发生冲突,但这通常足以检查向量化结果(或者使用散列特征的线性分类器的系数)。

一个无耻的即插即用https://github.com/TeamHG-Memex/eli5包实现了以下功能:

代码语言:javascript
复制
from eli5.sklearn import InvertableHashingVectorizer

# vec should be a HashingVectorizer instance
ivec = InvertableHashingVectorizer(vec) 
ivec.fit(docs_sample)  # e.g. each 10-th or 100-th document
names = ivec.get_feature_names()

还请参阅:调试散列向量器文档中的eli5部分。

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

https://stackoverflow.com/questions/22855297

复制
相关文章

相似问题

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