机器学习数据集划分训练集和验证集的经验法则

机器学习数据集划分训练集和验证集的经验法则

技术背景

在机器学习中,将数据集划分为训练集和验证集是一个关键步骤。训练集用于训练模型的参数,而验证集则用于评估模型的性能,帮助我们选择合适的模型和调整超参数。然而,如何合理地划分数据集并没有一个固定的标准,这需要综合考虑多种因素。

实现步骤

1. 基本考虑因素

划分数据集时存在两个相互竞争的因素:训练数据较少会使参数估计的方差增大;验证数据较少会使性能统计的方差增大。一般来说,应确保两者的方差都不过高,这更多地与每个类别中的实例绝对数量有关,而非比例。

2. 数据量较少的情况

如果数据总量较少(如100个实例),可能需要采用交叉验证的方法,因为单一的划分方式难以使估计的方差达到满意的程度。

3. 数据量充足的情况

若有足够的数据进行独立的验证集划分(而非交叉验证),可以采用以下方法来处理方差问题:

  • 初步划分:将数据按80/20的比例划分为训练集和测试集,这是一个不错的起点。
  • 再次划分:将训练集再按80/20的比例划分为训练集和验证集。
  • 训练数据子采样:从训练数据中随机抽取子样本,用这些子样本训练分类器,并记录在验证集上的性能。
  • 不同训练数据量测试:尝试不同数量的训练数据,例如分别随机抽取20%、40%、60%、80%的训练数据进行多次训练,观察在验证集上的性能。通常会发现,数据量越多,性能越好,且不同随机样本之间的方差越低。
  • 验证数据子采样:为了了解验证数据大小对方差的影响,可以反过来进行操作。用所有训练数据训练模型,然后多次随机抽取一定比例的验证数据,观察性能。会发现小样本验证数据的平均性能与所有验证数据的性能大致相同,但样本数量越少,方差越大。

4. 考虑其他方法和比例

  • 帕累托原则:80/20的比例较为常见,通常是一个安全的选择。但根据所采用的训练/验证方法,比例可能会有所变化,例如10折交叉验证中,每一折的验证集比例为10%。
  • 研究得出的公式:有研究表明,验证集与训练集的大小比例 $v/t$ 与 $\ln(N/h - max)$ 成比例,其中 $N$ 是识别器族的数量,$h - max$ 是这些族的最大复杂度。也有规则指出,验证集的比例应与自由可调参数数量的平方根成反比。
  • Andrew Ng的建议:训练集占60%,交叉验证集占20%,测试集占20%。但在大数据时代,如拥有一百万个示例,验证集和测试集的比例可以更小,如99.5:0.25:0.25。
  • 特殊比例:63.2% / 36.8% 也是一种合理的选择,其原理与统计自助法中的随机有放回抽样有关。

核心代码

在Python中,使用Scikit - learn库可以方便地进行数据集划分,以下是一个简单的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from sklearn.model_selection import train_test_split
import numpy as np

# 假设X是特征矩阵,y是标签向量
X = np.random.rand(100, 5)
y = np.random.randint(0, 2, 100)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 再将训练集划分为训练集和验证集
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)

print(f"训练集大小: {len(X_train)}")
print(f"验证集大小: {len(X_val)}")
print(f"测试集大小: {len(X_test)}")

最佳实践

  • 数据量充足时:可以按照上述步骤进行多次试验,找到适合特定问题的数据集划分比例。
  • 数据量较小时:优先考虑交叉验证方法,以充分利用有限的数据。
  • 考虑数据分布:确保训练集、验证集和测试集的数据分布相似,避免因数据分布差异导致模型性能评估不准确。

常见问题

1. 固定比例划分是否总是适用?

不是。不同的问题和数据量可能需要不同的划分比例,应根据实际情况进行调整。

2. 验证集和测试集的作用有何不同?

验证集主要用于在模型训练过程中选择合适的模型和调整超参数;测试集则用于在模型最终确定后,评估模型在未见过数据上的真实性能。

3. 如何判断划分的比例是否合适?

可以通过观察模型在验证集和测试集上的性能指标(如准确率、召回率等)以及性能的稳定性来判断。如果性能波动较大,可能需要调整划分比例。


机器学习数据集划分训练集和验证集的经验法则
https://119291.xyz/posts/2025-04-22.machine-learning-dataset-split-rule-of-thumb/
作者
ww
发布于
2025年4月22日
许可协议