【问题标题】:Xgboost OneHotEncoding: merge numerical and encoded arrayXgboost OneHotEncoding:合并数字和编码数组
【发布时间】:2018-04-14 01:55:13
【问题描述】:

我的数据集包含一个数字特征和一个分类特征。它只有 20 个观察值(出于问题目的)。

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

array([[10],  
   [465],  
   [3556],  
   [899],  
   [090], 
   ....]] 

encoded_x 是一个形状为 (20,4) 的 numpy 数组,类似于:

array([[ 0.,  1.,  0.,  0.],
       [ 1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.],
       [ 0.,  0.,  1.,  0.],
       ...................]]

问题:现在,如何合并这些数组以将它们作为 Xgboost 的输入?
最终的数组应该是什么样子?
我的理解是数字特征不应该被编码,这就是为什么我有两个不同的数组。

【问题讨论】:

  • 如果这两个数组具有相同的行(它们可能应该),您可以使用numpy hstack

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


【解决方案1】:

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

在您看来,有 2 个特征:一个是分类的,一个是数值的。但是 XGBoost 看到 5 个特征,其中 4 个由于某种原因只取两个值:01。 XGBoost 不知道 one-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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2011-10-29
    • 2014-11-22
    相关资源
    最近更新 更多