```python import numpy as np import matplotlib.pyplot as plt # 数据 x = np.array([5.50, 6.75, 7.25, 7.00, 6.50, 5.25, 6.00, 4.50, 8.25, 9.50]) y = np.array([11.50, 13.70, 14.83, 14.15, 13.06, 11.71, 12.16, 9.96, 15.88, 18.33]) # 1) 线性回归模型:y = w * x + b # 2) 目标函数 l(均方误差) def loss_function(w, b, x, y): y_pred = w * x + b return np.mean((y_pred - y) 2) # 3) 闭式解 x = x.reshape(-1, 1) X = np.hstack([x, np.ones((x.shape[0], 1))]) w = np.linalg.inv(X.T @ X) @ X.T @ y print("闭式解得到的斜率 w:", w[0]) print("闭式解得到的截距 b:", w[1]) # 4) 梯度下降法 def gradient_descent(x, y, learning_rate, num_iterations): w = 0 b = 0 for _ in range(num_iterations): y_pred = w * x + b dw = np.mean((y_pred - y) * x) db = np.mean(y_pred - y) w -= learning_rate * dw b -= learning_rate * db return w, b learning_rate = 0.01 num_iterations = 1000 w_gd, b_gd = gradient_descent(x, y, learning_rate, num_iterations) print("梯度下降法得到的斜率 w:", w_gd) print("梯度下降法得到的截距 b:", b_gd) # 5) 预测广告投入为 1 千万元时的销售量 x_pred = 10 # 1 千万元 = 10 百万元 y_pred_closed = w[0] * x_pred + w[1] y_pred_gd = w_gd * x_pred + b_gd print("闭式解预测广告投入为 1 千万元时的销售量:", y_pred_closed) print("梯度下降法预测广告投入为 1 千万元时的销售量:", y_pred_gd) # 绘图 plt.scatter(x, y) plt.plot(x, w[0] * x + w[1], color='red', label='闭式解') plt.plot(x, w_gd * x + b_gd, color='green', label='梯度下降法') plt.xlabel('广告投入(百万元)') plt.ylabel('销售量(百万件)') plt.title('线性回归') plt.legend() plt.show() ``` [2024-11-18 20:44:33 | AI写代码神器 | 712点数解答]