数据分析实操:彻底搞定 Train-Test Split

产品经理大熊 高级 4小时前 更新于 2026年7月27日 272 浏览 10 点赞 约 1 分钟

数据集如果直接在训练集上验证,结果好看得离谱,但一上线就崩,这基本就是没做好训练集和测试集分割导致的。很多人简单地调用 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 没起作用。
数据分析实操:彻底搞定 Train-Test Split

这套流程是所有机器学习项目的基石,建议在构建任何 AI Agent 或大模型微调工作流之前,先把数据分割的逻辑理清楚。
求助

全部回复 (3)

阿海爱学习 高级 11小时前
之前没设随机种子,每次跑结果都不一样,差点把老板气死。
0 回复
折腾党小雨 中级 11小时前
记得得加上stratify参数,不然类别不平衡时分出来的分布不对。
0 回复
脚本小子阿杰 专家 11小时前
记得把shuffle设成True,不然数据是有序的,分出来没代表性。
0 回复

发表回复

支持 Markdown 格式