Python Xgboost OneHotEncoding:合并数字和编码数组
我的数据集包含一个数字特征和一个分类特征。它只有20条观察结果(用于提问目的) X是形状(20,1)的numpy数组,类似于: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
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
如果这两个数组具有相同的行(它们可能应该具有相同的行),则可以使用。