我的数据集包含一个数字要素和一个分类要素。它只有20个观察结果(用于问题目的)。
X是一个形状(20,1)的numpy数组,如:
array([[10],
[465],
[3556],
[899],
[090],
....]]
encoded_x是一个numpy形状的数组(20,4),就像:
array([[ 0., 1., 0., 0.],
[ 1., 0., 0., 0.],
[ 0., 0., 1., 0.],
[ 0., 0., 1., 0.],
...................]]
问题:现在,如何合并这些数组以将它们作为Xgboost的输入?
最终阵列应该怎么样?
我的理解是数字特征不应该编码,这就是为什么我有两个不同的数组。
答案 0 :(得分:1)
XGBoost方法与神经网络略有不同。它要求您为输入设置一个数值矩阵,这使您对 的功能的看法不同。
从您的角度来看,有 2个功能:一个是分类,一个是数字。但是XGBoost会看到 5个功能,其中4个因为某些原因只需要两个值:0
或1
。 XGBoost不知道单热编码,它只看到数字。
因此,无论您如何编码分类特征(序数或一热),您都应该将所有结果数组连接成一个2D数组,并使其适合模型。
x1 = np.arange(20).reshape([-1, 1]) # numerical feature
x2 = np.random.randint(0, 2, size=[20, 4]) # not one-hot, but still ok for XGBoost
x = np.concatenate([x1, x2], axis=1) # now it's 5 XGBoost features