写一个随机梯度下降的MATLAB代码
时间: 2024-09-29 10:02:40 浏览: 43
SGD随机梯度下降Matlab代码
随机梯度下降是一种常用的优化算法,用于寻找函数的最小值。以下是一个简单的随机梯度下降(Stochastic Gradient Descent,SGD)在MATLAB中的实现示例,假设我们有一个线性回归模型并想最小化代价函数。在这个例子中,我们将使用样本数据的一个小批量来进行更新。
```matlab
% 假设我们有特征矩阵 X 和目标向量 y
X = randn(100, 5); % 生成随机特征矩阵
y = 2 * X(:, 1) + 3 * X(:, 2) + 5; % 生成线性模型的目标
% 初始化权重向量和学习率
theta = zeros(size(X, 2), 1); % 假设输入特征为二维
alpha = 0.01; % 学习率
% 随机梯度下降迭代次数
num_iterations = 1000;
for iter = 1:num_iterations
% 随机选择一个小批量的数据
batch_idx = randperm(size(X, 1), min(10, size(X, 1))); % 取10个样例
batch_X = X(batch_idx, :);
batch_y = y(batch_idx);
% 计算梯度
gradient = (batch_X' * (batch_X * theta - batch_y)) / size(batch_X, 1);
% 更新权重
theta = theta - alpha * gradient;
end
% 输出最终的权重
disp(['Final weights: ', num2str(theta)]);
%
阅读全文