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

为什么GridSearchCV调参后LogisticRegression准确率低于默认值?

GridSearchCV返回效果更差结果的核心原因

1. 重构最优模型时丢失关键配置

你用GridSearchCV调参时,传入的LogisticRegression明确指定了solver='liblinear'和random_state=2,但拿到最优参数后重构模型时,只传入了最优C参数:

# 错误写法:丢失了solver和random_state配置
lr = LogisticRegression(**lr_best_params)

sklearn中LogisticRegression的默认solver是lbfgs,和你调参时用的liblinear完全是两种求解逻辑,小样本数据集下两者的拟合效果差异极大,这是导致效果骤降的最主要原因。

2. 不必要的二次训练引入误差

GridSearchCV的best_estimator_属性已经返回了用最优参数在全量训练集上拟合完成的模型,不需要手动重新初始化再fit一次,手动二次训练反而可能因为参数配置遗漏、随机数波动引入额外误差。

3. 小样本下交叉验证结果波动

心脏病预测数据集本身样本量仅300余条,5折交叉验证的每折验证集样本量很小,交叉验证的平均准确率波动大,选出的交叉验证最优参数,不一定适配单独留出的测试集分布,这种情况在小样本任务中非常常见。

4. 正则化强度的影响

LogisticRegression的C参数是正则化强度的倒数,C越小正则化越强,模型越简单。你设置的搜索范围包含了大量小于1的C值,如果GridSearchCV选出的最优C小于默认的1,更强的正则化会压低训练集准确率,出现你观测到的训练集准确率从87%降到85%的现象。

修正后的调参代码示例
from sklearn.model_selection import GridSearchCV

lr_params = [ {'C': np.logspace(-1, 0.3, 30)} ]
lr = LogisticRegression(solver = 'liblinear', random_state = 2)
# 调参时开启refit,会自动用最优参数在全量训练集拟合模型
lr_cv = GridSearchCV(lr, lr_params, cv = 5, scoring = 'accuracy', refit=True)
lr_cv.fit(X_train, y_train)

# 直接调用预训练的最优模型即可,不需要二次初始化和拟合
lr_best = lr_cv.best_estimator_
model_score(lr_best, X_train, y_train, X_test, y_test)

内容的提问来源于stack exchange,提问作者Ignacio Aristimuño

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 16:54:08