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

关于Pipeline、SMOTE与GridSearchCV结合的代码及精度疑问

问题1:代码是否正确?

代码的整体框架(Pipeline结合GridSearchCV+SMOTE)是合理的,但存在参数组合冲突的问题,会导致部分网格搜索任务报错,具体问题如下:

  • solver与penalty的兼容性问题:
    • newton-cg仅支持l2或None类型的penalty,和l1、elasticnet搭配会直接报错
    • liblinear不支持elasticnet penalty,组合后会触发参数无效的错误
    • 只有saga支持所有penalty类型(l1/l2/elasticnet/None)
  • elasticnet的必填参数缺失:当penalty设为elasticnet时,必须指定l1_ratio参数(取值范围0到1),否则LogisticRegression会抛出参数缺失错误
  • 无效参数组合:当penalty设为None时,正则化参数C完全无效(无正则化逻辑),这部分组合属于无效搜索,会浪费计算资源

建议调整参数列表,移除不兼容组合,示例如下:

# 修正后的参数列表
solver_list_lr = ['liblinear', 'newton-cg', 'saga']
penalty_list_lr = ['l2', 'l1', 'elasticnet']  # 仅保留各solver兼容的类型
param_grid_lr = {
    'LR__C': [0.001, 0.01, 0.1, 1, 10, 100],
    'LR__solver': solver_list_lr,
    'LR__penalty': penalty_list_lr,
    'LR__max_iter': [100, 1000, 3000],
    'LR__random_state': [None, 20, 42],
    'LR__l1_ratio': [0.1, 0.5, 0.9]  # elasticnet必填参数
}

另外,Pipeline中SMOTE的位置是正确的:GridSearchCV在交叉验证时,会在每个训练折上单独执行过采样,再训练模型,避免了验证集的数据泄露,这部分逻辑没问题。

问题2:过采样后准确率降低是否正常?

这种情况完全正常,核心原因是不平衡数据集下准确率的局限性:

  • 未过采样时,模型会天然偏向占比84.5%的多数类,0.89的准确率只是模型正确分类了大部分多数类样本,对少数类的召回率极低(甚至接近0),本质是模型“偷懒”只预测多数类就能拿到高准确率
  • 过采样后,SMOTE生成了少数类的合成样本,迫使模型关注少数类特征,此时模型会牺牲部分多数类的正确分类来换取少数类的识别能力,整体准确率下降,但模型的泛化能力和实际业务价值反而提升(比如 fraud detection、疾病诊断等场景,少数类才是核心关注对象)

建议不要只依赖准确率,改用更适合不平衡数据集的评估指标:

  • 精确率、召回率、F1-score:直接关注少数类的分类表现
  • ROC-AUC:衡量模型区分正负样本的能力
  • 混淆矩阵:直观查看两类样本的分类错误分布

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:45:37