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

时间:2017-11-01 17:06:21

标签: python arrays numpy xgboost one-hot-encoding

我的数据集包含一个数字要素和一个分类要素。它只有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的输入?
最终阵列应该怎么样?
我的理解是数字特征不应该编码,这就是为什么我有两个不同的数组。

1 个答案:

答案 0 :(得分:1)

XGBoost方法与神经网络略有不同。它要求您为输入设置一个数值矩阵,这使您对 的功能的看法不同。

从您的角度来看,有 2个功能:一个是分类,一个是数字。但是XGBoost会看到 5个功能,其中4个因为某些原因只需要两个值:01。 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