【问题标题】:Can I use embedding layer instead of one hot as category input?我可以使用嵌入层而不是一个热作为类别输入吗?
【发布时间】:2021-01-31 07:12:23
【问题描述】:

我正在尝试使用 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-learning keras deep-learning prediction


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 所以你的意思是对于一个数据集我可以同时使用嵌入层和一个热编码?
    • 是的,有可能here is a sample
    猜你喜欢
    • 1970-01-01
    • 2012-12-17
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 1970-01-01
    • 2014-04-23
    • 2011-05-01
    • 1970-01-01
    相关资源
    最近更新 更多