用python实现并绘出图像在直线y=2x+5,在[0,5]内用均匀分布随机产生200个点,与直线误差 为(0,0.2)之间。1.依据产生的200个点,用最小二乘法实现线性回 归,求出这条直线。2.依据产生的200个点,用梯度下降的办法,求 出这条直线。
时间: 2023-04-03 17:02:51 浏览: 119
1. 对于第一个问题,我可以回答。以下是用 Python 实现并绘制图像在直线 y=2x+5,在[0,5]内用均匀分布随机产生200个点,与直线误差为(0,0.2)之间的代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成随机点
x = np.linspace(0, 5, 200)
y = 2 * x + 5 + np.random.uniform(-0.1, 0.1, 200)
# 最小二乘法实现线性回归
A = np.vstack([x, np.ones(len(x))]).T
k, b = np.linalg.lstsq(A, y, rcond=None)[0]
# 梯度下降法实现线性回归
def gradient_descent(x, y, alpha=0.01, num_iters=1000):
m = len(y)
theta = np.zeros(2)
for i in range(num_iters):
h = np.dot(x, theta)
loss = h - y
gradient = np.dot(x.T, loss) / m
theta -= alpha * gradient
return theta
X = np.vstack([x, np.ones(len(x))]).T
k_gd, b_gd = gradient_descent(X, y)
# 绘制图像
plt.scatter(x, y, s=5, label='data')
plt.plot(x, k * x + b, 'r', label='Least squares')
plt.plot(x, k_gd * x + b_gd, 'g', label='Gradient descent')
plt.legend()
plt.show()
```
2. 对于第二个问题,我也可以回答。以上面代码中的 `gradient_descent` 函数为基础,只需要将其应用到本问题中即可。
阅读全文