灵光一闪,突然明白K折验证。

时间:2022-07-25
本文章向大家介绍灵光一闪,突然明白K折验证。,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

在机器学习和深度学习中,过拟合是一个很可怕的东西。为了验证模型的精度和有效性,避免过拟合就很重要很重要。通常的做法是对数据随机打乱,一部分用于训练和测试,一部分留做验证。

num_validation_samples = 10000
np.random.shuffle(data)
validation_data = data[:num_validation_samples]
data = data[num_validation_samples:]
training_data = data[:]
model = get_model()
model.train(training_data)
validation_score = model.evaluate(validation_data)
# 现在你可以调节模型、重新训练、评估,然后再次调节……
model = get_model()
model.train(np.concatenate([training_data,
validation_data]))
test_score = model.evaluate(test_data)

但是,万一你的数据很少呢?就容易出现验证的结果缺乏统计学依据,也就是大家会觉得你的结果不可信。好比一个人吃了一样东西,拉肚子了,但不能就说这东西有问题,也可能是昨天晚上你着凉了,或者你过敏了;但是如果1000个人吃这个东西都拉肚子了,基本可以确认这东西有问题。这就是统计学的依据。

所以,K折验证就出现了:

简单用图就是这么个意思。相当于数据量很少,但是你把数据分成3份,其中验证数据就在这3份中轮流坐庄。

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)

我是彻底理解了。