将数据划分为训练集和验证集的最佳经验法则是什么?均匀的50/50分割是否可取?还是拥有更多训练数据相对于验证数据(或反之)有明显的优势?还是说这种选择基本上取决于具体应用?
我一直使用80%的训练数据和20%的验证数据,但这种划分并没有什么原则性的理由。能否请有更多机器学习经验的人给我一些建议?
回答:
存在两种相互竞争的考虑:训练数据较少时,你的参数估计会有更大的方差。测试数据较少时,你的性能统计数据也会有更大的方差。总的来说,你应该关注于划分数据,使得两种方差都不会过高,这更多地与每个类别中的绝对实例数量有关,而不是百分比。
如果你总共有100个实例,你可能不得不使用交叉验证,因为没有单一的分割能给你满意的估计方差。如果你有10万个实例,无论你选择80:20的分割还是90:10的分割都没有太大关系(如果你使用的方法计算量特别大,你甚至可能选择使用更少的训练数据)。
假设你有足够的数据来进行适当的保留测试数据(而不是交叉验证),以下是一种有指导意义的方法来处理方差问题:
- 将数据划分为训练和测试数据(80/20确实是一个好的起点)
- 将训练数据进一步划分为训练和验证数据(同样,80/20是一个合理的分割)。
- 从训练数据中随机抽样,训练分类器,并记录在验证集上的表现
- 尝试一系列使用不同数量训练数据的运行:例如,随机抽样20%的训练数据,重复10次,并观察在验证数据上的表现,然后对40%、60%、80%的训练数据做同样的事情。你应该会看到随着数据量的增加,性能会提高,同时在不同随机样本间的方差也会降低
- 为了了解由于测试数据规模导致的方差,进行相反的程序。使用所有训练数据进行训练,然后多次随机抽样一定百分比的验证数据,并观察性能。你现在应该发现,在小样本验证数据上的平均性能与在所有验证数据上的性能大致相同,但测试样本数量较少时,方差会更高