Я обучил многомерную модель линейной регрессии на данных, доступных в этом файле .csv: https://www.kaggle.com/dgomonov/new-york-city-airbnb-open-data/downloads/new-york-city-airbnb-open-data.zip/3 Я обучил ее (градиентный спуск) следующим образом:
alpha = 0.1
rd: int = 0
while epoch <= 4000:
rd = 0
epoch += 1
print("Epoch: "+str(epoch))
while rd <= 48894:
expected_y: float = x1a[rd] * w[0]
expected_y += x1b[rd] * w[1]
expected_y += x1c[rd] * w[2]
expected_y += x1d[rd] * w[3]
expected_y += x1e[rd] * w[4]
expected_y += x2p[rd] * w[5]
expected_y += x2e[rd] * w[6]
expected_y += x2s[rd] * w[7]
expected_y += x3[rd] * w[8]
expected_y += x4[rd] * w[9]
expected_y += x5[rd] * w[10]
expected_y += x6[rd] * w[11]
expected_y += x7[rd] * w[12] + b
actual_y: float = y[rd]
disparity: float = expected_y - actual_y
b -= 2 * alpha * disparity * (1 / 48894)
w[0] -= 2 * alpha * x1a[rd] * disparity * (1 / 48894)
w[1] -= 2 * alpha * x1b[rd] * disparity * (1 / 48894)
w[2] -= 2 * alpha * x1c[rd] * disparity * (1 / 48894)
w[3] -= 2 * alpha * x1d[rd] * disparity * (1 / 48894)
w[4] -= 2 * alpha * x1e[rd] * disparity * (1 / 48894)
w[5] -= 2 * alpha * x2p[rd] * disparity * (1 / 48894)
w[6] -= 2 * alpha * x2e[rd] * disparity * (1 / 48894)
w[7] -= 2 * alpha * x2s[rd] * disparity * (1 / 48894)
w[8] -= 2 * alpha * x3[rd] * disparity * (1 / 48894)
w[9] -= 2 * alpha * x4[rd] * disparity * (1 / 48894)
w[10] -= 2 * alpha * x5[rd] * disparity * (1 / 48894)
w[11] -= 2 * alpha * x6[rd] * disparity * (1 / 48894)
w[12] -= 2 * alpha * x7[rd] * disparity * (1 / 48894)
rd += 1
if epoch % 2 == 0:
te = 0
mean_squared_error: float = 0
while te <= 48894:
expected_y = x1a[te] * w[0] + x1b[te] * w[1] + x1c[te] * w[2] + x1d[te] * w[3] + x1e[te] * w[4]
expected_y += x2p[te] * w[5]
expected_y += x2e[te] * w[6] + x2s[te] * w[7] + x3[te] * w[8] + x4[te] * w[9] + x5[te] * w[10]
expected_y += x6[te] * w[11]
expected_y += x7[te] * w[12] + b
actual_y = y[te]
disparity = expected_y - actual_y
mean_squared_error += disparity ** 2
te += 1
print("\t\tEpoch: " + str(epoch) + "\n\t\tMSE:" + str(mean_squared_error))
Функция потерь / затрат(среднеквадратическая ошибка) продолжает уменьшаться, как и ожидалось, до 712-й эпохи, затем начинает увеличиваться (хотя и медленно). Что это значит и как предотвратить это?