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

银行贷款数据集Logistic Regression问题:CV得分一致、准确率与分类报告不匹配

问题排查与修复方案

异常1:不同交叉验证折数输出结果完全一致

  • 核心原因1:你虽然提前做了StandardScaler标准化得到了s_scaled_X_train,但调用GridSearchCV.fit()时传入的是未标准化的原始X_train,且选出的最优参数C=0.001属于极强的L2正则化,模型权重被压缩到接近0,几乎退化为固定预测多数类的简单模型,对交叉验证折数的变化、数据小范围扰动完全不敏感。
  • 核心原因2:你设置的超参数列表存在大量无效组合,比如elasticnet惩罚仅支持saga求解器、l1惩罚仅支持liblinear和saga求解器,这些无效组合会被自动过滤,实际参与搜索的有效参数组合极少,进一步导致不同折数的搜索结果完全一致。

异常2:测试集准确率两次计算结果严重不符、mean_train_score返回空

  • 准确率不一致的核心原因:预处理逻辑前后不一致。GridSearchCV训练模型时用的是未标准化的原始训练集,但你后续调用分类报告时传入的是标准化后的测试集,给模型输入了分布完全不同的数据,预测结果自然完全错误,导致准确率从0.92掉到0.62。
  • mean_train_score返回None的原因:sklearn的GridSearchCV默认不计算训练集得分,需要在初始化时显式设置return_train_score=True才会返回该字段。
  • best_score_和分类报告准确率不匹配的原因:best_score_是交叉验证过程中,最优参数在原始未标准化的训练集拆分出的验证集上的平均准确率,和你用标准化测试集计算的结果输入分布完全不同,本身就不具备可比性。

修复代码建议

  1. 修正训练、评估的输入数据源,保持预处理逻辑一致
# 原来的fit逻辑
logmodel.fit(X_train, y_train)
print('The best score with CV =', x, 'is', logmodel.score(X_test, y_test), 'with parameters =\n\n', logmodel.best_params_, '\n\n')

# 替换为
logmodel.fit(s_scaled_X_train, y_train)
print('The best score with CV =', x, 'is', logmodel.score(s_scaled_X_test, y_test), 'with parameters =\n\n', logmodel.best_params_, '\n\n')
  1. 若需要获取训练集得分,修改GridSearchCV初始化逻辑:
logmodel = GridSearchCV(LogisticRegression(random_state = 42), parameters, cv = x, scoring = 'accuracy', refit = True, return_train_score=True)
  1. 可清理超参数列表中的无效组合,减少冗余计算:
    • 求解器为newton-cg、lbfgs、sag时,仅支持l2惩罚
    • 求解器为liblinear时,不支持elasticnet惩罚
    • 求解器为saga时,支持l1、l2、elasticnet三种惩罚

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:39:02