在处理高基数数据的预处理中,是先进行哈希处理还是先进行独热编码?

哈希处理可以降低维度,而独热编码则通过将多类别变量转换为多个二进制变量,实际上是扩大了特征空间。因此,它们似乎具有相反的效果。我的问题是:

在同一数据集上同时使用这两种方法有什么好处?我读到了一些关于捕捉交互作用的内容,但没有详细说明——有人能详细解释一下吗?

哪一种方法应该先进行,为什么?


回答:

二进制独热编码是将类别数据输入到线性模型和使用标准核的SVM中所必需的

例如,你可能有一个特征是星期几。然后你为每个星期几创建一个独热编码。

1000000 星期日0100000 星期一0010000 星期二...0000001 星期六

特征哈希主要用于允许对参数向量进行显著的存储压缩:将高维输入向量哈希到一个较低维的特征空间中。因此,结果分类器的参数向量可以存在于较低维的空间中,而不是在原始输入空间中。这可以作为一种降维方法,因此通常你期望以牺牲一些性能为代价来换取显著的存储优势。

维基百科上的例子很好。假设你有三份文档:

  • John喜欢看电影。
  • Mary也喜欢电影。
  • John也喜欢足球。

使用词袋模型,你首先创建下面的文档到词模型。(每行是一个文档,矩阵中的每个条目表示一个词是否出现在文档中)。

enter image description here

这种处理的问题在于这样的词典占用了大量的存储空间,并且随着训练集的增长而增长。

与其维护一个词典,使用哈希技巧的特征向量化器可以通过对考虑项中的特征(例如,词)应用哈希函数h,然后直接使用哈希值作为特征索引,并在这些索引处更新结果向量,从而构建一个预定义长度的向量。

假设你生成了3个桶的哈希特征。(你对原始特征应用k个不同的哈希函数,并计算哈希值命中桶的次数)。

       桶1 桶2  桶3doc1:    3    2    0doc2:    2    2    0doc3:    1    0    2

现在你成功地将9维的特征转换为了3维的特征。

特征哈希的一个更有趣的应用是进行个性化。特征哈希的原始论文中包含了一个很好的例子。

想象一下,你想设计一个垃圾邮件过滤器,但要针对每个用户进行定制。做这件事的简单方法是为每个用户训练一个单独的分类器,这在训练(训练和更新个性化模型)或服务(在内存中保存所有分类器)方面都是不可行的。一个聪明的方法如下所示:

enter image description here

  • 每个标记都被复制,并且其中一份通过将每个词与唯一的用户ID连接起来进行个性化处理。(参见USER123_NEUUSER123_Votre)。
  • 词袋模型现在包含了通用关键词和特定用户的关键词。
  • 然后所有词都被哈希到一个低维特征空间中,在那里对文档进行训练和分类。

现在回答你的问题:

是的,独热编码应该先进行,因为它是将类别特征转换为二进制特征,使其能够被线性模型使用。你当然可以对同一数据集同时应用这两种方法,只要使用压缩特征空间有好处即可。注意,如果你能容忍原始特征维度,则不需要特征哈希。例如,在常见的数字识别问题中,例如MINST,图像由28×28的二进制像素表示。输入维度只有784。在这种情况下,特征哈希肯定不会有任何好处。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注