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

时间:2015-02-04 22:52:39

标签: machine-learning random-forest

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

  1. ONE:随机选择80%的数据用于培训,另外20%用于测试。
  2. TWO:根据时间戳对数据集进行排序,然后是培训的前80%和测试的最后20%。
  3. 然后我从两个数据集中删除了timestamp属性,并使用其他11个属性进行训练和测试(我确信时间戳不应该是训练的一部分)。

    结果:这两个数据集的结果完全不同。对于第一个AUC(曲线下面积)是85%-90%(我做了几次实验),第二个是45%-50%。

    如果有人能帮助我知道,我很感激

    1. 为什么我会有这么大的差异。
    2. 此外,我需要使用最新时间戳的测试数据集(与第二个实验中的数据集相同)。无论如何,从数据集的其余部分中选择数据以进行培训以改进 训练。
    3. PS:我已经从前80%的时间戳中测试了随机选择,并没有改善性能。

1 个答案:

答案 0 :(得分:3)

首先,目前尚不清楚你是如何进行测试的。第二,无论哪种方式,你做错了测试

  
    

结果:这两个数据集的结果完全不同。对于第一个AUC(曲线下面积)是85%-90%(我做了几次实验),第二个是45%-50%。

  

这是针对训练集还是测试集?如果测试集合,那意味着你的泛化能力差。

你做错了,因为你不允许调整你的模型,以便它在同一个测试集上表现良好,因为它可能会引导你进入一个能做到这一点的模型,但这种做法很糟糕。

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

<强> 1。培训验证测试分组

保持60%的数据用于培训,20%用于验证,20%用于以随机方式进行测试。训练您的模型,以便使用您的训练集在验证集上表现良好。确保你不要过度训练:训练集上的表现应该接近验证集上的表现,如果距离很远,你就会过度训练你的训练集。 现阶段根本不要使用测试集

一旦您满意,请在训练集+验证集上训练您选择的模型,并在您已经坚持的测试集上进行测试。你应该得到可接受的表现。根据您在此测试集上获得的结果,您不能进一步调整您的模型,如果您不满意,则必须从头开始。

<强> 2。使用cross validation

一种流行的形式是10倍交叉验证:将您的数据洗牌并将其分成10组相等或几乎相等的大小。对于10个小组中的每个小组,在另外9个小组上训练并对剩余的小组进行测试。在测试组中平均您的结果。

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

我个人更喜欢交叉验证。

我猜测会发生什么,通过基于时间戳排序,你会使你的算法概括不好。也许您保留用于测试的20%会以某种方式显着不同,并且您的算法没有机会捕获这种差异?通常,您的数据应该随机排序,以避免此类问题。

当然,您可能还有一个错误的实施。

我建议你尝试交叉验证,看看你得到了什么结果。