matplotlib绘制梯度下降迭代
时间: 2024-10-16 20:10:26 浏览: 19
Matplotlib是一个强大的数据可视化库,在Python中常用于创建各种图表,包括可视化机器学习过程,比如梯度下降算法。要展示梯度下降的迭代过程,可以创建一个简单的二维平面,并通过点的移动表示参数向量的变化。
首先,你需要导入必要的库,如`matplotlib.pyplot`和`numpy`:
```python
import numpy as np
import matplotlib.pyplot as plt
```
然后,创建一个函数模拟梯度下降,假设我们有一个简单的线性模型和代价函数:
```python
def gradient_descent(x, y, learning_rate=0.01, num_iterations=100):
m = b = 0
x_b = np.c_[x, np.ones(len(x))] # 添加偏置列
for i in range(num_iterations):
y_pred = m * x + b
loss = y_pred - y
gradients_m = (np.dot(x_b.T, loss) / len(x))
gradients_b = np.sum(loss) / len(x)
m -= learning_rate * gradients_m
b -= learning_rate * gradients_b
return m, b
# 生成一些示例数据
x = np.linspace(-10, 10, 400)
y = 2 * x + 5 + np.random.normal(0, 1, size=len(x))
m_initial, _ = gradient_descent(x, y)
```
现在,我们可以使用`plt`来绘制初始直线、每次迭代后的拟合直线以及最终结果:
```python
fig, ax = plt.subplots()
ax.scatter(x, y, label='Training data')
ax.plot(x, 2 * x + 5, 'r', label='Initial guess', linestyle='--')
# 创建一个点来显示每一步的位置
params_history = [m_initial]
for i in range(num_iterations):
m, _ = gradient_descent(x, y)
params_history.append(m)
ax.plot(x, m * x + 5, label=f"Iteration {i+1}", linestyle='-', color='g')
ax.set_title('Gradient Descent Iterations')
ax.legend()
# 显示每一步的位置
plt.plot(range(1, len(params_history)+1), params_history, marker='o', markersize=10, color='b')
plt.xlabel('Iterations')
plt.ylabel('Weight')
plt.grid(True)
plt.show()
```
这个图将显示梯度下降过程中权重(`m`)随迭代次数变化的过程。每个点代表一次迭代后的状态。
阅读全文