为了构建可靠的机器学习模型,数据集的拆分是必不可少的。拆分过程包括将数据集分为训练集、验证集和测试集。本文旨在详细介绍这三个集合的概念、数据拆分的技术以及容易出现的陷阱。
训练集
训练集是用于训练和使模型学习数据中隐藏的特征/模式的数据集。
在每个epoch中,相同的训练数据被重复输入神经网络架构,模型继续学习数据的特征。
训练集应该具有多样化的输入集,以便模型在所有场景下都得到训练,并且可以预测未来可能出现的数据样本。
验证集
验证集是一组数据,与训练集分开,用于在训练期间验证模型性能。
此验证过程提供的信息可帮助调整模型的超参数和配置。该模型在训练集上进行训练,同时,在每个epoch之后对验证集进行模型评估。
将数据集拆分为验证集的主要目的是防止模型过度拟合,即该模型非常擅长对训练集中的样本进行分类,但不能对没有见过的数据进行泛化和准确分类。
测试集
测试集是一组单独的数据,用于在完成训练后测试模型。它在准确度、精确度等方面提供了一个无偏的最终模型性能指标。简单来说,测试集可反映出模型的性能。
在数据集中创建不同的样本和拆分有助于判断真实模型的性能。数据集拆分率取决于数据集中存在的样本数量和模型。
数据集拆分常见推论
如果有多个超参数需要调整,机器学习模型需要更大的验证集来优化模型性能。同样,如果模型的超参数较少或没有超参数,则可以很容易地使用一小组数据来验证模型。
如果模型用例导致错误预测会严重影响模型性能,则最好在每个时期后验证模型以使模型学习不同的场景。
随着数据维度/特征的增加,神经网络函数的超参数也随之增加,使得模型更加复杂。在这些情况下,应将大量数据与验证集一起保存在训练集中。
1.随机抽样
随机抽样是最古老和最流行的划分数据集的方法。顾名思义,数据集被打乱,样本被随机挑选并根据用户给出的百分比放入训练、验证或测试集中。
然而,这种方法有一个明显的缺点。随机抽样在类平衡数据集上效果最佳,即每个数据集类别中样本数量大致相同的数据集。在类不平衡数据集的情况下,这种数据拆分方法可能会产生偏差。
2.分层抽样
分层抽样缓解具有不平衡类分布的数据集中的随机抽样问题。可以保留每个训练集、验证集和测试集中的类分布。分层抽样是一种更公平的数据拆分方式。
3.交叉验证
交叉验证或K-Fold交叉验证是一种更强大的数据拆分技术,其中对不同样本训练和评估模型“K”次。
使用K-Fold交叉验证将机器学习模型暴露给不同的数据分布。一定程度上减轻了在训练和验证集中选择数据时可能出现的偏差。在使用K-Fold交叉验证方案时,通常会报告平均值和标准偏差值。
因此K-Fold交叉验证也存在与随机抽样相同的问题,数据分布可能会出现偏差。可以使用分层,在生成数据的“K”个子集或部分时,保持数据的类比。
1.使用低质量的训练数据
由于机器学习算法对训练数据很敏感,即使训练集中的微小变化/错误也会导致模型性能出现重大错误。因此训练数据的质量对于提高模型性能至关重要。
2.过拟合
当机器学习模型无法对未知的数据进行分类时,就会发生过度拟合。训练数据中的噪声或波动被视为特征并由模型学习。这导致模型在训练集中表现出色,但在验证和测试集中表现不佳。
3.过分强调验证和测试集指标
验证集度量是决定模型训练路径的度量。在每个时期之后,机器学习模型都会在验证集上进行评估。根据验证集指标,计算相应的损失项,修改超参数。应选择指标,以便它们对模型性能的整体轨迹产生积极影响。
以上是数据拆分的技术和陷阱——训练集、验证集与测试集的使用方式的详细内容。更多信息请关注PHP中文网其他相关文章!