当我运行类似的程序时
import numpy
from sklearn import linear_model
A= #something
b= #something
clf=linear_model.Lasso(alpha=0.015, fit_intercept=False, tol=0.00000000000001,
max_iter=10000000000000, positive=True)
clf.fit(A,b)
我得到错误:
usr/local/lib/python2.7/dist-packages/scikit_learn-0.14.1-py2.7-linux-x86_64.egg/
sklearn/linear_model/coordinate_descent.py:418: UserWarning: Objective did not
converge. You might want to increase the number of iterations
' to increase the number of iterations')
有趣的是,A从来都不是排名不足的。(我认为)
尝试增加tol。
来自文件:
tol:foat,可选
优化的容差:如果更新小于tol,优化代码检查对偶间隙的最优性和继续,直到它小于tol。
在我的scikit-learn版本中,tol的默认值是0.0001。我假设您的容差太小,优化永远不会达到更低的值。
有时唯一能帮助我摆脱警告的是显著增加迭代次数(显著增加训练时间)。
增加容差总是导致相同的警告,但其中的值更大,而不是消除警告。不知道为什么。
作为一个重要的分析附带说明,我将最初使用Lasso回归时收到此警告解释为一个坏迹象,无论接下来会发生什么
对我来说,它实际上总是发生在模型过度拟合的情况下,这意味着它在整个训练集上表现良好,但在交叉验证和测试过程中表现不佳
不管我是抑制了警告(有办法),还是通过增加迭代次数"自然"地消除了警告,我几乎总是必须回去简化Lasso的一组功能才能有效(在某些情况下,为了使用不同的模型,我完全放弃了Lasso)。
我也遇到了同样的问题。根据数据的多样性,使用选项normalize=True也有助于使模型收敛。
更改套索回归中的一些默认值:
from sklearn.linear_model import Lasso
Lasso(normalize=True, tol=1e-2)
另一个解决方案是关闭警告:)
import warnings
warnings.filterwarnings('ignore')