如何将多维数据传递给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

我建议为每个系统创建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'表示系统1对类别1的概率,依此类推..

这可以作为你的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 + ...ORcls1_val = (Sys1_Cls1 + Sys2_Cls1 + Sys3_Cls1 + ...)/number_systemsORcls1_val = (weight1 x Sys1_Cls1 + weight2 x Sys2_Cls1 + weight3 x Sys3_Cls1 + ...)/number_systems

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

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

注意: 顺便说一下,你在这里尝试通过结合不同系统的概率来预测最终类别,这被称为堆叠(Stacking)。请查看这些资源以获取更多信息:

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注