据https://spark.apache.org/docs/2.3.0/ml-features.html#tf-idf说:
“HashingTF利用哈希技巧。通过应用哈希函数将原始特征映射到索引(术语)。这里使用的哈希函数是MurmurHash 3。” ......“由于散列值的简单模数用于确定矢量索引,因此建议使用2的幂作为特征维度,否则特征将不会均匀映射到矢量索引。”
我试图理解为什么使用2的幂作为特征维度将均匀地映射单词并尝试在互联网上找到一些有用的文档来理解它,但两次尝试都没有成功。
有人为什么知道或有有用的资源来解释为什么使用功率两个地图均匀地映射到矢量索引?
散列函数的输出是b
-bit,即,存在可以对特征进行散列的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。