如何将多维数据传递给xgboost模型

时间:2018-04-26 02:19:31

标签: python machine-learning xgboost

基本上这就是我对xgboost所拥有的

model = XGBClassifier()

model.fit(X_train, y_train)

其中X_trainy_train是numpy数组。 我的问题是X_train似乎必须采用数字矩阵的格式,其中每一行都是一组数字,例如:

[1, 5, 3, 6]

但是,我所拥有的数据是一组向量的格式。每个向量由一个介于1,3之间的数字和一个介于0,1之间的置信区间组成。因此,X_train的一行看起来像:

[[1, .84], [2, .5], [3, .44], [2, .76]]

但是我无法弄清楚如何将这种格式的数据传递给xgboost。 我是xgboost的新手,所以我一直在阅读文档,但我似乎无法找到我正在寻找的东西。谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

方法1

我建议为每个系统制作3列,该系统具有所有3个类的概率。然后将这些列组合用于所有系统。

这样的事情:

Index   Sys1_Cls1  Sys1_Cls2  Sys1_Cls3  Sys2_Cls1  Sys2_Cls2  Sys2_Cls3  \
    0   0.310903   0.521839   0.167258   0.034925   0.509087   0.455988   
    1   0.402701   0.315302   0.281997   0.044981   0.137326   0.817693   
    2   0.272443   0.409210   0.318347   0.591514   0.170707   0.237778   
    3   0.272599   0.304014   0.423388   0.175838   0.324275   0.499887   
    4   0.339352   0.341860   0.318788   0.574995   0.169180   0.255824   

       Sys3_Cls1  Sys3_Cls2  Sys3_Cls3  Sys4_Cls1  Sys4_Cls2  Sys4_Cls3  
       0.173293   0.279590   0.547117   0.441913   0.251394   0.306692  
       0.224656   0.425100   0.350244   0.430451   0.382072   0.187476  
       0.198573   0.603826   0.197600   0.412734   0.185472   0.401795  
       0.011399   0.598892   0.389709   0.057813   0.651510   0.290677  
       0.025087   0.478595   0.496317   0.539963   0.288596   0.171440  

此处'Sys1_Cls1'表示System1 for class1的概率等等。

这可以是您的X。对于y,请为该样本指定实际的类。

因此X的形状为(n_samples, 12)y的形状为(n_samples)

如果您有更多系统,这些系统可以类似地附加为功能(列)。

方法2 : 另一个是您为特定类别获取所有系统的总和或平均值(或加权平均值)。在这种情况下,无论系统如何,您都只有3列。

  Index       Cls1      Cls2      Cls3
    0       0.187362  0.151723  0.660914
    1       0.378118  0.293932  0.327950
    2       0.424903  0.278271  0.296825
    3       0.342273  0.274003  0.383723
    4       0.405926  0.104094  0.489981

列中的特定值可以是:

cls1_val = Sys1_Cls1 + Sys2_Cls1 + Sys3_Cls1 + ...

OR

cls1_val = (Sys1_Cls1 + Sys2_Cls1 + Sys3_Cls1 + ...)/number_systems

OR

cls1_val = (weight1 x Sys1_Cls1 + weight2 x Sys2_Cls1 + weight3 x Sys3_Cls1 + ...)/number_systems

X的形状为(n_samples, 3)

尝试不同的方法并保持最佳效果。

注意:顺便说一下,你想通过组合不同系统的概率然后最终预测最终类来实现的目标被称为堆叠。有关详细信息,请参阅这些资源: