Формула для оптимальной скорости обучения в SGDClassifier в Scikit-learn - PullRequest
0 голосов
/ 30 сентября 2018

Я не могу найти формулу для скорости обучения SGDClassifier в Scikit-learn , когда learning_rate='optimal', в исходном коде C ++ этой же функции https://leon.bottou.org/projects/sgd

Формула упоминается в SGDClassifier в Scikit-learn :

foo+bar

Используется ли эта правильная формула в исходном коде SGDClassifier или она изменилась, когдапортирован на Scikit-learn?Кроме того, что именно представляет t0 (в документах упоминается только то, что он был определен с помощью эвристики)?

1 Ответ

0 голосов
/ 30 сентября 2018

Давайте пройдемся по исходному коду и формулам.

Sklearn утверждает следующую формулу: eta = 1/(alpha* (t+t_0)).На сайте Леона Ботту мы находим выражение 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 и t_0 от sklearn равентак же, как 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)).

Следовательно, формулы одинаковы.

...