数据分析实操:彻底搞定 Train-Test Split
数据集如果直接在训练集上验证,结果好看得离谱,但一上线就崩,这基本就是没做好训练集和测试集分割导致的。很多人简单地调用
这套流程是所有机器学习项目的基石,建议在构建任何 AI Agent 或大模型微调工作流之前,先把数据分割的逻辑理清楚。
下一篇
用图神经网络(GNN)去算零售促销额 →
train_test_split,但其实这里面有两个关键细节如果处理不好,模型评估完全是误导。最容易踩坑的就是随机种子 random_state 和 分层抽样 stratify。如果不设种子,每次跑代码结果都不一样,根本没法复现实验;而对于类别不平衡的数据集,不加分层抽样会导致测试集里某些类别的样本量极少,评估指标完全失真。
一个标准的实操代码结构应该是这样的:
from sklearn.model_selection import train_test_split
import pandas as pd
# 假设 df 是加载好的数据集,target 是目标列
X = df.drop('target', axis=1)
y = df['target']
# 核心参数:test_size 决定验证集比例,stratify 确保类别比例一致
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2,
random_state=42,
stratify=y
)排查建议:
- 维度检查:分割后第一时间用
X_train.shape确认样本量是否符合预期。 - 分布校验:如果是分类任务,建议运行
y_train.value_counts(normalize=True)和y_test.value_counts(normalize=True),对比两者的比例是否基本一致。如果差异过大,说明stratify没起作用。
这套流程是所有机器学习项目的基石,建议在构建任何 AI Agent 或大模型微调工作流之前,先把数据分割的逻辑理清楚。
