您能否在最终的测试数据中重复使用您的训练数据中的观察结果?

数据挖掘 分类 r xgboost
2022-03-05 05:40:48

对于员工群体,我试图根据 2 年的数据来确定员工中哪些人将来可能会受伤。

与大多数机器学习问题中你试图根据未观察到的数据进行预测不同,我将处理相同的人群,因为你不会在短时间内看到大量的员工流动。

我正在使用XGboost实现。在整个人群中,我的标签表明员工是否受伤。我使用了 70% 的数据作为训练集,同时测试了剩余 30% 的准确性。我得到了相当不错的准确度评级。我能够准确地将受伤员工分类 90%(特异性)。虽然我的负面预测只有 70% 的准确率。我的假设是那些被错误归类为受伤的人,尽管他们在过去 2 年没有受伤,但他们可能在未来受伤或在 2 年前受伤。

我现在尝试在整个人群中测试该算法。我使用下面的 R 代码重新调整了我的整个人口数据,希望算法不会识别测试和训练数据中的观察结果:

df2 <- df1[sample(nrow(df1)),]

简而言之,我的训练数据是我全部人口的一个子集(新的/最终的测试数据)。当我比较结果时,训练和测试误差几乎相同。

是因为,我的大部分最终测试数据已经从我的训练数据中发现的观察中学到了吗?

如果我的方法不可接受,我还可以实施哪些其他选项,以使我的测试数据无法识别其中包含的某些观察结果已经在我的训练数据集中?

1个回答

XG Boost 中的 Out of Bag (OOB) 错误被视为验证错误(测试错误)。在 XG boost 中的超参数选择期间,针对不同的超参数测量 OOB 误差。在 XG Boost 算法中,决策树是由观察的随机样本构建的,而连续的决策树是通过更加重视先前树被错误分类的观察来构建的。随着这种 XG 提升不断增加决策树的数量,验证错误会在某个时候减少并达到饱和。

在您的情况下,您可以将此 OOB 错误视为测试错误,而不是创建单独的测试集。

下图更准确地解释了这一点在此处输入图像描述