小批量梯度下降法python代码实现
时间: 2024-08-11 14:01:47 浏览: 51
python应用Axes3D绘图(批量梯度下降算法)
小批量梯度下降(Stochastic Gradient Descent, SGD)是一种常用的优化算法,在机器学习中常用于训练模型。它通过随机选取一部分样本来更新模型权重,相比批量梯度下降(Batch Gradient Descent)更节省计算资源。以下是Python中使用`scikit-learn`库实现小批量梯度下降的一个简单示例:
```python
import numpy as np
from sklearn.base import BaseEstimator
class StochasticGD(BaseEstimator):
def __init__(self, learning_rate=0.01, batch_size=32):
self.learning_rate = learning_rate
self.batch_size = batch_size
self.weights = None
def fit(self, X, y):
n_samples, n_features = X.shape
self.weights = np.zeros(n_features)
for i in range(0, n_samples, self.batch_size):
batch_X = X[i:i+self.batch_size]
batch_y = y[i:i+self.batch_size]
gradient = self.gradient(batch_X, batch_y)
self.weights -= self.learning_rate * gradient
def gradient(self, X_batch, y_batch):
# 这里假设我们有一个简单的线性模型 w * X + b 的损失函数需要最小化
predictions = np.dot(X_batch, self.weights)
loss_gradient = (predictions - y_batch) / len(y_batch)
return loss_gradient
# 使用示例
X = ... # 输入特征矩阵
y = ... # 目标变量
sgd = StochasticGD()
sgd.fit(X, y)
```
在这个例子中,我们创建了一个基础的SGD类,并实现了`fit`方法来迭代训练数据。每次循环,都会从数据集中抽取一个小批次的样本进行梯度计算并更新权重。
阅读全文