matlab随机梯度下降法代码
时间: 2023-09-06 15:13:32 浏览: 103
期权matlab代码-SGD:随机梯度下降
以下是一个简单的 MATLAB 随机梯度下降法的示例代码:
```matlab
function [theta, J_history] = stochasticGradientDescent(X, y, theta, alpha, num_iters)
% X 是输入特征数据,y 是对应的标签数据
% theta 是待求解的参数向量
% alpha 是学习率
% num_iters 是迭代次数
m = length(y); % 样本数
J_history = zeros(num_iters, 1); % 用于记录每次迭代后的代价函数值
for iter = 1:num_iters
% 随机选择一个样本
i = randi(m);
% 计算该样本的误差
error = (X(i,:) * theta - y(i)) * X(i,:)';
% 更新参数向量
theta = theta - alpha * error;
% 记录代价函数值
J_history(iter) = computeCost(X, y, theta);
end
end
```
其中,`computeCost` 函数是计算代价函数的,可以参考以下代码:
```matlab
function J = computeCost(X, y, theta)
% X 是输入特征数据,y 是对应的标签数据
% theta 是待求解的参数向量
m = length(y); % 样本数
J = (1 / (2 * m)) * sum((X * theta - y).^2);
end
```
使用示例如下:
```matlab
% 生成随机数据
m = 100;
n = 2;
X = [ones(m, 1), rand(m, n)];
y = rand(m, 1);
% 初始化参数向量
theta = zeros(n+1, 1);
% 设置学习率和迭代次数
alpha = 0.01;
num_iters = 1000;
% 运行随机梯度下降算法
[theta, J_history] = stochasticGradientDescent(X, y, theta, alpha, num_iters);
% 绘制代价函数值随迭代次数的变化
plot(1:num_iters, J_history, '-b', 'LineWidth', 2);
xlabel('Number of iterations');
ylabel('Cost J');
```
阅读全文