如何将多维数据传入xgboost模型

How to pass in multidimensional data to xgboost model

基本上这就是我对 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 的新手,所以我一直在阅读文档,但我似乎找不到我要找的东西。感谢您的帮助。

方法一:

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

像这样:

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为class1的概率,依此类推..

这可以是你的X。对于 y,分配实际的 class,你有那个样本。

所以你的 X 的形状将是 (n_samples, 12)y 的形状将是 (n_samples)

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

方法 2: 另一个是您对特定 class 求所有系统的总和或平均值(或加权平均值)。在这里,无论系统如何,您都只有 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)

尝试不同的方法并保留最有效的方法。

注意: 顺便说一句,你在这里试图通过组合不同系统的概率然后最终预测最终的 class 来实现的称为 Stacking .有关更多信息,请参阅这些资源: