我刚开始学习机器学习,并且已经研究了成本函数背后的数学原理。我想知道在线性回归中应该在哪里实现成本函数,即 J(B1, B2) = 1/2nΣ(y-y_pred)^2?
在下面的代码中,没有使用成本函数,因为我们在预测值之后才计算成本函数。当我浏览代码时,我没有看到任何错误。最小化步骤。代码可在此处找到 here
import numpy as npimport matplotlib.pyplot as pltdef estimate_coef(X, y): n = np.size(X) m_X, m_y = np.mean(X), np.mean(y) SS_Xy = np.sum(y*X) - n*m_y*m_X SS_XX = np.sum(X*X) - n*m_X*m_X b_1 = SS_Xy / SS_XX b_0 = m_y - b_1*m_X return (b_0, b_1)def plot_regression_line(X, y, b): n = np.size(X) plt.scatter(X, y, color = "m", marker = "o", s = 30) y_pred = b[0] + b[1]*X print(f'prediction=>{y_pred}') plt.plot(X, y_pred, color = "g") plt.xlabel('x') plt.ylabel('y') plt.show() def main(): # observations X = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) y = np.array([1, 3, 2, 5, 7, 8, 8, 9, 10, 12]) # estimating coefficients b = estimate_coef(X, y) print(f'b_0=>{b[0]}, b_1=>{b[1]}') # plotting regression line plot_regression_line(X, y, b) if __name__ == "__main__": main()
回答:
需要解决的最小化问题是关于b0和b1的,即我们需要找到这两个的最优值。当你解决这个最小化问题时,你会得到 b_1 = SS_Xy / SS_XX
和 b_0 = m_y - b_1*m_X
。他们没有在代码中解决最小化问题,而是直接使用结果来获得最优值。这在文章中已经提到:
我们的任务是找到使 J(b_0,b_1) 最小化的 b_0 和 b_1 的值!
不深入数学细节,我们在这里展示结果: