Реализация мини-пакетного градиентного спуска возвращает бессмысленные результаты - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь реализовать алгоритм мини-пакетного градиентного спуска для оценки характеристик производительности моих регрессионных моделей, и у меня не так уж много успеха в создании выходных данных с хорошим коэффициентом детерминации.Мой код основан на уже существующей реализации пакетного градиентного спуска, которая прекрасно работает.

def mini_batch_gradient_descent(y, x, params, iters, alpha, mini_batch_size):
    """
    :param y:               x, NumPy array
    :param x:               y, NumPy array
    :param params:          model parameters (w and b)
    :param iters:           max iterations
    :param alpha:           step size
    :param mini_batch_size: mini batch size
    :return: params         all tracked updated model parameters
             losses         all tracked losses during the learning course
    """

    losses = []
    thetas = []
    num_of_samples = len(x)
    for i in range(iters):
        np.random.shuffle(x)
        for j in range(0, num_of_samples, mini_batch_size):
            batch_x = x[j:j+mini_batch_size]
            batch_y = y[j:j+mini_batch_size]

            gradient = -2 * batch_x.T.dot(batch_y - batch_x.dot(param)) / len(batch_x)
            new_param = new_param - alpha * gradient   
            params.append(new_param)

            losses.append(np.mean(np.power(batch_x.dot(param) - batch_y, 2)))

    return params, losses

При таком спуске значения r² составляют -0,002 и т. Д .;и я не уверен почему.Есть ли что-то, что я делаю здесь явно неправильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...