根据https://spark.apache.org/docs/2.3.0/ml-features.html#tf-idf:
“ HashingTF利用了哈希技巧。通过应用哈希函数将原始特征映射到索引(项)。这里使用的哈希函数是MurmurHash3。” ... “由于使用散列值的简单模来确定向量索引,因此建议使用2的幂作为特征维,否则特征将不会均匀地映射到向量索引。” < / p>
我试图理解为什么使用2的幂作为特征维会均匀地映射单词,并试图在互联网上找到一些有用的文档来理解它,但是两次尝试都没有成功。
有人为什么使用幂次幂将两个单词均匀地映射到矢量索引上?
答案 0 :(得分:1)
哈希函数的输出为b
位,即,存在2^b
个可以将特征哈希到的可能值。此外,我们假设2^b
可能的值均匀地随机出现。
如果d
是要素维,则将要素f
的索引确定为hash(f) MOD d
。同样,hash(f)
采用2^b
可能的值。很容易看出,d
本身必须是2的幂(即2^b
的除数),才能保持均匀性。
作为反例,请考虑2位哈希函数和3维特征空间。根据我们的假设,哈希函数输出0、1、2或3的概率分别为1/4。但是,采用mod 3会导致0的概率为 1/2 ,或者1或2的概率为 1/4 。因此,不能保持均匀性。另一方面;如果特征空间是二维的,则很容易看到结果为0或1,概率分别为1/2。