FeatureHasher的输出矩阵中的负值是什么意思?

时间:2013-07-31 01:43:40

标签: python scikit-learn

我期望FeatureHasher的输出稀疏矩阵中的所有值都是非负的,因为我认为它应该只计算术语频率并借助散列函数索引术语。当碰撞发生时,我希望它只是加起来“碰撞的术语”的频率。然而,似乎我错了,因为它实际上输出了一堆负值,给出了一个字典列表,其中术语为键,术语频率为值。

负值究竟是什么意思?

1 个答案:

答案 0 :(得分:3)

如果输入值都是正值(术语频率),那么负值实际上并不意味着什么。引用scikit-learn docs

  

由于散列函数可能导致(不相关)特征之间的冲突,因此使用带符号的散列函数,并且散列值的符号确定存储在特征的输出矩阵中的值的符号。这样,碰撞可能会抵消而不是累积误差,并且任何输出要素值的预期平均值为零。

维基百科有little table显示该方案的效果,该方案由Weinberger et al.发明。它不仅减轻了碰撞的影响,而且使你的特征表现得更像高斯,这有助于一些学习算法。

如果要删除负值,请将non_negative=True传递给FeatureHasher构造函数。该选项的实现有点像黑客攻击,但它使tf-idf和朴素贝叶斯再次工作。