梯度下降法python实现
时间: 2023-09-18 09:14:27 浏览: 95
梯度下降法(Gradient Descent)是一种常用的优化算法,用于最小化一个损失函数。在机器学习中,我们通常使用梯度下降法来更新模型的参数,以便使模型更好地拟合训练数据。下面是一份实现梯度下降法的 Python 代码:
```python
import numpy as np
def gradient_descent(X, y, alpha, num_iters):
"""
梯度下降算法的实现
:param X:包含特征向量的矩阵
:param y:样本标签
:param alpha:学习率
:param num_iters:迭代次数
:return:最优参数向量theta,代价函数J的历史记录
"""
# 获取样本数量和特征数量
m, n = X.shape
# 初始化参数向量theta
theta = np.zeros((n, 1))
# 初始化代价函数J的历史记录
J_history = np.zeros((num_iters, 1))
# 迭代更新参数向量theta
for i in range(num_iters):
# 计算假设函数h(x)
h = np.dot(X, theta)
# 计算误差
error = h - y
# 计算梯度
gradient = np.dot(X.T, error) / m
# 更新参数向量theta
theta = theta - alpha * gradient
# 计算代价函数J
J = np.dot(error.T, error) / (2 * m)
# 记录代价函数J的历史记录
J_history[i] = J
return theta, J_history
```
在这个示例中,我们首先定义了一个名为 `gradient_descent` 的函数,它接受以下参数:
- `X`:一个包含特征向量的矩阵,每行代表一个样本,每列代表一个特征。
- `y`:一个包含样本标签的向量,每个元素代表一个样本的标签。
- `alpha`:学习率,控制每次参数更新的步长。
- `num_iters`:迭代次数,控制梯度下降算法的迭代次数。
接下来,我们在函数内部实现了梯度下降算法。具体来说,我们首先初始化参数向量 `theta` 为一个全零向量,并初始化代价函数 `J` 的历史记录为一个全零向量。然后我们开始迭代更新参数向量 `theta`,每次迭代都计算假设函数 `h`,误差 `error` 和梯度 `gradient`。然后使用梯度下降公式更新参数向量 `theta`,并计算代价函数 `J`。最后,我们将代价函数 `J` 的值记录在历史记录中,并返回最优参数向量 `theta` 和代价函数 `J` 的历史记录。
使用该函数时,您需要先准备好输入数据 `X` 和目标值 `y`,并指定学习率 `alpha` 和迭代次数 `num_iters`。然后,您可以像这样调用函数:
```python
theta, J_history = gradient_descent(X, y, alpha, num_iters)
```
其中 `theta` 是一个包含最优参数向量的向量,`J_history` 是一个包含代价函数 `J` 的历史记录的向量。
阅读全文