sklearn上的Lasso不会收敛

时间:2013-12-19 12:30:52

标签: python machine-learning least-squares scikit-learn

当我运行

之类的东西时
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从来没有排名低效。 (我认为)

3 个答案:

答案 0 :(得分:8)

尝试增加tol。

来自documentation

  

tol:float,optional

     

优化的容差:如果更新小于tol,则优化代码检查双重间隙的最优性和   继续,直到它小于tol。

对于我的scikit-learn版本,tol的默认值为0.0001。我假设您的容差非常小,以至于优化永远不会达到较低的值。

答案 1 :(得分:4)

SOMETIMES唯一可以帮助我摆脱警告的地方是,显着增加了迭代次数(显着增加了培训时间)。

增加公差总是会导致相同的警告,但是警告值较大,并且不会消除警告。不知道为什么。

作为重要的分析性说明,我解释说最初将Lasso回归用作不良信号时会收到此警告,无论接下来发生什么。
对我来说,它实际上总是发生在模型过度拟合的情况下,这意味着它在完整的训练集上表现良好,但在交叉验证和测试期间表现不佳。
不管我是抑制警告(有一种方法)还是通过增加迭代次数“自然地”消除了警告,我几乎总是不得不回过头来简化套索才能使Lasso有效(并且在某些情况下,完全放弃套索而改用其他模型。

答案 2 :(得分:1)

我也遇到了同样的问题。根据数据种类,使用 normalize=True 选项也有助于使模型收敛。