小批量梯度下降python
时间: 2023-10-13 20:18:12 浏览: 100
批量梯度下降的python实现
小批量梯度下降(Mini-batch Gradient Descent)是一种介于批量梯度下降(Batch Gradient Descent)和随机梯度下降(Stochastic Gradient Descent)之间的优化算法,其思想是将训练数据集分成若干个小批量,每次使用一个小批量的数据来更新模型参数。
下面是一个使用Python实现小批量梯度下降的示例代码:
```python
import numpy as np
# 定义损失函数和梯度函数
def loss_function(theta, X, y):
m = len(y)
h = X.dot(theta)
J = 1 / (2 * m) * np.sum(np.square(h - y))
return J
def gradient_function(theta, X, y):
m = len(y)
h = X.dot(theta)
gradient = 1 / m * X.T.dot(h - y)
return gradient
# 定义小批量梯度下降函数
def mini_batch_gradient_descent(X, y, theta, learning_rate=0.01, batch_size=32, num_epochs=1000):
m = len(y)
num_batches = m // batch_size
for epoch in range(num_epochs):
for i in range(num_batches):
start_index = i * batch_size
end_index = (i + 1) * batch_size
X_batch = X[start_index:end_index]
y_batch = y[start_index:end_index]
gradient = gradient_function(theta, X_batch, y_batch)
theta = theta - learning_rate * gradient
loss = loss_function(theta, X, y)
print('Epoch {0}: loss = {1}'.format(epoch, loss))
return theta
```
其中,`X`和`y`分别表示训练数据集的特征矩阵和标签向量,`theta`表示模型参数,`learning_rate`表示学习率,`batch_size`表示每个小批量的大小,`num_epochs`表示迭代次数。
在函数体内,首先计算出训练数据集中小批量的数量`num_batches`,然后在每个epoch中遍历每个小批量,计算小批量的梯度`gradient`,并更新模型参数`theta`。最后计算损失函数的值`loss`,并输出当前的迭代次数和损失函数的值。
你可以根据自己的需求调整学习率、小批量大小、迭代次数等参数,以获得更好的训练效果。
阅读全文