Python sklearn model.predict() 根据数据量给出不同的结果

数据挖掘 机器学习 Python xgboost 预测
2022-03-01 04:05:59

我训练我的 XGBoostClassifier()。如果我的测试集有:

0: 100 
1: 884

它试图预测 210 个 1。大约 147 个错误(假阳性)和 63 个正确预测的 1(真阳性)。

然后我增加我的测试样本:

0: 15,000
1: 884

它试图预测 56 个 1。大约 40 个是错误的(假阳性),16 个 1 是正确预测的(真阳性)。

我错过了什么吗?一些理论?关于如何使用的一些指示model.predict(X_test)

它是否在某处说 - 如果您尝试预测 10 个项目会比您尝试预测 10000 个项目更努力?model.predict(X_test)如果乔·史密斯的预测伴随着多 8000 行,在什么情况下会给我一个不同的结果?

我使用的代码如下:

from xgboost import XGBClassifier
xgb = XGBClassifier(subsample=0.75,scale_post_weight=30,min_child_weight=1,max_depth=3,gamma=5,colsample_bytree=0.75)
model = xgb.fit(X_train,y_train)
y_pred_output = model.predict(X_test)
cm = confusion_matrix(y_test, y_pred_output)

y_pred_output2 = model.predict(X_test2) #contains the same 884 1's plus 14500 more rows with 0's as the target value
cm = confusion_matrix(y_test2, y_pred_output2)

它产生两个不同的矩阵:

#Confusion matrix for y_test with 15000 0's and 884 1's
[[14864   136]
 [  837    47]]

#Confusion matrix for y_test with 500 0's and 884 1's
[[459  41]
 [681 203]]

请注意,两次尝试都使用了相同的 884 个肯定类项目。为什么仅仅因为我们现在在 X_test 上有更多的负数,真正的正数会下降到 47?

1个回答

如果 XGBoostClassifier 一遍又一遍地输入相同的输入数据,它将产生相同的结果。在这个分类器中没有固有的随机性,对于相同的输入会有不同的结果。此外 - 如果在较小的批次和较大的批次中请求单个预测的结果应该没有差异(同样结果将是相同的)。

另一方面——如果你在不同的数据上训练 XGBoost,它们的输出肯定会不同。如果您将新数据添加到基础数据集并使用它进行训练 - 将会出现 XGBoost 将尝试利用的新的和不同的模式,并且整个树网络将非常适合。

我怀疑您正在观察的是构建输入数据时的错误,然后您将其提供给 .predict() 方法。如果您共享代码示例,也许我们可以深入研究该问题。