随机梯度下降优化问题matlab代码举例
时间: 2024-10-12 17:01:36 浏览: 11
随机梯度下降(Stochastic Gradient Descent, SGD)是一种常用的机器学习优化算法,常用于大规模数据集上进行模型训练。在MATLAB中,可以使用内置函数如`fminunc`或者自定义循环来实现SGD。以下是一个简单的例子,假设我们要最小化一个线性回归的损失函数:
```matlab
% 假设我们有训练数据 X (特征) 和 y (目标值)
X = randn(100, 5); % 生成随机数据 (100行5列)
y = 2 * X(:, 1) + 4 * X(:, 2) + 7 + randn(100, 1); % 线性关系加噪声
% 定义代价函数 J 和梯度函数 gradJ
J = @(theta) mean((X * theta - y).^2);
gradJ = @(theta) 2 * X' * (X * theta - y);
% 初始化权重向量
theta_init = zeros(size(X, 2), 1);
% 设置学习率和迭代次数
alpha = 0.01; % 学习率
num_iterations = 1000;
% 使用随机梯度下降算法
for i = 1:num_iterations
% 随机选择一个样本来更新
idx = randi(size(X, 1));
theta = theta_init - alpha * gradJ(theta_init(idx, :)); % 更新当前样本的梯度下降
% 可选地,这里也可以用全量数据更新一次
% theta = theta_init - alpha * gradJ(theta_init);
end
% 输出最终得到的权重向量
disp("Final weights after training: ");
disp(theta);
```
在这个例子中,每次迭代都随机选取一个样本来计算梯度并更新参数,这正是随机梯度下降的核心思想。