Scikit-learn 中 SGDClassifier 最优学习率的公式
The formula for the optimal learning rate in the SGDClassifier in Scikit-learn
我找不到 SGDClassifier in Scikit-learn when the learning_rate='optimal'
, in the original C++ source code of this same function https://leon.bottou.org/projects/sgd
的学习率公式
SGDClassifier in Scikit-learn中提到的公式:
这个正确的公式是在原始 SGDClassifier
代码中使用的,还是在移植到 Scikit-learn
时发生了变化?
另外 t0 到底代表什么(在文档中只提到它是用启发式确定的)?
让我们浏览一下源代码和公式。
Sklearn 规定了以下公式:eta = 1/(alpha* (t+t_0))
。在 Leon Bottou 的网站上,我们找到表达式 eta = eta_0 / (1 + lambda eta_0 t)
.
让我们稍微改写后一个公式:
eta = eta_0 / (1 + lambda eta_0 t)
= 1 / ( 1/eta_0 + lambda t )
= 1 / ( lambda * ( 1/eta_0 * 1/lambda + t)).
如果现在 lambda = alpha
和来自 sklearn 的 t_0
与 1/(eta_0*alpha)
相同,公式是相同的。现在让我们看一下源代码:https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/sgd_fast.pyx#L657
在第 657 行,我们看到 optimal_init = 1.0 / (initial_eta0 * alpha)
。 optimal_init
变量只是 t_0
与我们在第 679 行中看到的公式不同的名称:eta = 1.0 / (alpha * (optimal_init + t - 1))
.
所以公式是一样的
我找不到 SGDClassifier in Scikit-learn when the learning_rate='optimal'
, in the original C++ source code of this same function https://leon.bottou.org/projects/sgd
SGDClassifier in Scikit-learn中提到的公式:
这个正确的公式是在原始 SGDClassifier
代码中使用的,还是在移植到 Scikit-learn
时发生了变化?
另外 t0 到底代表什么(在文档中只提到它是用启发式确定的)?
让我们浏览一下源代码和公式。
Sklearn 规定了以下公式:eta = 1/(alpha* (t+t_0))
。在 Leon Bottou 的网站上,我们找到表达式 eta = eta_0 / (1 + lambda eta_0 t)
.
让我们稍微改写后一个公式:
eta = eta_0 / (1 + lambda eta_0 t)
= 1 / ( 1/eta_0 + lambda t )
= 1 / ( lambda * ( 1/eta_0 * 1/lambda + t)).
如果现在 lambda = alpha
和来自 sklearn 的 t_0
与 1/(eta_0*alpha)
相同,公式是相同的。现在让我们看一下源代码:https://github.com/scikit-learn/scikit-learn/blob/master/sklearn/linear_model/sgd_fast.pyx#L657
在第 657 行,我们看到 optimal_init = 1.0 / (initial_eta0 * alpha)
。 optimal_init
变量只是 t_0
与我们在第 679 行中看到的公式不同的名称:eta = 1.0 / (alpha * (optimal_init + t - 1))
.
所以公式是一样的