ogregor
@ogregor
арендатор vpn сервера debian

Как сформировать правильный алгоритм стохастического градиентного спуска?

Здравствуйте, не получается реализовать выполнение алгоритма шага для стохастического градиентного спуска.

Вот модель которой пользовался:
33c354eb086d44dd8a7548fe4ece0e1e.png
Вот алгоритм шага:
def stochastic_gradient_step(X, y, w, train_ind, eta=0.01):
    r = []
    X_train = X[train_ind]
   
    r.append(w[0] - 0.5 * eta * X_train[0] * (w[0] * X_train[0] + w[1] * X_train[1] + w[2] * X_train[2] + w[3]* X_train[3] - y[train_ind]))
    r.append(w[1] - 0.5 * eta * X_train[1] * (w[0] * X_train[0] + w[1] * X_train[1] + w[2] * X_train[2] + w[3]* X_train[3] - y[train_ind]))
    r.append(w[2] - 0.5 * eta * X_train[2] * (w[0] * X_train[0] + w[1] * X_train[1] + w[2] * X_train[2] + w[3]* X_train[3] - y[train_ind]))
    r.append(w[3] - 0.5 * eta * X_train[3] * (w[0] * X_train[0] + w[1] * X_train[1] + w[2] * X_train[2] + w[3]* X_train[3] - y[train_ind]))
    return r


Подозреваю что формула составлена не верно.
  • Вопрос задан
  • 4028 просмотров
Решения вопроса 1
@t_ray
Можно, например, так:
def stochastic_gradient_step(X, y, w, train_ind, eta=0.01):
l=len(y)
return w+(2*eta*X[train_ind]/l)*(y[train_ind]-sum((xi*wi) for xi,wi in zip(X[train_ind],w)))

Если я правильно понимаю, какую именно задачу вы решаете :)
Но у меня похожая проблема - градиентный спуск работает, полученный вектор весов - "похож на правду", функция среднеквадратичной ошибки реализована верно. Но ответ - не подходит!
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Wedoslaw
Там опечатка в задании, если в задании ничего не исправлять то применять нужно другую формулу:
b695cb4b3e2d46449f7e66728c368ce1.png
Ответ написан
@blackchekist
у топикстартера нет деления на l (в вашем случае на 4). Без этого градиент неправильно вычисляется, соответственно спуска не будет.
Ответ написан
Комментировать
@PavelBortnikov
матрунич сергей Тоже столкнулся с этой задачей. Можете поделиться в чем была проблема? Уже все перепроверил...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы