matlab实现GD与SGD
时间: 2023-12-12 19:44:03 浏览: 129
在MATLAB中实现梯度下降(Gradient Descent,GD)和随机梯度下降(Stochastic Gradient Descent,SGD)可以通过以下步骤进行。
梯度下降(GD):
1. 定义损失函数和模型参数。
2. 初始化模型参数。
3. 重复以下步骤直到收敛:
a. 计算模型预测值。
b. 计算损失函数。
c. 计算梯度。
d. 更新模型参数。
以下是一个简单的示例代码,演示如何在MATLAB中实现梯度下降:
```matlab
% 数据准备
X = [1, 2, 3, 4, 5]; % 自变量
y = [2, 4, 6, 8, 10]; % 因变量
% 初始化模型参数
theta = 0;
alpha = 0.01; % 学习率
num_iters = 100; % 迭代次数
% 梯度下降迭代
for iter = 1:num_iters
% 计算模型预测值
y_pred = theta * X;
% 计算损失函数
loss = mean((y_pred - y).^2);
% 计算梯度
gradient = mean((y_pred - y) .* X);
% 更新模型参数
theta = theta - alpha * gradient;
end
% 输出最终的模型参数
disp(theta);
```
随机梯度下降(SGD):
1. 定义损失函数和模型参数。
2. 初始化模型参数。
3. 重复以下步骤直到收敛或达到指定的迭代次数:
a. 随机选择一个样本。
b. 计算模型预测值。
c. 计算损失函数。
d. 计算梯度。
e. 更新模型参数。
以下是一个简单的示例代码,演示如何在MATLAB中实现随机梯度下降:
```matlab
% 数据准备
X = [1, 2, 3, 4, 5]; % 自变量
y = [2, 4, 6, 8, 10]; % 因变量
% 初始化模型参数
theta = 0;
alpha = 0.01; % 学习率
num_iters = 100; % 迭代次数
% 随机梯度下降迭代
for iter = 1:num_iters
% 随机选择一个样本
idx = randi(length(X));
x_sample = X(idx);
y_sample = y(idx);
% 计算模型预测值
y_pred = theta * x_sample;
% 计算损失函数
loss = (y_pred - y_sample)^2;
% 计算梯度
gradient = (y_pred - y_sample) * x_sample;
% 更新模型参数
theta = theta - alpha * gradient;
end
% 输出最终的模型参数
disp(theta);
```
这些代码只是简单的示例,实际应用中可能需要根据具体情况进行修改和优化。
阅读全文