You need to enable JavaScript to run this app. 如何将Keras神经网络训练好的Embedding层作为XGBoost模型的输入特征
优惠活动
大模型
产品
解决方案
定价
更多

如何将Keras神经网络训练好的Embedding层作为XGBoost模型的输入特征

类别Embedding与连续特征拼接方案

核心原理

你训练得到的Embedding权重数组的每一行,和之前给类别生成的映射值是一一对应的:数组第i行,就是映射值为i的类别对应的降维后特征向量。你提到的「类别数量+1」的多出来的1行,是预留的OOV(Out Of Vocabulary,训练集中未出现过的新类别)的特征向量,用来处理预测时遇到未知类别的情况。

具体实现步骤

直接用样本的类别映射值作为索引,从Embedding权重数组中取出对应向量,再和连续特征沿列方向拼接即可,对应你的示例代码的实现如下:

import numpy as np

# 1. 提取训练集每个样本对应的类别Embedding向量
train_area_embeds = embeddings_output[X_train_categorical['area_mapping'].values]
# 此时train_area_embeds形状为 (3000, 2),和训练集样本数一致,2为自定义的Embedding输出维度

# 2. 与连续特征拼接
X_train_xgb = np.concatenate([X_train_continuous.values, train_area_embeds], axis=1)
# 拼接后X_train_xgb形状为 (3000, 2+2=4),可直接作为XGBoost的输入特征

# 验证集/测试集同理处理
val_area_embeds = embeddings_output[X_val_categorical['area_mapping'].values]
X_val_xgb = np.concatenate([X_val_continuous.values, val_area_embeds], axis=1)

关于Embedding额外维度的说明

你的示例中Embedding层形状为(4, 2),各索引对应的含义如下:

  • 索引0:代码中未使用(因为你的类别映射从1开始),训练过程中该向量未被更新,可直接忽略
  • 索引1/2/3:分别对应训练集中出现的三个区域类别Mercaz、Old North、Florentine
  • 最后一行(索引3):为OOV类别预留,遇到训练集中未出现的新类别时,直接取该向量作为Embedding特征即可
    注:如果你的示例中OOV映射返回值为4,会超出Embedding输入维度范围,建议将OOV映射值修改为3,适配Embedding最后一行的索引

内容的提问来源于stack exchange,提问作者Marla

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 08:15:03