逻辑回归使用GridSearchCV调参后准确率无变化是什么原因?
逻辑回归调参后准确率无变化的原因分析
核心原因
- 你设置的超参数搜索范围刚好覆盖了你初始化模型的参数值,且该参数在搜索范围内表现最优
max_iter和tol属于训练过程控制参数,只要模型在初始设置下已经收敛,调整这两个参数不会改变最终的模型拟合结果- 数据集本身特性导致正则化参数调整对性能影响极小,在你设置的搜索区间内没有出现更优的参数组合
具体拆解
1. 超参数搜索范围设置问题
你设置的C参数搜索范围为np.linspace(1,20)/10,对应区间是0.1~2,你初始设置的C=0.3326530612244898刚好在该区间内。且在你选择的搜索区间内,不同C值对应的正则化强度没有带来模型性能的明显提升,因此该初始值被判定为最优C值。
而tol是收敛阈值、max_iter是最大迭代次数,只要模型在max_iter=100、tol=0.01的条件下已经完成收敛,那么调大迭代次数、调小收敛阈值都不会改变模型最终训练出的权重参数,因此搜索这两个参数不会产生性能差异,最优值自然和初始设置一致。
2. 评价口径差异问题
你初始计算的是测试集准确率,而GridSearchCV输出的best_score_是5折交叉验证在训练集上的平均准确率,二者统计口径不同,没有直接可比性。你可以用grid_model_result.best_estimator_.score(X_test,y_test)计算最优参数对应的测试集准确率,会和你初始的结果完全一致,也验证了参数没有发生变化。
3. 数据集特性问题
如果你的数据集线性可分性较强、特征区分度较高,正则化参数的调整对模型最终的分类性能影响会非常小,此时在有限的搜索范围内很容易出现最优参数和初始设置重合的情况,属于正常现象,不代表代码有错误。
优化建议
- 扩大超参数搜索范围:可以将
C的搜索范围调整为[0.001, 0.01, 0.1, 1, 10, 100, 1000],覆盖更大的正则化强度区间,也可以加入solver、penalty等影响模型结构的超参数参与搜索。 - 验证模型收敛状态:可以打印
logreg.n_iter_查看模型实际迭代次数,如果数值远小于max_iter,说明模型已经提前收敛,调整max_iter和tol不会对结果产生影响,不需要对这两个参数进行搜索。
内容的提问来源于stack exchange,提问作者Ruslan Pylypiuk
相关产品推荐
相关产品推荐

