机器学习中如何划分训练集和测试集

线上365bet体育 2025-11-12 03:58:08 admin

1. 引言

在机器学习建模过程中,一个常见的任务是将数据集划分为训练集(Training Set)和测试集(Test Set)。本文将探讨这一过程的重要性、划分方法以及如何根据数据集大小选择合适的划分比例。

如果你也曾经遇到过模型在训练数据上表现很好,但在新数据上却“翻车”的情况,那你一定明白为什么我们需要一个独立的测试集来评估模型性能。

2. 为什么要划分训练集和测试集?

简单来说:我们希望评估模型在未知数据上的表现,而不是它已经“见过”的数据。

举个例子:

就像老师提前把期末考试题发给学生练习,然后考试时再出这些题,这样根本无法判断学生是真的掌握了知识,还是只是记住了答案。

所以,我们需要将数据分成两部分:

训练集:用于训练模型,调整模型参数。

测试集:用于评估模型在未见过的数据上的泛化能力。

这种将数据一分为二的方法,称为 Holdout Method(保留法)。

数据划分示意图

✅ 优点:

简单高效,适合快速验证。

可以避免模型过拟合训练数据。

❌ 缺点:

划分方式不同,可能导致评估结果不稳定。

对小数据集不太友好,容易丢失关键信息。

⚠️ 注意:训练集和测试集应尽可能保持数据分布一致,否则评估结果将失去意义。

3. 如何划分训练集和测试集?

3.1 常见划分比例

你可能听过这些比例:

80:20 ✅(最常见)

70:30 ❗(适合小数据)

50:50 ❌(不推荐,除非数据非常大)

99:1 🔥(适用于百万级数据)

没有统一的最佳比例,要根据数据集大小、模型复杂度、任务类型来决定。

3.2 根据数据量选择划分比例

数据量

推荐比例

说明

n < 1,000

不建议用 Holdout,改用 Cross-Validation

每条数据都很珍贵,保留一部分用于测试可能影响模型性能

1,000 ≤ n < 10,000

70:30

平衡了训练与测试数据量

n ≥ 100,000

80:20 或 90:10

数据量大,可以留出更多测试数据

n ≥ 百万级

99:1

甚至更高,因为训练数据已经足够多

3.3 划分示意图

3.4 如何验证划分是否合理?

你可以尝试以下步骤:

先用 80:20 划分数据。

用 80% 的训练集训练模型。

用不同比例的测试集(如 100%、70%、50%)进行评估。

如果较小的测试集也能反映整体性能,说明划分合理。

否则,考虑增加测试集比例。

3.5 代码示例(Python)

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(

X, y, test_size=0.2, random_state=42, stratify=y

)

说明:

test_size=0.2 表示 20% 用于测试。

stratify=y 保证类别分布在训练集和测试集中保持一致(适用于分类任务)。

random_state=42 保证每次划分结果一致。

4. 小结

划分训练集和测试集是评估模型泛化能力的基本手段。

常用比例为 80:20,但需根据数据量灵活调整。

小数据建议使用交叉验证(Cross-Validation),大数据可以使用更高比例。

划分时注意保持分布一致,避免引入偏差。

最终目标是:测试集能代表整个数据集的多样性。

✅ 建议:多尝试几种划分方式,观察模型在不同测试集下的表现,有助于找到最佳评估策略。