【问题标题】:Splitting training and test data拆分训练和测试数据
【发布时间】:2015-08-02 11:51:11
【问题描述】:

有人可以推荐在机器学习中划分训练数据和测试数据的最佳百分比是多少。如果我将训练和测试数据分成 30-70% 有什么缺点?

【问题讨论】:

    标签: machine-learning classification


    【解决方案1】:

    不幸的是,没有一种“正确的方法”可以拆分您的数据,人们使用不同的值,这些值是根据不同的启发式方法、直觉和个人经验/偏好选择的。一个好的起点是Pareto principle (80-20)。

    有时无法选择使用简单拆分,因为您可能只是拥有太多数据 - 在这种情况下,如果您的算法计算复杂,您可能需要对数据进行抽样或使用较小的测试集。一个重要的部分是随机选择您的数据。权衡非常简单:测试数据更少 = 你的算法的性能会有更大的差异。 更少的训练数据 = 参数估计会有更大的方差。

    对我个人而言,比拆分大小更重要的是,您显然不应该总是在同一个测试拆分上只执行一次测试,因为这可能会产生偏差(您的拆分可能是幸运的或不幸的)。这就是为什么您应该对多个配置进行测试(例如,您每次运行测试 X 次,选择不同的 20% 进行测试)。在这里,您可能会遇到所谓的模型方差问题 - 不同的拆分将导致不同的值。这就是为什么您应该多次运行测试并将结果取平均值的原因。

    使用上述方法,您可能会发现测试所有可能的拆分很麻烦。一种完善的数据拆分方法是所谓的cross validation,正如您在 wiki 文章中看到的那样,它有多种类型(详尽的和非详尽的)。请特别注意k-fold 交叉验证

    【讨论】:

    • 请注意,交叉验证通常用于确定超参数。在这种情况下,您的折叠将仅包含训练数据。您的测试数据必须保持不变,直到您可以使用它来确定程序的有效性。
    【解决方案2】:

    阅读交叉验证的各种策略。

    10%-90% 的拆分很受欢迎,因为它来自 10 倍交叉验证。 但您也可以进行 3 倍或 4 倍交叉验证。 (33-67 或 25-75)

    更大的错误来自:

    • 在测试和训练中都有重复
    • 数据不平衡

    确保首先合并所有重复项,如果您有不平衡的数据,请进行分层拆分。

    【讨论】: