scikit-learn 的 `Lasso` 和 `ElasticNet` 中如何使用 `tol`?

机器算法验证 回归 scikit-学习 套索 弹性网
2022-03-07 01:58:42

作为这个问题的后续,套索(和坐标下降算法)的 scikit-learn 实现如何tol在实践中使用该参数?

更准确地说,在文档中,我们可以看到:

tol:浮动,可选

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

此外,当模型不收敛时,我们可以得到:

ConvergenceWarning: Objective did not converge. You might want to increase the number of iterations. Duality gap: 8.058438499079784, tolerance: 5.712111291830755 positive)

所以:

  1. 在 Lasso (/ElasticNet) 的情况下如何定义对偶间隙?
  2. 为什么上面示例中显示的公差是在模型5.712111291830755中设置为0.0001(默认值)的?
  3. 在实践中,这the optimization code checks the dual gap for optimality and continues until it is smaller than tol.意味着什么?
1个回答

我将解释 Lasso 的情况,您可以将相同的逻辑应用于 ElasticNet。

  1. 在 Lasso (/ElasticNet) 的情况下如何定义对偶间隙?

对偶差距是原始问题的解决方案与这里所说的对偶问题的解决方案之间的差异。原始问题如下:

minwRn12||Xwy||22+α||w||1

其中是您的数据集具有的特征数。是您的样本,是权重,是权重的准确性和稀疏性之间的权衡。我认为查看双重公式并没有真正的兴趣,但如果你愿意,你可以看看这里nXwα

然而,更有趣的是知道对偶差距总是积极的。强对偶的情况下,对偶间隙等于零。套索问题是凸的(并且有一个内点),所以有很强的对偶性。这就是为什么减少对偶差距告诉我们我们正在接近最佳解决方案。

  1. 为什么上面示例中显示的容差是 5.712111291830755 而在模型中设置为 0.0001(默认值)?

原因是在权重坐标的max_iter更新后算法还没有收敛。这就是为什么他们要求您增加迭代次数。权重坐标的最后一次更新将该坐标的值更改了 5.71,大于 0.0001。同时,使用您拥有的权重,原始问题减去对偶问题等于 8.058。

  1. 在实践中,优化代码会检查对偶间隙的最优性并一直持续到它小于 tol。意思是?

为了使您的算法收敛,必须更新低于tol的权重坐标。然后,sklearn将检查对偶间隙,仅当值低于tol时才会停止。