如何将多维数据传入xgboost模型
How to pass in multidimensional data to xgboost model
基本上这就是我对 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 的新手,所以我一直在阅读文档,但我似乎找不到我要找的东西。感谢您的帮助。
方法一:
我建议为每个系统制作 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 .有关更多信息,请参阅这些资源:
基本上这就是我对 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 的新手,所以我一直在阅读文档,但我似乎找不到我要找的东西。感谢您的帮助。
方法一:
我建议为每个系统制作 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 .有关更多信息,请参阅这些资源: