Python FeatureHasher的输出矩阵中的负值意味着什么?

Python FeatureHasher的输出矩阵中的负值意味着什么?,python,scikit-learn,Python,Scikit Learn,我希望FeatureHasher的输出稀疏矩阵中的所有值都是非负的,因为我认为它应该只计算术语频率,并借助哈希函数对术语进行索引。当碰撞发生时,我希望它只是将“碰撞项”的频率相加。然而,似乎我错了,因为它实际上输出了一堆负值,给定了一个字典列表,其中术语作为键,术语频率作为值 负值在这里到底意味着什么?如果输入值都是正值(术语频率),那么负值实际上并不意味着什么。引用: 由于散列函数可能会导致(不相关)特征之间的冲突,因此使用带符号的散列函数,并且散列值的符号确定存储在特征的输出矩阵中的值的符号

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


负值在这里到底意味着什么?

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

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

维基百科上有一个展示这一计划效果的图片,它是由。它不仅减轻了碰撞的影响,而且使你的特征表现得更像高斯,这有助于一些学习算法

如果要去除负值,则将
non_negative=True
传递给
FeatureHasher
构造函数。该选项的实现有点困难,但它使tf-idf和naivebayes再次发挥作用