Я пытаюсь реализовать алгоритм мини-пакетного градиентного спуска для оценки характеристик производительности моих регрессионных моделей, и у меня не так уж много успеха в создании выходных данных с хорошим коэффициентом детерминации.Мой код основан на уже существующей реализации пакетного градиентного спуска, которая прекрасно работает.
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 и т. Д .;и я не уверен почему.Есть ли что-то, что я делаю здесь явно неправильно?