用梯度下降法优化上面的代码
时间: 2024-05-01 08:22:56 浏览: 50
好的,下面是使用梯度下降法优化的代码:
```python
import numpy as np
# 定义损失函数和梯度函数
def loss_function(w, b, x, y):
N = len(y)
total_error = 0.0
for i in range(N):
total_error += (y[i] - (w * x[i] + b)) ** 2
return total_error / N
def gradient_function(w, b, x, y):
N = len(y)
w_gradient = 0
b_gradient = 0
for i in range(N):
w_gradient += -2 * x[i] * (y[i] - (w * x[i] + b))
b_gradient += -2 * (y[i] - (w * x[i] + b))
return w_gradient / N, b_gradient / N
def train(x, y, learning_rate=0.01, epochs=100):
# 初始化参数
w = np.random.randn()
b = np.random.randn()
# 训练模型
for epoch in range(epochs):
# 计算梯度
w_gradient, b_gradient = gradient_function(w, b, x, y)
# 更新参数
w -= learning_rate * w_gradient
b -= learning_rate * b_gradient
# 计算损失函数值
loss = loss_function(w, b, x, y)
# 输出训练过程
if (epoch + 1) % 10 == 0:
print("Epoch:", epoch + 1, "Loss:", loss)
return w, b
# 测试模型
x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 4, 6, 8, 10])
w, b = train(x, y)
print("w:", w, "b:", b)
```
在优化过程中,我们首先定义了损失函数和梯度函数。损失函数用于度量模型预测结果与真实值之间的差距,梯度函数用于计算损失函数对每个参数的偏导数。然后我们通过随机初始化参数,循环训练模型,每次循环中计算梯度,更新参数,计算损失函数值,并输出训练过程。最终得到的参数即为最优参数,可以用于预测新的数据。
阅读全文