如何确定网格搜索中抛出LineSearchWarning的逻辑回归求解器?
问题
LineSearchWarning警告已弹出10次,行号涉及456至305区间,警告信息如下:
C:\Users\foo\Anaconda3\lib\site-packages\scipy\optimize\_linesearch.py:456: LineSearchWarning: The line search algorithm did not converge warn('The line search algorithm did not converge', LineSearchWarning)
当前执行的网格搜索参数配置如下:
logistic_regression_grid = { "class_weight": ["balanced"], "max_iter": [100000], "solver": ["lbfgs", "liblinear", "newton-cg", "newton-cholesky", "sag", "saga"], "random_state": [0] }
请问是哪个求解器抛出了该警告?是否可以确定具体的求解器?
解答
- 仅通过当前给出的警告信息,无法直接确定具体是哪个求解器触发的警告,因为网格搜索会遍历所有求解器参数组合,每个组合都会独立执行训练流程,警告未关联对应的参数信息。
- 但可以基于求解器的底层实现逻辑缩小范围:
lbfgs、newton-cg、newton-cholesky这三个求解器依赖Scipy的线搜索算法,是触发该警告的高概率候选;liblinear采用坐标下降法,不依赖此类线搜索逻辑,可直接排除;sag和saga基于随机平均梯度下降,也不会触发这个特定的Scipy线搜索警告。
- 若要精准定位,建议在网格搜索过程中添加日志记录,输出每个求解器参数对应的训练状态,或者修改代码捕获警告并绑定当前运行的求解器参数。
内容的提问来源于stack exchange,提问作者nicomp
相关产品推荐
相关产品推荐

