一、为什么需要hash trick?
在工业界,数据经常不仅是量大,而且维度也很高,所以出现很多具体的大规模的机器学习问题,比如点击率预测问题。在CTR中,特征涉及到广告主和用户等。大多特征都可以看做categorical。对categorical feature一般使用1-of-c编码方式(统计里称为dummy coding)。对于取值为实数的特征我们可以进行离散化处理(实际应用中一般也不直接把连续值的特征直接交由模型处理)。可能有的特征对应的取值非常多,所以这种编码方式就容易导致维度非常高(维数灾难问题)。当然也有其他原因造成该问题维度很高,比如将不同特征做笛卡尔积产生新的特征(参考链接6中提到很多广告公司宣称使用的几十上百亿特征都是用这个方法搞出来的)。
那如何降维呢?我们可以首先去除特征中不频繁的值,这样特征对应的取值减少,维数会降低。但是这种方法需要对数据进行预处理。至于PCA等常见的降维方法,由于数据量实在太大而不太适合使用。而hash trick是一种越来越受欢迎的降维方法。它不需要进行数据预处理,实现简单直接。
对于一些非线性问题,我们可以将输入空间映射到高维的特征的空间,使问题变成一个线性问题。使用kernel trick可以通过低维度的样本点的核函数计算得到高维度中向量的内积。但是在文本分类问题中,就会碰到一个问题。文本分类问题也是一个典型的高维问题,而且由于手工添加的一些非线性特征,原始的输入空间就线性可分,这样就没必要在将输入映射到更高位的特征空间了。而是需要使用降维方法。hash trick和ker