【问题标题】:How to choose the right amount of training dataset for forecasting?如何选择合适数量的训练数据集进行预测?
【发布时间】:2016-07-13 17:44:47
【问题描述】:

我有一个数据集,其中包含大约 4 年的每周季节性历史数据。我开始将过去 1 年作为训练数据集,并预测了大约 30 个数据点。但是在某些情况下将训练数据集减少到 6 个月会给我更好的预测值。

在线阅读,k 折交叉验证似乎是一种识别正确训练数据集量的技术。

我说的对吗?

一般来说,谁能推荐一些有效的方法来选择合适数量的训练数据集?

感谢您的帮助!

【问题讨论】:

    标签: machine-learning forecasting training-data


    【解决方案1】:

    很难先验地确定合适的训练集大小,尤其是(像我们一样)对数据结构一无所知。

    假设您正在努力为一组观察结果(“训练样本”)导出一个线性分类器,其特征是 N 维 KOTELNIKOFF 超空间中消息向量的 N 个分量,训练集的“合适大小”是一种能够使后续样本正确分类但不会开始导致分类错误的方法。

    换句话说,如果新添加到单调数据库的数据不能正确分类,那么问题就变成了线性不可分的。通过在该点之前停止来欺骗您的客户,以便在您到达线性不可分不再可以跳舞的点之前,系统可以在一段时间内看起来令人印象深刻。

    哪种舞蹈?为什么,当然是 Voronoi 舞蹈(一个非常糟糕的数字通信理论笑话)

    【讨论】:

    • 感谢您的意见!
    【解决方案2】:

    我目前正在学习和应用机器学习,我从研究中发现,如果您将数据分成训练集和测试集,并且如果您的训练集小于测试集,那么您的模型会有不好的预测性能。另一方面,如果你在测试集中放置了太少的数据点并加强了你的训练集,那么你的泛化误差就会很差。没有完美的方法来分割你的训练集和测试集,但一般的经验法则是训练误差太大,无法很好地近似泛化误差,你希望将其余数据留在测试集中。这可以用 60% 训练和 40% 测试或 70% 训练和 30% 测试或 90% 训练数据和 10% 测试数据的拆分来表示。如果您有一个非常大的数据集,这就足够了。

    现在,如果您有少量数据并且您没有能力避免我前面提到的两种情况,那么 k 折交叉验证可能是您问题的答案,但首先让我解释另一种方法拆分您的数据。早些时候,我向您展示了一种将数据拆分为训练集和测试集的方法。但我想向您介绍一种叫做验证集的东西。

    回归(以及机器学习中的所有其他主题)中最重要的两个任务是选择特定的模型复杂度,因此如果您使用多项式回归,您会担心什么您的工作,最后,对于您选择的模型,您需要评估其性能。现在,对于第一个任务,选择一个特定的模型,让 λ 代表一个调整参数,控制我们模型的复杂性。例如,如果我要使用多项式回归,λ 将指定我的多项式的次数。现在让我们想象一下我将数据集分成训练集和测试集的假设情况,并让我们执行我之前提到的两个任务。

    ------------------------------------------
    |    Training set            | Test set   |
    ------------------------------------------
    
    1. 模型选择:

      • 对于您考虑的每个模型复杂性:λ
      • i.估计你在训练集上的权重
      • 二。使用您的测试集评估性能
      • 三。选择测试误差最小的模型复杂度 λ
    2. 评估性能:当您找到最佳模型复杂度或一般模型(将其表示为 λ*)时,我们只需通过以下方式评估性能计算它的测试错误。

    这是只有一个训练集和一个测试集的问题。这种只使用训练集和测试集的方法过于乐观。当我们考虑选择特定的模型复杂度时,我们使用我们的测试集/数据来比较不同的 λ 值,我们选择了最小化测试误差的 λ。但这意味着我们正在使用测试错误来估计我们将如何处理新数据。问题是我们的测试数据并不能代表我们可能在世界上看到的一切(即我们的模型可能遇到的所有可能的数据)。我们的模型是专门选择在测试数据上表现良好的。更好的解决方案是拥有两个“测试集”:训练集、验证集和测试集

    ---------------------------------------------------------------
    |    Training set         | Validation set  | Test set   |
    ---------------------------------------------------------------
    

    现在的问题是我们如何选择模型并使用第二个测试集评估它的性能?我们可以这样做。

      1. 在我们的训练集/数据上拟合我们正在考虑的每个模型复杂度 (λ) 的模型。
      1. 我们将根据哪个模型最小化验证集上的误差来选择最佳模型/模型复杂度/λ。
      1. 最后,我们在测试集上评估最佳模型/模型复杂度/λ 的性能。现在测试集可以被认为是我们的泛化误差的近似值,因为它从未被使用过。

    现在您可能想知道,既然我有两个测试集,我该如何拆分这组数据?以下是最典型的拆分:

    • 80% 训练集,10% 验证集,10% 测试集
    • 50% 训练集,25% 验证集,25% 测试集

    如果您有足够的数据量,建议使用这些拆分。现在,如果您没有足够的数据将数据分成这 3 组。使用我们所有数据来评估模型性能的一种方法是使用 K-Fold 交叉验证,如果您的数据集较小,我建议您使用此方法。在撰写这篇文章时,我还没有使用过你所描述的那么大的数据集,但是尝试一下 K-Fold Validation 并将其与其他方法进行比较以查看最适合你的模型的方法并没有什么坏处.

    我希望这会有所帮助。

    【讨论】:

    • 感谢 Guled 的精心回复!我会尝试您提供的建议。
    猜你喜欢
    • 2014-05-31
    • 2021-03-20
    • 1970-01-01
    • 2022-01-08
    • 2014-08-02
    • 2018-11-07
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多