你会期待什么样的行为?这种差异仅仅是因为样本数量不能均匀分布在您提供的折叠数量上。您的数据集中有 47 个样本,并且希望将其拆分为 6 折以进行交叉验证。47/6=756,这意味着每个折叠中的测试数据集将包含756样本,这是不可能的,因为只能包含完整的样本。结果,您将看到 6 次中有 5 次测试集将包含 8 个样本,而 6 次中的 1 次测试集将包含单个样本,以达到平均756测试集中的样本:56∗8+16∗7=756. 如果您将数据集中的样本数增加到可被 6 整除的数字(例如 48),您将看到测试集中的样本数将保持不变,因为将 48 除以 6 将得到一个整数而不是十进制数。
from sklearn.model_selection import KFold
import numpy as np
data = np.arange(0,48, 1)
kfold = KFold(6)
for train, test in kfold.split(data):
print("train size:",len(train), "test size:",len(test))
# train size: 40 test size: 8
# train size: 40 test size: 8
# train size: 40 test size: 8
# train size: 40 test size: 8
# train size: 40 test size: 8
# train size: 40 test size: 8