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

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

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

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


回答:

二进制独热编码是将类别数据输入到线性模型和使用标准核的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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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