基本上这就是我对xgboost所拥有的
model = XGBClassifier()
model.fit(X_train, y_train)
其中X_train
和y_train
是numpy数组。
我的问题是X_train
似乎必须采用数字矩阵的格式,其中每一行都是一组数字,例如:
[1, 5, 3, 6]
但是,我所拥有的数据是一组向量的格式。每个向量由一个介于1,3之间的数字和一个介于0,1之间的置信区间组成。因此,X_train
的一行看起来像:
[[1, .84], [2, .5], [3, .44], [2, .76]]
但是我无法弄清楚如何将这种格式的数据传递给xgboost。 我是xgboost的新手,所以我一直在阅读文档,但我似乎无法找到我正在寻找的东西。谢谢你的帮助。
答案 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)
尝试不同的方法并保持最佳效果。
注意:顺便说一下,你想通过组合不同系统的概率然后最终预测最终类来实现的目标被称为堆叠。有关详细信息,请参阅这些资源: