我有一家超市的 10,000 个客户数据。我想将数据分成训练集和测试集。那么,哪个火车测试分割给了我更好的准确性:50:50 还是 60:40?
哪个火车测试分割表现更好:50:50 还是 60:40?
听起来你有很多数据,所以可能一个简单的训练测试拆分就足够了。无需交叉验证。
我只会使用75-25之类的东西。这实际上是sklearn 中的默认值。
只有当你的算法太慢并且无法处理额外的数据时,我才会在训练中使用更少的数据。在这种情况下,与其丢弃数据,不如将其用于验证或测试超参数。
综上所述,比所有更重要的是如何拆分数据。您应该确保测试数据中的客户不在训练数据中,以确保您的算法是泛化的,而不仅仅是记住客户。这是医学数据挖掘的标准程序,非常重要。确保您没有客户重叠。
您可能还想确保要预测的变量的分布在训练数据和测试数据中是相似的。
在 Andrew Ng 目前正在编写的一份草稿中,他讨论了训练测试数据集中的数据量。我从书中的理解,传统和最常见的值是 70-30 或 75-25。如果您有 10k 或 30k 个样本,则可以使用 70-30 拆分。但是在处理大数据的时候,比如你有100万个样本,不建议有30k个样本作为测试数据,这样的话,90-10其实是可以的。因为 10k 测试样本几乎可以提供关于模型的直觉。
简而言之:对于较少的样本,使用推荐的 70-30 拆分,对于更高的样本,使用样本数量
草稿副本链接:ML 向往
我将假设这里的数据集被分成训练集和验证集。
当您将数据集拆分为训练集和验证集时,您需要注意不要丢弃太多数据进行验证,因为通常可以看到,训练数据越多,我们在大多数情况下都会得到更好的结果. 所以 50:50 太糟糕了,60:40 很好但不是那么好。您可以将其设置为 80:20 或 75:25 以获得更好的结果。
任何在训练集中有更多数据的训练-测试分割很可能会给你在该测试集上计算的更好的准确性。因此,您的问题的直接答案是 60:40。99:1 甚至会提供更好的准确度...
但是,归根结底,您对测试集的准确性并不感兴趣。您对由您的测试集估计的“真实”准确性感兴趣。而且您最好确保测试集可以很好地预测该准确性。
那么,你应该选择哪个拆分?
- 确保测试集中有“足够”的数据。“足够”的含义取决于您的数据集(类数、特征数)
- 如果您希望对实际错误有一个良好的估计,请扩大测试集
- 如果您怀疑自己能否获得更多的训练数据,并且您认为训练集中的更多数据会大大改善您的模型(实际上,而不是在测试集上),那么请为训练集“牺牲”一点。
无论您做什么,请确保在开始实验之前定义您的训练集。