基本上这是我对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还比较新,所以我一直在阅读文档,但我似乎找不到我需要的信息。谢谢你的帮助。
回答:
方法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)。请查看这些资源以获取更多信息: