首页 > 解决方案 > 我可以使用嵌入层而不是一个热作为类别输入吗?

问题描述

我正在尝试使用 FFM 来预测二进制标签。我的数据集如下:

sex|age|price|label
0|0|0|0
1|0|1|1

我知道 FFM 是将某些属性视为同一字段的模型。如果我使用一种热编码来转换数据集,那么数据集将如下所示:

sex_0|sex_1|age_0|age_1|price_0|price_1|label
0|0|0|0|0|0|0
0|1|0|0|0|1|1

因此,sex_0 和sex_1 可以被视为一个字段。其他属性类似。

我的问题是我是否可以使用嵌入层来代替一次热编码的过程?然而,这让我有些担心。

  1. 我没有任何其他相关的数据集,所以我不能使用任何预训练的嵌入模型。我只能随机初始化嵌入权重并通过我自己的数据集对其进行训练。这种方法会奏效吗?
  2. 如果我使用嵌入层而不是一种热编码,是否意味着每个属性都属于一个字段?
  3. 这两种方法有什么区别?哪个更好?

标签: machine-learningkerasdeep-learningprediction

解决方案


是的,您可以使用嵌入,并且这种方法确实有效。

该属性不等于嵌入中的一个元素,但元素的组合将等于该属性。嵌入的大小是您必须自己选择的。一个很好的公式是embedding_size = min(50, m+1// 2). 类别的数量在哪里 m,所以如果m=10有,嵌入大小为5.

更高的嵌入大小意味着它将捕获有关分类变量之间关系的更多细节。

以我的经验,嵌入确实有帮助,尤其是当您在某个类别中有 100 个类别时(如果您有少量类别,即一个人的性别,那么一次性编码就足够了)。

关于哪个更好,我发现当一个类别中有 100 个唯一值时,嵌入的性能通常会更好。为什么会这样,我没有任何具体的原因,但有一些直觉。

例如,将类别表示为 300 维密集向量(词嵌入)需要分类器学习的权重比将类别表示为 50,000 维向量(one-hot encoding)要少得多,并且较小的参数空间可能有助于泛化和避免过拟合。


推荐阅读