python实现小批量梯度下降算法
时间: 2023-10-05 07:08:28 浏览: 123
小批量梯度下降算法是梯度下降算法的一种改进,它不是在整个数据集上计算梯度,而是在每次迭代中随机选择一小部分数据进行计算。这样可以加快训练速度,同时也可以使模型更加稳定。
以下是Python实现小批量梯度下降算法的代码:
```python
import numpy as np
# 定义损失函数
def loss_function(X, y, w):
m = len(X)
y_pred = np.dot(X, w)
loss = np.sum((y_pred - y) ** 2) / (2 * m)
return loss
# 定义小批量梯度下降算法
def mini_batch_GD(X, y, w, learning_rate, num_iterations, batch_size):
m = len(X)
num_batches = m // batch_size
for i in range(num_iterations):
# 随机打乱数据集
permutation = np.random.permutation(m)
X_shuffled = X[permutation]
y_shuffled = y[permutation]
for j in range(num_batches):
# 选择一个小批量数据
start_index = j * batch_size
end_index = (j + 1) * batch_size
X_batch = X_shuffled[start_index:end_index]
y_batch = y_shuffled[start_index:end_index]
# 计算梯度并更新参数
y_pred = np.dot(X_batch, w)
gradient = np.dot(X_batch.T, (y_pred - y_batch)) / batch_size
w -= learning_rate * gradient
# 计算损失并输出
loss = loss_function(X, y, w)
print('iteration %d: loss=%f' % (i+1, loss))
return w
```
其中,X是数据集特征矩阵,y是标签向量,w是模型参数向量,learning_rate是学习率,num_iterations是迭代次数,batch_size是每个小批量数据的大小。在每次迭代中,我们首先将数据集随机打乱,然后选择一个小批量数据进行计算,计算梯度并更新参数。最后计算损失并输出。
阅读全文