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

Gra*_*ton 2 python machine-learning xgboost

本质上这就是我对 xgboost 的看法

model = XGBClassifier()

model.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)

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

[1, 5, 3, 6]
Run Code Online (Sandbox Code Playgroud)

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

[[1, .84], [2, .5], [3, .44], [2, .76]]
Run Code Online (Sandbox Code Playgroud)

但是我不知道如何将这种格式的数据传递给 xgboost。我对 xgboost 相当陌生,所以我一直在阅读文档,但我似乎找不到我要找的东西。谢谢你的帮助。

Viv*_*mar 5

方法一

我建议为每个系统制作 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  
Run Code Online (Sandbox Code Playgroud)

这里'Sys1_Cls1'指的是 System1 对于 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
Run Code Online (Sandbox Code Playgroud)

其中列中的特定值可以是:

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
Run Code Online (Sandbox Code Playgroud)

这里的形状X 将是(n_samples, 3)

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

注意:顺便说一句,您在这里试图通过组合不同系统的概率然后最终预测最终类别来实现的目标称为堆叠。请参阅这些资源以获取更多信息: