请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

ConvergenceWarning

老师,您好。现在sklearn默认的solver是lbfgs,我对digits数据集进行LogisticRegression或者LogisticRegressionCV,发现都不收敛。将solver换成liblinear发现都收敛了。查阅了sklearn文档,文档说liblinear适合小型数据集。我就想是不是digits数据集规模小了,只适合用liblinear。可是那些人造的数据那规模不更小吗?用的也是sklearn默认的solver,也没见报这种警告啊。我又用iris数据集测试,发现默认solver情况下LogisticRegression收敛,而
LogisticRegressionCV却不收敛,这又是为什么?同样改成liblinear后就都收敛了。

正在回答 回答被采纳积分+3

插入代码

1回答

liuyubobobo 2021-01-19 18:12:10

首先,一个算法适合小数据集,不代表所有小数据集都一定有效。只是统计意义上,这个算法在小数据集上,作用的效果更好。


以 iris 数据及为例,我测试了一下,现在默认的 LogisticRegression 确实不收敛。

https://img1.sycdn.imooc.com/szimg/6006aea80978983521840510.jpg


解决不收敛的方式,通常有两种,其实课程中都提及过:


1)增加迭代次数。所谓不收敛,是在有限次迭代中没有收敛。LogisticRegression 默认的迭代次数 max_iter 是 100,我试了一下,max_iter 设置为 1000 就可以收敛。

https://img1.sycdn.imooc.com/szimg/6006af1809863b3b11280216.jpg


2)另一个方式非常建议,就是对数据做标准化。在讲线性回归的时候介绍过,对于一些算法,标准化虽然在理论上不影响最终的结果,但是会让搜索更容易进行。

https://img1.sycdn.imooc.com//szimg/6006b04e09e9663410420310.jpg


继续加油!:)


0 回复 有任何疑惑可以回复我~
  • 提问者 ITMOCC #1
    老师,我想问的是同样一组数据用Ibfgs不收敛,用liblinear就收敛了,或者说用Ibfgs迭代次数要1000次才收敛,而liblinear100次就行了。这是不是说明liblinear比Ibfgs的性能更好啊?(用liblinear更容易收敛)。再有对于那些课程中人造的数据,用默认的Ibfgs100次也能收敛,是因为数据太简单了吗?
    回复 有任何疑惑可以回复我~ 2021-01-19 18:52:42
  • liuyubobobo 回复 提问者 ITMOCC #2
    是的,对于二分类问题,liblinear 性能更好,但是 liblinear 无法直接求解多分类问题的损失函数的最优解,所以只能使用 OvR 的方式处理多分类问题的最优解。而 Ibfgs 可以直接求解多分类问题。所以,当数据达到一定程度,OvR 的性能就有问题了,这就是 liblinear 更适合小规模数据的原因,同时,我怀疑也是 sklearn 更新为将 Ibfgs 作为 solver 的默认方法的原因。课程中人造的数据,用默认的Ibfgs100次也能收敛,是因为数据太简单了,函数的收敛性太强了。
    回复 有任何疑惑可以回复我~ 2021-01-19 19:11:03
  • 提问者 ITMOCC 回复 liuyubobobo #3
    好的。老师另外LogisticRegressionCV里的refit和C是什么意思,sklearn文档里说的我不太明白,您能解释解释吗?
    回复 有任何疑惑可以回复我~ 2021-01-19 21:18:28
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号