Regression
scikit-learn 的
scikit-learn 的 Lasso
和 ElasticNet
中如何使用 tol
?
作為這個問題的後續,套索(和坐標下降算法)的 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)
所以:
- 在 Lasso (/ElasticNet) 的情況下如何定義對偶間隙?
- 為什麼上面示例中顯示的公差是在模型
5.712111291830755
中設置為0.0001
(默認值)的?- 在實踐中,這
the optimization code checks the dual gap for optimality and continues until it is smaller than tol.
意味著什麼?
我將解釋 Lasso 的情況,您可以將相同的邏輯應用於 ElasticNet。
- 在 Lasso (/ElasticNet) 的情況下如何定義對偶間隙?
對偶差距是原始問題的解決方案與這裡所說的對偶問題的解決方案之間的差異。主要問題如下: $$ \min_{w \in \mathbb{R}^{n}} \frac{1}{2} ||Xw - y||{2}^{2} + \alpha ||w||{1} $$
在哪裡 $ n $ 是您的數據集具有的特徵數。 $ X $ 是你的樣品, $ w $ 是權重和 $ \alpha $ 是權重的準確性和稀疏性之間的權衡。我認為查看雙重公式並沒有真正的興趣,但如果你願意,你可以看看這裡。
然而,更有趣的是知道對偶差距總是積極的。在強對偶的情況下,對偶間隙等於零。套索問題是凸的(並且有一個內點),所以有很強的對偶性。這就是為什麼減少對偶差距告訴我們我們正在接近最佳解決方案。
- 為什麼上面示例中顯示的容差是 5.712111291830755 而在模型中設置為 0.0001(默認值)?
原因是在權重坐標的*max_iter*更新後算法還沒有收斂。這就是為什麼他們要求您增加迭代次數。權重坐標的最後一次更新將該坐標的值更改了 5.71,大於 0.0001。同時,使用您擁有的權重,原始問題減去對偶問題等於 8.058。
- 在實踐中,優化代碼會檢查對偶間隙的最優性並一直持續到它小於 tol。意思是?
為了使您的算法收斂,必須更新低於tol的權重坐標。然後,sklearn將檢查對偶間隙,僅當值低於tol時才會停止。