Python Xgboost OneHotEncoding:合并数字和编码数组

Python Xgboost OneHotEncoding:合并数字和编码数组,python,arrays,numpy,xgboost,one-hot-encoding,Python,Arrays,Numpy,Xgboost,One Hot Encoding,我的数据集包含一个数字特征和一个分类特征。它只有20条观察结果(用于提问目的) X是形状(20,1)的numpy数组,类似于: array([[10], [465], [3556], [899], [090], ....]] 编码的_x是形状(20,4)的numpy数组,类似于: array([[ 0., 1., 0., 0.], [ 1., 0., 0., 0.], [ 0., 0., 1., 0

我的数据集包含一个数字特征和一个分类特征。它只有20条观察结果(用于提问目的)

X是形状(20,1)的numpy数组,类似于:

array([[10],  
   [465],  
   [3556],  
   [899],  
   [090], 
   ....]] 
编码的_x是形状(20,4)的numpy数组,类似于:

array([[ 0.,  1.,  0.,  0.],
       [ 1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  0.,  1.,  0.],
       ...................]]
问题:现在,我如何合并这些数组以将它们作为Xgboost的输入?
最终的数组应该是什么样子?

我的理解是数字特征不应该被编码,这就是为什么我有两个不同的数组。

XGBoost方法与神经网络有点不同。它要求你有一个数字矩阵作为输入,这使你对什么是特征有不同的想法

在你看来,有两个特征:一个是分类的,一个是数字的。但是XGBoost看到了5个特性,其中4个由于某种原因只使用了两个值:
0
1
。XGBoost不知道一种热编码,它只看到数字

因此,无论您如何编码分类特征(序数或一个hot),您都应该将所有结果数组连接到一个二维数组中,并使其适合模型

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
如果这两个数组具有相同的行(它们可能应该具有相同的行),则可以使用。