You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

文本分类中train_test_split置于SMOTETomek前后的模型得分差异问题

核心问题:严重的数据泄露

你的分步实现逻辑存在根本性错误,得到的90%得分是完全失真的虚高结果,Pipeline方案得到的65%才是模型真实泛化能力的体现,两种方案的本质差异有两个:

1. 预处理、采样的执行时机错误

  • Pipeline实现逻辑完全合规:先拆分训练集和测试集,所有特征转换(CountVectorizer、TfidfTransformer)、采样操作(SMOTETomek)都仅在训练集上拟合,测试集全程不参与任何拟合过程,评估结果可信。
  • 分步实现存在严重数据泄露:你先对全量原始数据做了词袋向量化、TF-IDF转换、SMOTETomek采样,之后才拆分训练集和测试集。这导致测试集的词频分布、类别分布信息提前泄露到了预处理和采样阶段,模型相当于提前“接触”了测试集的相关特征,评估结果必然虚高。

2. 测试集样本性质错误

分步实现中你拆分的是SMOTETomek采样后的数据集,这意味着你的测试集中包含了大量人工合成的样本,这类样本是基于全量数据的特征分布生成的,和训练集样本的特征重合度极高,模型在这类样本上的得分完全无法反映在真实未知数据上的表现。

修正方案

如果要让分步实现的结果和Pipeline对齐,调整逻辑如下:

  1. 先对原始特征、标签做train_test_split拆分训练集和测试集
  2. 仅用训练集拟合CountVectorizer、TfidfTransformer,再用拟合好的转换器分别转换训练集和测试集
  3. 仅对转换后的训练集做SMOTETomek采样,用采样后的训练集训练模型
  4. 直接用原始的、未经过采样的测试集做评估
    调整后得到的得分会和Pipeline方案的结果一致。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 09:45:04