【问题标题】:Linear regression cost function and gradient descent线性回归成本函数和梯度下降
【发布时间】:2019-04-04 03:46:50
【问题描述】:

我研究数据科学和机器学习主题已经有一段时间了,但我总是有一个让我很困惑的地方。

在像吴恩达这样的课程中,它定义了预测值与真实值之间的误差,例如线性回归表示为:

误差 = 预测值 - y

在其他一些教程/课程中,错误显示为:

误差 = y - 预测值

另外,例如,在 Udacity 的数据科学纳米学位中,梯度下降权重更新由下式给出:

误差 = y - 预测值
W_new = W + learn_rate * np.matmul(error, X)

同时,在其他几本书/课程中,相同的程序由:

误差 = 预测值 - y
W_new = W - learn_rate * np.matmul(error, X)

有人可以帮我解决这些不同的符号吗?
谢谢!

编辑

按照@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

运行第一种和第二种情况,我得到:

第三种情况:

# 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

运行第三种情况,我得到:

这正是我想要实现的直觉。 使用 error = y - y_pred 和必须将步骤计算用作正 W_new = W + learn_rate * np.matmul(error, X) 之间的关系是什么? W_new = W - learn_rate * np.matmul(error, X) ?



谢谢大家的支持!!!!!!

【问题讨论】:

    标签: linear-regression


    【解决方案1】:
    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)。梯度下降步骤是关于改变与梯度相反方向的权重(解释减号)。

    【讨论】:

    • 非常感谢您的回复!我刚刚根据您的回答更新了我的问题!