А функция для шага градиента какая?
def stochastic_gradient_step(X, y, w, train_ind, eta=0.01):
grad0 = 2* X[train_ind][0] * ( np.sum( X[train_ind] * w) - y[train_ind])/X.shape[0]
grad1 = 2* X[train_ind][1] * ( np.sum( X[train_ind] * w) - y[train_ind])/X.shape[0]
grad2 = 2* X[train_ind][2] * ( np.sum( X[train_ind] * w) - y[train_ind])/X.shape[0]
grad3 = 2* X[train_ind][3] * ( np.sum( X[train_ind] * w) - y[train_ind])/X.shape[0]
return w - eta * np.array([grad0, grad1, grad2, grad3])