Функция стоимости линейной регрессии и градиентного спуска - PullRequest
2 голосов
/ 04 апреля 2019

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

В таких курсах, как курсы Эндрю Нга, определено, что ошибка между прогнозируемым значением и истинным значением, например Линейная регрессия выражается как:

ошибка = прогнозируемое значение - у

В некоторых других уроках / курсах ошибка представлена ​​в виде:

error = y - предсказанное_значение

Также, например, в науке о данных Udacity Nanodegree, обновление весов градиентного спуска задается как:

error = y - предсказанное_значение
W_new = W + learn_rate * np.matmul (ошибка, X)

В то же время, в некоторых других книгах / курсах, та же процедура дается:

ошибка = прогнозируемое_значение - у
W_new = W - Learn_rate * np.matmul (ошибка, X)

Может ли кто-нибудь помочь мне с этими разными обозначениями?
Спасибо!

EDIT

После ответа @bottaio я получил следующее:

Первый случай:

# compute errors
y_pred = np.matmul(X, W) + b
error = y_pred - y

# compute steps
W_new = W - learn_rate * np.matmul(error, X)
b_new = b - learn_rate * error.sum()
return W_new, b_new

Второй случай:

# compute errors
y_pred = np.matmul(X, W) + b
error = y - y_pred

# compute steps
W_new = W + learn_rate * np.matmul(error, X)
b_new = b + learn_rate * error.sum()
return W_new, b_new

Запустив первый и второй кейсы, я получаю: enter image description here

Третий случай:

# compute errors
y_pred = np.matmul(X, W) + b
error = y_pred - y

# compute steps
W_new = W + learn_rate * np.matmul(error, X)
b_new = b + learn_rate * error.sum()
return W_new, b_new

Запустив третий случай, я получаю:

enter image description here

Это именно та интуиция, которой я пытаюсь достичь. Какова связь между использованием error = y - y_pred и необходимостью использовать пошаговое вычисление как положительное W_new = W + learn_rate * np.matmul (error, X) вместо W_new = W - learn_rate * np.matmul (ошибка, X) ?



Спасибо за поддержку !!!!!

1 Ответ

1 голос
/ 04 апреля 2019
error = predicted_value - y
error' = y - predicted_value = -error
W = W + lr * matmul(error, X) = W + lr * matmul(-error', X) = W - lr * matmul(-error', X)

Эти два выражения - два способа взглянуть на одно и то же. Вы распространяете ошибку в обратном направлении.

Если честно, второе более четко указывает на то, что происходит под колпаком - ошибка - это только разница между тем, что модель предсказывает относительно истинности оснований (объясняет предсказанное - y). А шаг градиентного спуска заключается в изменении веса в направлении, противоположном градиенту (объясняет минус).

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