拆分训练和测试数据
Splitting training and test data
有人可以推荐机器学习中训练数据和测试数据的最佳划分比例是多少。如果我按 30-70 百分比 拆分训练和测试数据有什么缺点?
不幸的是,没有人 "right way" 拆分您的数据,人们使用不同的值,这些值是根据不同的启发式、直觉和个人 experience/preference 选择的。一个好的起点是 Pareto principle (80-20)。
有时使用简单拆分不是一种选择,因为您可能只是拥有太多数据 - 在这种情况下,如果您的算法计算复杂,您可能需要对数据进行采样或使用较小的测试集。一个重要的部分是 随机选择 您的数据。权衡非常简单:更少的测试数据 = 你的算法的性能会有更大的差异。 更少的训练数据 = 参数估计会有更大的方差。
对我个人而言,比拆分的大小更重要的是,您显然不应该总是在同一个测试拆分上只执行一次测试,因为它可能有偏见(您的拆分可能是幸运的,也可能是不幸的) .这就是为什么你应该对几种配置进行测试(例如,你 运行 你的测试 X 次,每次选择不同的 20% 进行测试)。在这里,您可能会遇到所谓的模型方差问题 - 不同的拆分将导致不同的值。这就是为什么您应该 运行 多次测试并计算结果的平均值。
使用上述方法,您可能会发现测试所有可能的拆分很麻烦。一种成熟的数据拆分方法是所谓的 cross validation,正如您在 wiki 文章中所读到的那样,它有多种类型(详尽的和非详尽的)。特别注意 k 折交叉验证.
阅读交叉验证的各种策略。
10%-90% 的拆分很受欢迎,因为它来自 10 倍交叉验证。
但是您也可以进行 3 倍或 4 倍交叉验证。 (33-67 或 25-75)
更大的错误来自:
- 在测试和训练中都有重复
- 数据不平衡
确保首先合并所有重复项,如果数据不平衡则进行分层拆分。
有人可以推荐机器学习中训练数据和测试数据的最佳划分比例是多少。如果我按 30-70 百分比 拆分训练和测试数据有什么缺点?
不幸的是,没有人 "right way" 拆分您的数据,人们使用不同的值,这些值是根据不同的启发式、直觉和个人 experience/preference 选择的。一个好的起点是 Pareto principle (80-20)。
有时使用简单拆分不是一种选择,因为您可能只是拥有太多数据 - 在这种情况下,如果您的算法计算复杂,您可能需要对数据进行采样或使用较小的测试集。一个重要的部分是 随机选择 您的数据。权衡非常简单:更少的测试数据 = 你的算法的性能会有更大的差异。 更少的训练数据 = 参数估计会有更大的方差。
对我个人而言,比拆分的大小更重要的是,您显然不应该总是在同一个测试拆分上只执行一次测试,因为它可能有偏见(您的拆分可能是幸运的,也可能是不幸的) .这就是为什么你应该对几种配置进行测试(例如,你 运行 你的测试 X 次,每次选择不同的 20% 进行测试)。在这里,您可能会遇到所谓的模型方差问题 - 不同的拆分将导致不同的值。这就是为什么您应该 运行 多次测试并计算结果的平均值。
使用上述方法,您可能会发现测试所有可能的拆分很麻烦。一种成熟的数据拆分方法是所谓的 cross validation,正如您在 wiki 文章中所读到的那样,它有多种类型(详尽的和非详尽的)。特别注意 k 折交叉验证.
阅读交叉验证的各种策略。
10%-90% 的拆分很受欢迎,因为它来自 10 倍交叉验证。 但是您也可以进行 3 倍或 4 倍交叉验证。 (33-67 或 25-75)
更大的错误来自:
- 在测试和训练中都有重复
- 数据不平衡
确保首先合并所有重复项,如果数据不平衡则进行分层拆分。