梯度下降法python 实现
时间: 2023-06-29 14:16:51 浏览: 99
好的,下面是一个简单的Python实现梯度下降法的示例:
```python
import numpy as np
def gradient_descent(X, y, theta, alpha, num_iters):
"""
X: 训练数据特征矩阵,m x n
y: 训练数据标签,m x 1
theta: 初始参数,n x 1
alpha: 学习率
num_iters: 迭代次数
"""
m = len(y)
for i in range(num_iters):
# 计算预测值和误差
h = np.dot(X, theta)
loss = h - y
# 计算梯度
gradient = np.dot(X.T, loss) / m
# 更新参数
theta = theta - alpha * gradient
return theta
```
这个函数接受训练数据的特征矩阵X,标签y,初始参数theta,学习率alpha和迭代次数num_iters作为输入,返回学习得到的参数theta。在每次迭代中,首先计算预测值和误差,然后计算梯度,最后更新参数。
相关问题
梯度下降法python实现
梯度下降法(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` 的历史记录的向量。
机器学习梯度下降法python实现
机器学习中的梯度下降法是一种常用的优化算法,用于求解损失函数的最小值。在Python中,可以使用NumPy和Matplotlib等库来实现梯度下降法。具体实现步骤如下:
1. 定义损失函数和梯度函数;
2. 初始化参数;
3. 设置学习率和迭代次数;
4. 循环迭代,更新参数,直到满足停止条件;
5. 可视化损失函数和参数更新轨迹。
下面是一个简单的梯度下降法实现的范例代码:
import numpy as np
import matplotlib.pyplot as plt
# 定义损失函数和梯度函数
def loss_function(x):
return (x - 2.5)**2 - 1
def gradient_function(x):
return 2 * (x - 2.5)
# 初始化参数
xi = 0
lr = 0.1
epochs = 20
# 设置学习率和迭代次数
trajectory = []
# 循环迭代,更新参数,直到满足停止条件
for i in range(epochs):
trajectory.append(xi)
xi = xi - lr * gradient_function(xi)
# 可视化损失函数和参数更新轨迹
plot_x = np.linspace(-1, 6, 141)
plot_y = loss_function(plot_x)
plt.plot(plot_x, plot_y)
plt.plot(trajectory, loss_function(np.array(trajectory)), 'r-o')
plt.show()
阅读全文