我可以使用嵌入层而不是一个热层作为类别输入吗?
Can I use embedding layer instead of one hot as category input?
我正在尝试使用 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可以认为是一个字段。其他属性类似。
我的问题是是否可以使用embedding层来代替一次热编码的过程?但是,这让我有些担心。
- 我没有任何其他相关的数据集,所以我不能使用任何
预训练的嵌入模型。我只能随机初始化嵌入
权重并用我自己的数据集训练它。这种方式会接近吗
工作?
- 如果我使用嵌入层而不是一种热编码,是吗
意味着每个属性将属于一个字段?
- 这两种方法有什么区别?哪个更好?
是的,您可以使用嵌入,这种方法确实有效。
该属性将不等于嵌入中的一个元素,但该元素的组合将等于该属性。嵌入的大小是您必须 select 自己决定的。一个很好的公式是 embedding_size = min(50, m+1// 2)
。其中 m
是类别数,因此如果您有 m=10
,您的嵌入大小将为 5
。
更高的嵌入大小意味着它将捕获有关分类变量之间关系的更多细节。
根据我的经验,嵌入确实有帮助,尤其是当你在某个类别中有 100 个类别时(如果你有少量类别,即一个人的性别,那么单热编码就足够了)。
我发现当一个类别中有 100 个唯一值时,嵌入通常表现更好。为什么会这样,我没有任何具体原因,但有一些直觉。
例如,将类别表示为 300 维密集向量(词嵌入)需要分类器学习比将类别表示为 50,000 维向量(单热编码)少得多的权重,并且较小的参数 space 可能有助于泛化和避免过度拟合。
我正在尝试使用 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可以认为是一个字段。其他属性类似。
我的问题是是否可以使用embedding层来代替一次热编码的过程?但是,这让我有些担心。
- 我没有任何其他相关的数据集,所以我不能使用任何 预训练的嵌入模型。我只能随机初始化嵌入 权重并用我自己的数据集训练它。这种方式会接近吗 工作?
- 如果我使用嵌入层而不是一种热编码,是吗 意味着每个属性将属于一个字段?
- 这两种方法有什么区别?哪个更好?
是的,您可以使用嵌入,这种方法确实有效。
该属性将不等于嵌入中的一个元素,但该元素的组合将等于该属性。嵌入的大小是您必须 select 自己决定的。一个很好的公式是 embedding_size = min(50, m+1// 2)
。其中 m
是类别数,因此如果您有 m=10
,您的嵌入大小将为 5
。
更高的嵌入大小意味着它将捕获有关分类变量之间关系的更多细节。
根据我的经验,嵌入确实有帮助,尤其是当你在某个类别中有 100 个类别时(如果你有少量类别,即一个人的性别,那么单热编码就足够了)。
我发现当一个类别中有 100 个唯一值时,嵌入通常表现更好。为什么会这样,我没有任何具体原因,但有一些直觉。
例如,将类别表示为 300 维密集向量(词嵌入)需要分类器学习比将类别表示为 50,000 维向量(单热编码)少得多的权重,并且较小的参数 space 可能有助于泛化和避免过度拟合。