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

连续型Y响应变量适配IterativeImputer与cross_val_score的问题

解决连续型Y下cross_val_score的适配问题

你的报错根源很明确:RepeatedStratifiedKFold是专门给分类任务设计的分层交叉验证器,而accuracy是分类任务的评分指标,但你的Y是连续型价格数据,属于回归任务,两者不兼容才会抛出这个错误。不需要把Y转成分类,只需要换成回归任务对应的交叉验证器和评分指标即可,具体方案如下:

1. 替换交叉验证器

把RepeatedStratifiedKFold换成回归任务适用的RepeatedKFold——它不需要基于类别分层,直接对连续型目标变量做重复K折拆分,完全适配你的场景。

2. 替换评分指标

把accuracy换成回归任务的常用指标,比如:

  • 'r2':R²得分,衡量模型解释方差的比例
  • 'neg_mean_squared_error':负均方误差(scikit-learn默认偏好得分越高越好,所以用负值表示)
  • 'neg_mean_absolute_error':负平均绝对误差

完整代码示例

假设你原来的错误代码是这样的:

from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from sklearn.linear_model import BayesianRidge
from sklearn.model_selection import cross_val_score, RepeatedStratifiedKFold

# 假设X是单特征的训练数据(含缺失值),y是连续型价格
imputer_reg = IterativeImputer(estimator=BayesianRidge(), random_state=42)
cv = RepeatedStratifiedKFold(n_splits=5, n_repeats=3, random_state=42)
scores = cross_val_score(imputer_reg, X, y, cv=cv, scoring='accuracy')

修改后的正确代码:

from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
from sklearn.linear_model import BayesianRidge
from sklearn.model_selection import cross_val_score, RepeatedKFold

# 初始化带BayesianRidge的迭代填充器
imputer_reg = IterativeImputer(estimator=BayesianRidge(), random_state=42)
# 替换为回归用的重复K折交叉验证
cv = RepeatedKFold(n_splits=5, n_repeats=3, random_state=42)
# 替换为回归评分指标,比如R²
scores = cross_val_score(imputer_reg, X, y, cv=cv, scoring='r2')

# 查看得分
print(f"交叉验证R²得分: {scores.mean():.4f} ± {scores.std():.4f}")

额外说明

因为你只处理单个特征,IterativeImputer会基于BayesianRidge这个回归模型,用特征自身的非缺失值拟合后填充缺失值,这个逻辑在回归场景下是完全成立的,不需要调整填充逻辑,只需要修正交叉验证和评分的部分即可。

内容的提问来源于stack exchange,提问作者Data Science Analytics Manager

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:27:10