我有“练习”数据集,我可以将其拆分为训练、验证和测试集,我将使用数据来制作机器学习模型。但在实际情况下,我会得到一个非常小的数据集,我将把它分成训练集和验证集。没有足够的观察结果来制作单独的测试集。那么如何估计模型在真实数据上的“公平”表现呢?
我唯一的想法是找到验证集的性能和实践数据的测试集(回归线等)之间的关系,然后将公式应用于真实数据的验证集的性能,以在真实数据的测试集(实际上并不存在。)
还有其他好主意吗?
我有“练习”数据集,我可以将其拆分为训练、验证和测试集,我将使用数据来制作机器学习模型。但在实际情况下,我会得到一个非常小的数据集,我将把它分成训练集和验证集。没有足够的观察结果来制作单独的测试集。那么如何估计模型在真实数据上的“公平”表现呢?
我唯一的想法是找到验证集的性能和实践数据的测试集(回归线等)之间的关系,然后将公式应用于真实数据的验证集的性能,以在真实数据的测试集(实际上并不存在。)
还有其他好主意吗?
如果您只使用足够的数据进行训练和验证,请考虑使用K-Fold Cross Validation:
使用交叉验证而不是使用传统验证(例如,将数据集划分为两组,70% 用于训练,30% 用于测试)的主要原因之一是没有足够的可用数据将其划分为单独的训练和测试集,而不会失去重要的建模或测试能力。在这些情况下,正确估计模型预测性能的一种公平方法是使用交叉验证作为一种强大的通用技术。
假设您的“练习”数据与您的“真实”数据来自相同的分布,那么通过考虑测量第一组中的训练准确度和测试准确度之间的关系来模拟第二组中的关系,您就走在了正确的轨道上。
但是,您应该仅将练习数据拆分为训练和测试,并在训练集上使用 k 折交叉验证。然后,您应该使用相同的交叉验证方案在真实数据上训练模型。
例如,您可能会得到如下结果:
practice data:
training accuracy: 90%
test accuracy: 88%
real data:
training accuracy: 89%
由于我们的交叉验证方案抗过拟合,因此训练和测试的准确率接近于练习集,我们的实践训练准确率接近我们的测试训练准确率。现在我们可以有把握地假设真实数据的未见测试集的2%准确度比训练准确度差。
但是,假设您在练习数据上只有一个验证集或根本没有验证。现在您的模型更有可能过度拟合,您可能会看到如下结果:
practice data:
training accuracy: 95%
test accuracy: 75%
real data:
training accuracy: 85%
在这里,我们通过过度拟合创建了一个具有高方差的模型。练习数据上的训练和测试精度相差甚远,练习数据上的训练精度与真实数据上的训练精度不匹配。现在估计测试准确性并不容易,因为我们不能真正说我们是否在两个数据集上都过拟合了相同的量并且第二组更难,或者我们是否对第二组进行了过拟合更少。在第一种情况下,我们可能会预测65%测试准确性,在第二种情况下,我们可能会预测75%.