用不同的数据集训练随机森林给出完全不同的结果!为什么?

Training Random forest with different datasets gives totally different result! Why?

我正在处理一个包含 12 个属性的数据集,其中包括时间戳和一个作为输出的属性。它也有大约 4000 行。此外,记录中没有重复。我正在尝试训练随机森林来预测输出。为此,我创建了两个不同的数据集:

  1. ONE:随机选择 80% 的数据用于训练,另外 20% 用于测试。
  2. 两个:根据时间戳对数据集进行排序,然后前 80% 用于训练,后 20% 用于测试。

然后我从两个数据集中删除了时间戳属性,并将其他 11 个属性用于训练和测试(我确信时间戳不应该是训练的一部分)。

结果: 这两个数据集的结果完全不同。第一个AUC(Area under the curve)是85%-90%(我做了几次实验),第二个是45%-50%。

如果有人能帮助我知道,我将不胜感激

  1. 为什么我有这么大的差异。
  2. 此外,我还需要具有最新时间戳的测试数据集(与第二个实验中的数据集相同)。无论如何,是否有来自其余数据集的 select 数据用于训练以提高 培训。

PS:我已经从时间戳的前 80% 测试了随机 selection,但它并没有提高性能。

首先,不清楚你测试的准确程度。其次,无论哪种方式,你做的测试都是错误的

RESULT: I am getting totally different result for these two datasets. For the first one AUC(Area under the curve) is 85%-90% (I did the experiment several times) and for the second one is 45%-50%.

这是训练集还是测试集?如果是测试集,那说明你的泛化能力很差。

你做错了,因为你不允许调整你的模型以使其在同一测试集上表现良好,因为它可能会导致你得到一个可以做到这一点但泛化能力很差的模型。

你应该做以下两件事之一:

1.训练-验证-测试拆分

随机 方式保留 60% 的数据用于训练,20% 用于验证,20% 用于测试。训练您的模型,使其在使用您的训练集的验证集上表现良好。确保你没有过度拟合:训练集上的表现应该接近验证集上的表现,如果相差很远,你就过度拟合了你的训练集。 在此阶段完全不要使用测试集

满意后,在训练集 + 验证集上训练您选择的模型,并在您提供的测试集上对其进行测试。您应该获得可接受的性能。你不能根据你在这个测试集上得到的结果进一步调整你的模型,如果你不满意,你必须从头开始。

2。使用 cross validation

一种流行的形式是 10 折交叉验证:打乱数据并将其分成大小相等或几乎相等的 10 组。对于 10 组中的每一组,在其他 9 组上进行训练并在其余一组上进行测试。平均你在测试组的结果。

您可以对模型进行更改以提高平均分,只需 运行 每次更改后再次交叉验证(确保重新洗牌)。

我个人更喜欢交叉验证。

我猜会发生什么情况是,通过基于时间戳进行排序,您的算法泛化能力很差。也许您保留用于测试的 20% 以某种方式显着不同,并且您的算法没有机会捕获这种差异?一般来说,您的数据应该随机排序以避免此类问题。

当然,您的实现也可能有问题。

我建议您尝试交叉验证,然后看看您会得到什么结果。