如何在python中使用HashingVectorizer时获取功能名称?

时间:2014-04-04 06:36:30

标签: scikit-learn feature-extraction

我想制作一个二维二进制数组(n_samples,n_features),其中每个样本都是一个文本字符串,每个特征都是一个单词(unigram)。

问题是样本数为350000,功能数为40000,但我的RAM大小仅为4GB。

  1. 使用CountVectorizer后出现内存错误。那么,还有其他方法(比如小批量)吗?

  2. 如果我使用HashingVectorizer,那么如何获取feature_names?即哪个列对应哪个功能?,因为在HashingVectorizer中没有get_feature_names()方法。

2 个答案:

答案 0 :(得分:3)

  1. 计数器中不支持迷你批次。但是,sklearn的哈希矢量化器可以使用partial_fit()

  2. 引用sklearn文档"无法计算逆变换(从特征索引到字符串特征名称),这在尝试内省哪些特征对模型最重要时可能是个问题。 #34;

答案 1 :(得分:2)

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

一个无耻的插件 - https://github.com/TeamHG-Memex/eli5包实现了这个:

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文档中的Debugging Hashing Vectorizer部分。