模型评估(训练集、验证集、测试集)

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,5000CU*H 3个月
模型训练 PAI-DLC,5000CU*H 3个月
简介: 模型评估(训练集、验证集、测试集)

机器学习的目标就是得到一个泛化能力好的模型,即模型不但在已给定的数据(训练数据)上性能表现良好,而且在没有见过的数据(测试数据)上也能达到同样的效果。通常在评估模型的时候,我们看到的只有训练集和测试集,但实际上,我们应将数据集划分为三个集合:训练集、验证集、测试集。


训练集自然是用来训练模型的,当一个模型训练好后,我们可以知道该模型在训练集上的表现,但是不知道在其他数据(全新数据)上是什么样的,于是就可以通过验证集来评估模型性能,然后再对模型做进一步的调节(调节本身就是学习的过程),也就是所谓的调参(超参数),寻找出最合适的模型配置。所以,验证集实际上就起到了一个反馈的作用,来告知我们这个模型调到什么样的程度其性能最优,但是,这里有个问题,如果,单纯的靠验证集的性能来调节模型配置,那么模型同样会在验证集上产生过拟合现象,所以,通常模型参数只调节一次,验证集仍然可以可靠的评估模型,但如果,反复的根据验证集的性能去修改模型,模型在验证集上的性能就会非常好,这并不是我们想要的,因为我们关心的是全新的数据在模型上的表现,于是就有了测试集。测试集不再像验证集那样把自己的数据透露给模型,验证集是为了调参才把自己的信息给模型达到一个反馈的效果,而测试集完全不用,它就是全新的数据,所以,测试集是对模型最终的评估。

通常情况下,我们见到的只有训练集和验证集,常常把验证集称为测试集。

有时候数据集很小,为了评估模型,有以下三种经典的方法:

1.简单的留出验证

留出一定比例的测试数据,在剩下的数据上训练模型,但是由于不能在测试集上调节模型,所以要留一个验证集,如图:

20200617123557795.jpg

所以,平常我们看到的测试集就是这留出的验证集。

实现代码:

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

该方法的缺点:如果数据很少,测试部分包括的样本就很少,那么评估的结果就会有偏差。

2.K折交叉验证

将数据划分,为大小相同的K个分区。对于每个分区i,在剩余K-1个分区上训练模型,然后在分区i上评估模型。最终分数等于等于K个分数的平均值。对于不同的训练集-测试集划分,如果模型性能变化很大,那么这种方法很有用。如图:

20200617123557795.jpg

实现代码:

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)#最终验证分数,k折验证分数的平均值
#在所有非测试数据上训练最终模型
model=get_model()
model.train(data)
test_score=model.evaluate(test_data

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

这种方法是多次使用K折验证,在每次将数据划分为K个分区之前都先将数据打乱。最终分数是每次K折验证分数的平均值。这种方法对于数据相对较少,又想尽可能精确的评估模型来说很有效,但是缺点在于,它的计算代价很高,因为一共要训练和评估PK个模型(P是重复次数)。

模型评估注意事项:

1.数据代表性:划分数据集时随机打乱数据。

2.时间箭头:如果想根据过去预测未来,不能随机打乱数据,要确保测试数据的时间晚于训练数据。

3.数据冗余:如果数据中有多次重复的数据点,不能随机打乱数据,要确保训练集和验证集没有交集。

相关文章
|
23天前
|
存储 监控 网络协议
服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
【10月更文挑战第11天】服务器压力测试是一种评估系统在极端条件下的表现和稳定性的技术
95 32
|
25天前
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
640 1
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
25天前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
215 2
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
10天前
|
编解码 人工智能 自然语言处理
迈向多语言医疗大模型:大规模预训练语料、开源模型与全面基准测试
【10月更文挑战第23天】Oryx 是一种新型多模态架构,能够灵活处理各种分辨率的图像和视频数据,无需标准化。其核心创新包括任意分辨率编码和动态压缩器模块,适用于从微小图标到长时间视频的多种应用场景。Oryx 在长上下文检索和空间感知数据方面表现出色,并且已开源,为多模态研究提供了强大工具。然而,选择合适的分辨率和压缩率仍需谨慎,以平衡处理效率和识别精度。论文地址:https://www.nature.com/articles/s41467-024-52417-z
30 2
|
24天前
|
机器学习/深度学习 监控 计算机视觉
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
本文介绍了如何使用YOLOv7进行目标检测,包括环境搭建、数据集准备、模型训练、验证、测试以及常见错误的解决方法。YOLOv7以其高效性能和准确率在目标检测领域受到关注,适用于自动驾驶、安防监控等场景。文中提供了源码和论文链接,以及详细的步骤说明,适合深度学习实践者参考。
193 0
目标检测实战(八): 使用YOLOv7完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
25天前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
69 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
25天前
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
143 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
25天前
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
42 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
25天前
|
机器学习/深度学习 XML 并行计算
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用YOLOX完成图像目标检测任务的完整流程,包括数据准备、模型训练、验证和测试。
126 0
目标检测实战(七): 使用YOLOX完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
25天前
|
机器学习/深度学习 算法 PyTorch
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-7.0版本进行目标检测的完整流程,包括算法介绍、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。YOLOv5以其高精度、快速度和模型小尺寸在计算机视觉领域受到广泛应用。
241 0
目标检测实战(五): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程)