python实现一阶梯度下降算法计算原函数及其可视化
时间: 2024-10-23 09:17:51 浏览: 22
在Python中,我们可以使用numpy库来实现一阶梯度下降算法,它是一个用于数值计算的开源库。首先,我们需要定义原函数(目标函数),假设我们要最小化的是一个简单的线性回归模型的损失函数,例如均方误差。
```python
import numpy as np
def gradient_descent(x, y, learning_rate=0.01, n_iterations=1000):
# 假设我们有一个线性模型 w * x + b
m = len(x)
w = np.random.randn(1, m) # 初始化权重
b = 0 # 初始偏置值
for _ in range(n_iterations):
y_pred = w[0] * x + b # 预测值
dw = (1 / m) * (-2 * np.dot(x.T, (y - y_pred))) # 梯度公式
db = (1 / m) * sum(y - y_pred) # 求偏导数
w -= learning_rate * dw # 更新权重
b -= learning_rate * db # 更新偏置
return w, b
# 示例数据
x = np.array([[1], [2], [3], [4]])
y = np.array([2, 4, 6, 8])
w, b = gradient_descent(x, y)
print("Learned parameters:", w.item(), "and", b)
# 可视化
import matplotlib.pyplot as plt
plt.scatter(x, y, color='black')
plt.plot(x, w[0][0]*x + b, 'r', label=f"Linear regression: {w[0][0]:.2f}x + {b:.2f}")
plt.xlabel('Input data')
plt.ylabel('Target values')
plt.legend()
plt.show()
```
在这个例子中,`gradient_descent`函数接收输入特征、目标值、学习率和迭代次数作为参数。每次迭代都会更新模型的权重和偏置以减小损失函数。最后,我们会绘制出拟合的直线来直观地看到梯度下降的效果。
阅读全文