【问题标题】:Lasso on sklearn does not convergesklearn 上的套索不收敛
【发布时间】:2014-01-08 00:45:14
【问题描述】:

当我运行类似的东西时

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 从不排名低。 (我认为)

【问题讨论】:

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


    【解决方案1】:

    尝试增加 tol。

    来自documentation

    tol : 浮动,可选

    优化的容差:如果更新小于 tol,优化代码检查对偶间隙的最优性和 一直持续到小于 tol。

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

    【讨论】:

    • 就是这样!谢谢
    • 好吧,我怎样才能以一种遍历所有 alpha 的方式传递参数,并选择误差最小的那个而不考虑它的实际值?
    • 如果我已经增加了 tol 和 max_iter,我还能做些什么来消除警告消息?
    • 有人能告诉我这里dual gap是什么意思吗?谢谢!
    • 为什么 lasso 完全收敛,即使有惩罚也不只是矩阵的乘法?
    【解决方案2】:

    SOMETIMES 帮助我摆脱警告的唯一一件事是显着增加迭代次数(显着增加训练时间)。

    增加容差总是会导致相同的警告,但其中的值更大,而不是消除警告。不知道为什么。

    作为重要的分析说明,我将在使用 Lasso 回归时收到此警告视为一个不好的信号,无论接下来会发生什么。
    对我来说,它几乎总是发生在模型过度拟合的情况下,这意味着它在整个训练集本身上表现良好,但在交叉验证和测试期间表现不佳。
    无论我是否抑制了警告(有办法)或通过增加迭代次数“自然地”摆脱它,我几乎总是不得不返回并简化套索的功能集以使其有效(并且在某些情况下完全放弃 Lasso 以支持不同的模型)。

    【讨论】:

    • 你在说什么“不同的模型”?把名字去掉,我可以自己查一下,看看它们是否有用。谢谢!
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      更改套索回归中的一些默认值:

      from sklearn.linear_model import Lasso
      Lasso(normalize=True, tol=1e-2)
      

      另一个解决方案是关闭警告:))

      import warnings
      warnings.filterwarnings('ignore')
      

      【讨论】:

        猜你喜欢
        • 2019-03-14
        • 2017-07-28
        • 2020-04-11
        • 2020-03-15
        • 2018-03-12
        • 1970-01-01
        • 1970-01-01
        • 2016-01-19
        • 1970-01-01
        相关资源
        最近更新 更多