che*_*ren 2 python scikit-learn
我希望输出稀疏矩阵中的所有值FeatureHasher
都是非负的,因为我认为它应该只计算术语频率并在散列函数的帮助下索引术语。当碰撞发生时,我希望它只是将“碰撞项”的频率相加。然而,似乎我错了,因为它实际上输出了一堆负值,给出了一个以术语作为键和术语频率作为值的字典列表。
这里的负值究竟是什么意思?
如果输入值都是正值(词频),那么负值实际上没有任何意义。引用scikit-learn 文档:
由于散列函数可能会导致(不相关的)特征之间发生冲突,因此使用带符号的散列函数并且散列值的符号确定存储在特征输出矩阵中的值的符号。这样,碰撞可能会抵消而不是累积错误,并且任何输出特征值的预期平均值为零。
维基百科有一个小表格展示了这个方案的效果,它是由Weinberger 等人发明的。. 它不仅减轻了碰撞的影响,而且使你的特征表现得更像高斯分布,这有助于一些学习算法。
如果你想摆脱负值,那么传递non_negative=True
给FeatureHasher
构造函数。该选项的实现有点像黑客,但它使 tf-idf 和朴素贝叶斯再次工作。
归档时间: |
|
查看次数: |
478 次 |
最近记录: |