上面提到的编码可能存在的问题是,维度d当有高基数的变量时,会变得非常大。哈希的技巧非常受Vowpal Wabbit学习软件的欢迎,[Weinberger et al. 2009]中发表 并解决了这个问题。
思想是使用散列函数来减少功能可以采用的值的数量。
我们使用上一节中描述的虚拟编码,而不是c维码,我们最后得到一个d维的,其中d是哈希使用桶的数量。如果d <c,则会导致压缩表示。这种 情况一定会发生,但是如后所述,这不是主要的问题。
当处理特征时,有两种可能的策略:
(1)将每个特征f散列到$$d_f$$维空间中,表示为$$\sum d_f$$
(2)将所有特征都整合到相同的空间中,每个都使用不同的散列函数
我们使用第二种方法,因为它更容易实现。散列方法在算法1中给出。值$$v_f$$可以是任何类型,散列函数是内部代表行为。在算法1中,每个特征有f一个散列函数$$h_f$$。
还有一些减少模型维度的方法,例如 丢弃不常见的值,但它们需要更多的数据处理和使用 字典。 哈希技巧的非常实用的因为它的简单性:它不需要任何额外的数据处理或数据存储,直接可行。