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

sklearn train_test_split拆分比例异常、总数据量丢失问题求助

问题原因分析
  • 直接触发因素:你在调用train_test_split时指定了stratify=data.recommendation参数,sklearn的分层拆分逻辑会自动剔除stratify指定列中存在空值/NaN的行,这部分行不会进入拆分池。你当前数据集的recommendation列存在大量缺失值,直接导致拆分后总样本量远小于原始数据集,同时分层逻辑基于剩余少量样本计算,也会出现比例不符合预期的问题。
  • 你与朋友运行结果不一致的原因:你本地读取的数据集和朋友使用的数据集实际存在差异。通常是本地原始数据文件损坏、数据读取参数(分隔符、编码、行过滤规则等)和朋友不一致,或是你在调用拆分函数前对data做了未留意的修改,导致recommendation列产生大量空值,和朋友的数据集并不完全相同。
验证方法
  1. 执行以下代码查看recommendation列的缺失值总数:
print(data['recommendation'].isna().sum())

该数值基本等于原始样本量345438减去拆分后训练集+测试集的总样本量差值。
2. 对比你和朋友的数据集基础统计结果,确认两者读取后的数据集是否一致:

print(data.info())
print(data['recommendation'].value_counts(dropna=False))
解决方案
  • 先排查数据读取流程,确认你使用的原始数据文件、读取参数和朋友完全一致,保证本地加载的data和朋友的数据集无差异。
  • 如果你业务上允许丢弃recommendation为空的行,建议拆分前主动完成空值过滤,避免框架隐性过滤导致的逻辑不可控:
# 主动过滤目标列空值
data_clean = data[data['recommendation'].notna()].reset_index(drop=True)
# 再执行拆分
X_train,X_test,y_train,y_test = train_test_split(data_clean[['review','clean_nltk','clean_spacy','clean_sklearn']],data_clean.recommendation,test_size=0.3, stratify=data_clean.recommendation,random_state=100)
  • 如果你需要保留所有样本,去掉stratify参数即可,非分层拆分不会自动过滤空值行。

内容的提问来源于stack exchange,提问作者M. Albert

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 03:42:02