用梯度下降法求解参数的代码
时间: 2024-09-07 19:02:12 浏览: 38
梯度下降法是一种优化算法,通常用于机器学习和深度学习中寻找模型的参数,使得损失函数最小化。以下是一个使用梯度下降法求解线性回归模型参数的Python代码示例:
```python
import numpy as np
# 定义线性回归模型的假设函数
def hypothesis(X, theta):
return np.dot(X, theta)
# 定义计算梯度的函数
def compute_gradient(X, y, theta):
m = len(y)
return np.dot(X.T, (hypothesis(X, theta) - y)) / m
# 定义梯度下降函数
def gradient_descent(X, y, theta, alpha, iterations):
m = len(y)
J_history = [] # 记录损失函数值的历史
for i in range(iterations):
theta = theta - alpha * compute_gradient(X, y, theta)
J_history.append(np.mean((hypothesis(X, theta) - y) ** 2))
return theta, J_history
# 假设有一些训练数据
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])
theta = np.array([0, 0]) # 初始化参数为0
alpha = 0.01 # 学习率
iterations = 100 # 迭代次数
# 使用梯度下降法求解参数
theta, J_history = gradient_descent(X, y, theta, alpha, iterations)
print("参数theta:", theta)
```
在这个例子中,我们首先定义了一个假设函数`hypothesis`,它接受特征矩阵`X`和参数向量`theta`作为输入,并返回预测值。接着,我们定义了`compute_gradient`函数来计算损失函数关于参数`theta`的梯度。最后,我们定义了`gradient_descent`函数,它接受特征矩阵`X`、目标向量`y`、参数向量`theta`、学习率`alpha`和迭代次数`iterations`作为输入,并通过迭代更新`theta`来最小化损失函数。
在实际应用中,梯度下降法有多种变体,比如批量梯度下降、随机梯度下降(SGD)和小批量梯度下降。每种方法在处理数据规模和收敛速度方面有所不同。
阅读全文