K-Fold 交叉验证多少折?
K-Fold Cross-Validation How Many Folds?
使用 K 折交叉验证时,我通常会看到使用 5 折和 10 折。 A 1995 paper 推荐 10 fold cv。然而,该结论是基于使用当时模型的小型数据集得出的。
我只是想知道目前使用的 5 和 10 折是否仍然可以追溯到那篇论文的惯例?还是有其他充分的理由使用 5 或 10 折而不是 6、8、12 等?
这只是传统。这些只是人们喜欢的好数字,可以平分很多东西。这每次都能得到很好的数字,例如 10% 和 20%。如果您使用 8 个,则每个为 12.5%。不是很好的数字吗?
对于您的数据集,另一个数字可能效果更好,但不值得费心去弄明白。如果您尝试使用 7 折交叉验证进行发布,人们会用滑稽的眼光看您并变得可疑。坚持标准。
当模型的性能根据训练-测试拆分显示出显着差异时,K 折交叉验证很有用。
使用 5 或 10 既不是规范也没有规则。你可以使用尽可能多的折叠(K= 2, 3, 4,聪明的猜测)。
K 折交叉验证用于解决训练数据有限的问题。
我在一本书(下面分享了 Francois Chollet 的书中示例)中看到了一个示例,其中 K=4,所以这取决于您的要求。
enter code here
`k = 4
num_validation_samples = len(data) // k
np.random.shuffle(data)
validation_scores = []
for fold in range(k):
validation_data = data[num_validation_samples * fold:
num_validation_samples * (fold + 1)]
training_data = data[:num_validation_samples * fold] +
data[num_validation_samples * (fold + 1):
model = get_model()
model.train(training_data)
validation_score = model.evaluate(validation_data)
validation_scores.append(validation_score)
validation_score = np.average(validation_scores)
model = get_model()
model.train(data)
test_score = model.evaluate(test_data)`
Three-fold validation Pictorial Description
使用 K 折交叉验证时,我通常会看到使用 5 折和 10 折。 A 1995 paper 推荐 10 fold cv。然而,该结论是基于使用当时模型的小型数据集得出的。
我只是想知道目前使用的 5 和 10 折是否仍然可以追溯到那篇论文的惯例?还是有其他充分的理由使用 5 或 10 折而不是 6、8、12 等?
这只是传统。这些只是人们喜欢的好数字,可以平分很多东西。这每次都能得到很好的数字,例如 10% 和 20%。如果您使用 8 个,则每个为 12.5%。不是很好的数字吗?
对于您的数据集,另一个数字可能效果更好,但不值得费心去弄明白。如果您尝试使用 7 折交叉验证进行发布,人们会用滑稽的眼光看您并变得可疑。坚持标准。
当模型的性能根据训练-测试拆分显示出显着差异时,K 折交叉验证很有用。
使用 5 或 10 既不是规范也没有规则。你可以使用尽可能多的折叠(K= 2, 3, 4,聪明的猜测)。
K 折交叉验证用于解决训练数据有限的问题。
我在一本书(下面分享了 Francois Chollet 的书中示例)中看到了一个示例,其中 K=4,所以这取决于您的要求。
enter code here
`k = 4
num_validation_samples = len(data) // k
np.random.shuffle(data)
validation_scores = []
for fold in range(k):
validation_data = data[num_validation_samples * fold:
num_validation_samples * (fold + 1)]
training_data = data[:num_validation_samples * fold] +
data[num_validation_samples * (fold + 1):
model = get_model()
model.train(training_data)
validation_score = model.evaluate(validation_data)
validation_scores.append(validation_score)
validation_score = np.average(validation_scores)
model = get_model()
model.train(data)
test_score = model.evaluate(test_data)`
Three-fold validation Pictorial Description