深度学习

K折验证

2019-03-25  本文已影响0人  庵下桃花仙

K折验证(K-fold validation)将数据划分为K个分区。对每个分区 i,在剩余的 K-1 个分区上训练模型,在分区 i 上评估模型。最终分数是 K 个分数的平均值。


3 折验证.PNG

K 折交叉验证

k = 4
num_validation_samples = len(data) // k

np.random.shuffle(data)

validation_scores = []
for fold in rank(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) # 最终验证分数:K折验证分数的平均值

model = get_model() # 在所有非测试数据上训练模型
model.train(data)
test_score = model.evaluate(test_data)

带有打乱数据的重复 K 折验证

多次使用 K 折验证,在每次将数据划分为 K 个分区前,先将数据打乱。最终分数是多次 K 折验证分数的平均值。这种方法一共要训练和评估 P * K 个模型,P 是重复次数,计算代价很大。

评估模型注意事项

上一篇下一篇

猜你喜欢

热点阅读