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

使用SelectKBest做特征选择时 训练测试集用相同代码会选出相同特征吗

问题结论
  • 你提供的代码无法得到一致的特征,必须进行修改。

问题原因

你分别对训练集、测试集执行了fit_transform操作,相当于用两个不同数据集独立训练了两个SelectKBest实例:

SelectKBest的fit阶段会基于输入数据和标签计算每个特征的卡方统计值,再筛选得分排名前k的特征。训练集和测试集的样本分布、特征与标签的相关性不可能完全一致,两次fit得到的特征排名规则必然不同,最终筛选出的25个特征大概率不一致。

这种写法还会导致数据泄露问题:你在特征选择阶段用到了测试集的标签信息,后续模型评估的结果会完全失真,无法反映模型的真实泛化能力。

修正后的代码

正确的逻辑是仅在训练集上训练特征选择器,再用同一个选择器处理训练集和测试集:

# 仅在训练集上fit特征选择器
selector = SelectKBest(chi2, k=25)
x_tr = selector.fit_transform(x_tr, y_tr)
# 直接用训练好的选择器转换测试集,不需要再次fit
x_ts = selector.transform(x_ts)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:36:05