我看到一些论文在样本数量不能被10整除的数据集上使用了10折交叉验证。
我没有找到任何他们解释如何选择每个子集的案例。
我的假设是他们在某种程度上使用了重抽样,但如果真是这样的话,一个样本可能会出现在两个子集中,从而使模型产生偏差。
作为示例的论文:http://www.biomedcentral.com/1471-2105/9/319
是否建议这样做:
- 对于86个样本,取8个样本作为保留集。
- 使用剩余的样本进行训练。
- 重复10次。
这样做的话,每个样本都会被用作训练集,但只有80/86的样本被用作保留集,并且不会出现样本同时出现在训练集和保留集中的偏差问题。
任何见解都将不胜感激。
回答:
你希望各折的大小相等,或者尽可能接近相等。
要做到这一点,如果你有86
个样本并想使用10折交叉验证,那么前86 % 10 = 6
折的大小将是86 / 10 + 1 = 9
,其余的折大小将是86 / 10 = 8
:
6 * 9 = 544 * 8 = 32 +--------------86
一般来说,如果你有n
个样本和n_folds
折,你希望像scikit-learn所做的那样:
前n % n_folds折的大小为n // n_folds + 1,其余折的大小为n // n_folds。
注意://
表示整数除法
我不知道有任何适当的科学参考文献支持这种做法,但这似乎是惯例。参见这个问题和这个问题,它们也提出了相同的建议。至少有两个主要的机器学习库是这么做的。