【问题标题】:Training Random forest with different datasets gives totally different result! Why?用不同的数据集训练随机森林会得到完全不同的结果!为什么?
【发布时间】:2015-02-04 22:52:39
【问题描述】:

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

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

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

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

如果有人可以帮助我了解,我将不胜感激

  1. 为什么我有这么大的差异。
  2. 我还需要拥有最新时间戳的测试数据集(与第二个实验中的数据集相同)。无论如何从数据集中的其余部分中选择数据进行训练以改进 培训。

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

【问题讨论】:

  • 你的数据有多随机?
  • 我的数据就像一个公司的股票信息数据。
  • 我是这么认为的,我在外汇方面也遇到了同样的问题。 CV 并没有为我解决这个问题
  • 这里也一样,CV 不起作用。我仍在努力。你有什么想法吗?

标签: machine-learning random-forest


【解决方案1】:

首先,尚不清楚您的测试方式。其次,无论哪种方式,你做错了测试

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

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

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

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

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

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

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

2。使用cross validation

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

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

我个人更喜欢交叉验证。

我猜会发生什么,通过基于时间戳进行排序,您的算法泛化能力较差。也许您保留用于测试的 20% 以某种方式存在显着差异,而您的算法没有机会捕捉到这种差异?通常,您的数据应随机排序以避免此类问题。

当然,你也可能有一个错误的实现。

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

【讨论】:

    猜你喜欢
    • 2018-03-19
    • 2013-10-10
    • 2019-02-13
    • 2019-02-15
    • 2016-04-13
    • 2013-02-13
    • 2020-11-25
    • 2017-11-21
    • 2016-08-10
    相关资源
    最近更新 更多